diff --git a/src/cmd/utils/git_scope.go b/src/cmd/utils/git_scope.go new file mode 100644 index 0000000..5114d33 --- /dev/null +++ b/src/cmd/utils/git_scope.go @@ -0,0 +1,55 @@ +package utils + +import ( + "os/exec" + "strings" +) + +func GitCheckAuthors() []User { + // check for all authors in git repo + cmd := exec.Command("git", "shortlog", "-sne", "--all") + + out, err := cmd.Output() + if err != nil { + return nil + } + lines := strings.Split(string(out), "\n") + + cmd = exec.Command("git", "rev-parse", "--show-toplevel") + out, err = cmd.Output() + if err != nil { + return nil + } + git_folder := strings.TrimSpace(string(out)) + + var authors []User + for _, line := range lines { + parts := strings.Split(line, "\t") + if len(line) < 2 { + continue + } + nameAndEmail := strings.Split(parts[1], "<") + if len(nameAndEmail) < 2 { + continue + } + name := strings.TrimSpace(nameAndEmail[0]) + email := strings.TrimSpace(strings.TrimSuffix(nameAndEmail[1], ">")) + + authors = append(authors, User{ + Shortname: name[:2], + Longname: name, + Username: name, + Email: email, + Ex: false, + Groups: func () []string { if git_folder != "" { + return []string{git_folder} + } else { + return []string{} + } + }(), + }) + } + + return authors + +} \ No newline at end of file