Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 14 additions & 3 deletions cmd/urls.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,25 @@ var (
Short: "get urls for repositories",
Long: `get urls for repositories for each student or group in course for assignment.
You can specify students or groups in order to get an url only for these.`,
Args: cobra.MinimumNArgs(2), //nolint:gomnd
Args: cobra.MinimumNArgs(1), //nolint:gomnd
Run: func(cmd *cobra.Command, args []string) {
assignmentConfig := config.GetAssignmentConfig(args[0], args[1], args[2:]...)
assignmentConfig.Urls(len(args) == 2)
if len(args) == 1 {
config.GetCourseURL(args[0])
} else {
assignmentConfig := config.GetAssignmentConfig(args[0], args[1], args[2:]...)
if startercode {
assignmentConfig.StartercodeURL()
} else {
assignmentConfig.Urls(len(args) == 2)
}
}
},
}
startercode bool
)

func init() {
rootCmd.AddCommand(urlsCmd)
urlsCmd.Flags().BoolVarP(&startercode, "startercode", "s", false, "print url of startercode")

}
12 changes: 11 additions & 1 deletion config/assignment.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ import (
"github.com/spf13/viper"
)

func GetCourseURL(course string) {
fmt.Printf("%s/%s\n", viper.GetString("gitlab.host"), coursePath(course))
}

func GetAssignmentConfig(course, assignment string, onlyForStudentsOrGroups ...string) *AssignmentConfig {
if !viper.IsSet(course) {
log.Fatal().
Expand Down Expand Up @@ -147,12 +151,18 @@ func (cfg *AssignmentConfig) RepoNameForGroup(group *Group) string {
return cfg.RepoNameWithSuffix(group.Name)
}

func assignmentPath(course, assignment string) string {
func coursePath(course string) string {
path := viper.GetString(course + ".coursepath")
if semesterpath := viper.GetString(course + ".semesterpath"); len(semesterpath) > 0 {
path += "/" + semesterpath
}

return path
}

func assignmentPath(course, assignment string) string {
path := coursePath(course)

assignmentpath := path
if group := viper.GetString(course + "." + assignment + ".assignmentpath"); len(group) > 0 {
assignmentpath += "/" + group
Expand Down
44 changes: 43 additions & 1 deletion config/urls.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,48 @@
package config

import "fmt"
import (
"fmt"
"strings"
)

func (cfg *AssignmentConfig) StartercodeURL() {
url, err := cfg.gitURLToWebURL(cfg.Startercode.URL)
if err != nil {
fmt.Printf("error: %s\n", err)
return
}
fmt.Println(url)
}

func (cfg *AssignmentConfig) gitURLToWebURL(raw string) (string, error) {
raw = strings.TrimSpace(raw)

if raw == "" {
return "", fmt.Errorf("leere URL")
}

// Bereits Web-URL -> direkt zurückgeben
if strings.HasPrefix(raw, "https://") || strings.HasPrefix(raw, "http://") {
return raw, nil
}

// Git SSH Form: git@host:path.git
if strings.HasPrefix(raw, "git@") {
rest := strings.TrimPrefix(raw, "git@")
i := strings.Index(rest, ":")
if i < 0 {
return "", fmt.Errorf("ungültige SSH-URL: %q", raw)
}

host := rest[:i]
path := rest[i+1:]
path = strings.TrimSuffix(path, ".git")

return "https://" + host + "/" + path, nil
}

return "", fmt.Errorf("nicht unterstütztes URL-Format: %q", raw)
}

func (cfg *AssignmentConfig) Urls(assignment bool) {
if assignment {
Expand Down
Loading