diff --git a/README.md b/README.md
index 4c85cf7..0820f01 100644
--- a/README.md
+++ b/README.md
@@ -67,6 +67,7 @@ Contents:
coursepath:
# if you want to generate directly in coursepath, do not define semesterpath
semesterpath:
+ useCoursenameAsPrefix: # if true, repos start with -, default false
students: # needs only to defined if generating per student
groups: # if students are allowed to work in groups
@@ -118,12 +119,22 @@ Contents:
groups:
```
+Naming behavior:
+
+- `useCoursenameAsPrefix: false` (default)
+ - student repo: `-` (example: `blatt1-max_mustermann_at_hm.edu`)
+ - group repo: `-` (example: `blatt1-grp01`)
+- `useCoursenameAsPrefix: true`
+ - student repo: `--` (example: `algdati-blatt1-max_mustermann_at_hm.edu`)
+ - group repo: `--` (example: `algdati-blatt1-grp01`)
+
Example:
```.yaml
algdati:
coursepath: algdati
semesterpath: semester/ob-20ws
+ useCoursenameAsPrefix: true
students:
- 12334 # GitLab ID
- ob@glabs.io # email address
diff --git a/config/assignment.go b/config/assignment.go
index d3e32c0..53074e5 100644
--- a/config/assignment.go
+++ b/config/assignment.go
@@ -48,20 +48,21 @@ func GetAssignmentConfig(course, assignment string, onlyForStudentsOrGroups ...s
}
assignmentConfig := &AssignmentConfig{
- Course: course,
- Name: assignment,
- Path: path,
- URL: url,
- Per: per,
- Description: description(assignmentKey),
- ContainerRegistry: containerRegistry,
- AccessLevel: accessLevel(assignmentKey),
- Students: students(per, course, assignment, onlyForStudentsOrGroups...),
- Groups: groups(per, course, assignment, onlyForStudentsOrGroups...),
- Startercode: startercode(assignmentKey),
- Clone: clone(assignmentKey),
- Release: release,
- Seeder: seeder(assignmentKey),
+ Course: course,
+ Name: assignment,
+ UseCoursenameAsPrefix: viper.GetBool(course + ".useCoursenameAsPrefix"),
+ Path: path,
+ URL: url,
+ Per: per,
+ Description: description(assignmentKey),
+ ContainerRegistry: containerRegistry,
+ AccessLevel: accessLevel(assignmentKey),
+ Students: students(per, course, assignment, onlyForStudentsOrGroups...),
+ Groups: groups(per, course, assignment, onlyForStudentsOrGroups...),
+ Startercode: startercode(assignmentKey),
+ Clone: clone(assignmentKey),
+ Release: release,
+ Seeder: seeder(assignmentKey),
}
return assignmentConfig
@@ -83,6 +84,26 @@ func (cfg *AssignmentConfig) RepoSuffix(student *Student) string {
return ""
}
+func (cfg *AssignmentConfig) RepoBaseName() string {
+ if cfg.UseCoursenameAsPrefix {
+ return fmt.Sprintf("%s-%s", cfg.Course, cfg.Name)
+ }
+
+ return cfg.Name
+}
+
+func (cfg *AssignmentConfig) RepoNameWithSuffix(suffix string) string {
+ return fmt.Sprintf("%s-%s", cfg.RepoBaseName(), suffix)
+}
+
+func (cfg *AssignmentConfig) RepoNameForStudent(student *Student) string {
+ return cfg.RepoNameWithSuffix(cfg.RepoSuffix(student))
+}
+
+func (cfg *AssignmentConfig) RepoNameForGroup(group *Group) string {
+ return cfg.RepoNameWithSuffix(group.Name)
+}
+
func assignmentPath(course, assignment string) string {
path := viper.GetString(course + ".coursepath")
if semesterpath := viper.GetString(course + ".semesterpath"); len(semesterpath) > 0 {
diff --git a/config/show.go b/config/show.go
index d74fb94..7bab78d 100644
--- a/config/show.go
+++ b/config/show.go
@@ -135,6 +135,7 @@ func (cfg *AssignmentConfig) Show() {
fmt.Print(aurora.Sprintf(aurora.Cyan(`
Course: %s
Assignment: %s
+Coursename-Prefix: %t
Per: %s
Base-URL: %s
Description: %s
@@ -148,6 +149,7 @@ Release: %s
`),
aurora.Yellow(cfg.Course),
aurora.Yellow(cfg.Name),
+ aurora.Yellow(cfg.UseCoursenameAsPrefix),
aurora.Yellow(cfg.Per),
aurora.Yellow(cfg.URL),
aurora.Yellow(cfg.Description),
diff --git a/config/types.go b/config/types.go
index 2745c85..8ee7862 100644
--- a/config/types.go
+++ b/config/types.go
@@ -10,20 +10,21 @@ type Student struct {
}
type AssignmentConfig struct {
- Course string
- Name string
- Path string
- URL string
- Per Per
- Description string
- ContainerRegistry bool
- AccessLevel AccessLevel
- Students []*Student
- Groups []*Group
- Startercode *Startercode
- Clone *Clone
- Release *Release
- Seeder *Seeder
+ Course string
+ Name string
+ UseCoursenameAsPrefix bool
+ Path string
+ URL string
+ Per Per
+ Description string
+ ContainerRegistry bool
+ AccessLevel AccessLevel
+ Students []*Student
+ Groups []*Group
+ Startercode *Startercode
+ Clone *Clone
+ Release *Release
+ Seeder *Seeder
}
type Per string
diff --git a/config/urls.go b/config/urls.go
index 0967085..2ade07d 100644
--- a/config/urls.go
+++ b/config/urls.go
@@ -7,11 +7,11 @@ func (cfg *AssignmentConfig) Urls(assignment bool) {
fmt.Println(cfg.URL)
} else if cfg.Per == PerStudent {
for _, stud := range cfg.Students {
- fmt.Printf("%s/%s-%s\n", cfg.URL, cfg.Name, cfg.RepoSuffix(stud))
+ fmt.Printf("%s/%s\n", cfg.URL, cfg.RepoNameForStudent(stud))
}
} else { // PerGroup
for _, group := range cfg.Groups {
- fmt.Printf("%s/%s-%s\n", cfg.URL, cfg.Name, group.Name)
+ fmt.Printf("%s/%s\n", cfg.URL, cfg.RepoNameForGroup(group))
}
}
}
diff --git a/git/clone.go b/git/clone.go
index edd4d89..002d566 100644
--- a/git/clone.go
+++ b/git/clone.go
@@ -38,11 +38,11 @@ func Clone(cfg *config.AssignmentConfig, noSpinner bool) {
func cloneurl(cfg *config.AssignmentConfig, suffix string) string {
return fmt.Sprintf("%s/%s-%s",
strings.Replace(strings.Replace(cfg.URL, "https://", "git@", 1), "/", ":", 1),
- cfg.Name, suffix)
+ cfg.RepoBaseName(), suffix)
}
func localpath(cfg *config.AssignmentConfig, suffix string) string {
- return fmt.Sprintf("%s/%s-%s", cfg.Clone.LocalPath, cfg.Name, suffix)
+ return fmt.Sprintf("%s/%s", cfg.Clone.LocalPath, cfg.RepoNameWithSuffix(suffix))
}
func clone(localpath, branch, cloneurl string, auth ssh.AuthMethod, force bool, noSpinner bool) {
diff --git a/gitlab/archive.go b/gitlab/archive.go
index b424e93..95ce6f2 100644
--- a/gitlab/archive.go
+++ b/gitlab/archive.go
@@ -37,8 +37,7 @@ func (c *Client) archivePerStudent(assignmentCfg *config.AssignmentConfig, unarc
}
for _, student := range assignmentCfg.Students {
- name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
- projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, name)
+ projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForStudent(student))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
@@ -60,7 +59,7 @@ func (c *Client) archivePerGroup(assignmentCfg *config.AssignmentConfig, unarchi
}
for _, grp := range assignmentCfg.Groups {
- projectname := fmt.Sprintf("%s/%s-%s", assignmentCfg.Path, assignmentCfg.Name, grp.Name)
+ projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForGroup(grp))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
diff --git a/gitlab/delete.go b/gitlab/delete.go
index da0f0a3..933b43a 100644
--- a/gitlab/delete.go
+++ b/gitlab/delete.go
@@ -34,8 +34,7 @@ func (c *Client) deletePerStudent(assignmentCfg *config.AssignmentConfig, assign
}
for _, student := range assignmentCfg.Students {
- name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
- c.delete(assignmentGroupID, name)
+ c.delete(assignmentGroupID, assignmentCfg.RepoNameForStudent(student))
}
}
@@ -46,7 +45,7 @@ func (c *Client) deletePerGroup(assignmentCfg *config.AssignmentConfig, assignme
}
for _, grp := range assignmentCfg.Groups {
- c.delete(assignmentGroupID, assignmentCfg.Name+"-"+grp.Name)
+ c.delete(assignmentGroupID, assignmentCfg.RepoNameForGroup(grp))
}
}
diff --git a/gitlab/generate.go b/gitlab/generate.go
index f7bc7c3..74157e5 100644
--- a/gitlab/generate.go
+++ b/gitlab/generate.go
@@ -219,7 +219,7 @@ func (c *Client) generatePerStudent(assignmentCfg *config.AssignmentConfig, assi
}
for _, student := range assignmentCfg.Students {
- name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
+ name := assignmentCfg.RepoNameForStudent(student)
c.generate(assignmentCfg, assignmentGroupID, name, []*config.Student{student}, starterrepo)
}
}
@@ -232,6 +232,6 @@ func (c *Client) generatePerGroup(assignmentCfg *config.AssignmentConfig, assign
}
for _, grp := range assignmentCfg.Groups {
- c.generate(assignmentCfg, assignmentGroupID, assignmentCfg.Name+"-"+grp.Name, grp.Members, starterrepo)
+ c.generate(assignmentCfg, assignmentGroupID, assignmentCfg.RepoNameForGroup(grp), grp.Members, starterrepo)
}
}
diff --git a/gitlab/protect.go b/gitlab/protect.go
index 9022b6b..f217387 100644
--- a/gitlab/protect.go
+++ b/gitlab/protect.go
@@ -118,8 +118,7 @@ func (c *Client) protectToBranchPerStudent(assignmentCfg *config.AssignmentConfi
}
for _, student := range assignmentCfg.Students {
- name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
- projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, name)
+ projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForStudent(student))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
@@ -141,7 +140,7 @@ func (c *Client) protectToBranchPerGroup(assignmentCfg *config.AssignmentConfig)
}
for _, grp := range assignmentCfg.Groups {
- projectname := fmt.Sprintf("%s/%s-%s", assignmentCfg.Path, assignmentCfg.Name, grp.Name)
+ projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForGroup(grp))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
diff --git a/gitlab/setaccess.go b/gitlab/setaccess.go
index 9d23334..a9bc191 100644
--- a/gitlab/setaccess.go
+++ b/gitlab/setaccess.go
@@ -160,8 +160,7 @@ func (c *Client) setaccessPerStudent(assignmentCfg *config.AssignmentConfig) {
}
for _, student := range assignmentCfg.Students {
- name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
- projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, name)
+ projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForStudent(student))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
@@ -181,7 +180,7 @@ func (c *Client) setaccessPerGroup(assignmentCfg *config.AssignmentConfig) {
}
for _, grp := range assignmentCfg.Groups {
- projectname := fmt.Sprintf("%s/%s-%s", assignmentCfg.Path, assignmentCfg.Name, grp.Name)
+ projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForGroup(grp))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
diff --git a/gitlab/update.go b/gitlab/update.go
index cd35702..c6beec2 100644
--- a/gitlab/update.go
+++ b/gitlab/update.go
@@ -96,8 +96,7 @@ func (c *Client) updatePerStudent(assignmentCfg *config.AssignmentConfig, starte
}
for _, student := range assignmentCfg.Students {
- name := assignmentCfg.Name + "-" + assignmentCfg.RepoSuffix(student)
- projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, name)
+ projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForStudent(student))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},
@@ -117,7 +116,7 @@ func (c *Client) updatePerGroup(assignmentCfg *config.AssignmentConfig, starterr
}
for _, grp := range assignmentCfg.Groups {
- projectname := fmt.Sprintf("%s/%s-%s", assignmentCfg.Path, assignmentCfg.Name, grp.Name)
+ projectname := fmt.Sprintf("%s/%s", assignmentCfg.Path, assignmentCfg.RepoNameForGroup(grp))
project, _, err := c.Projects.GetProject(
projectname,
&gitlab.GetProjectOptions{},