github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/git/authors.go (about) 1 package git 2 3 import ( 4 "sort" 5 "strings" 6 7 "github.com/metux/go-metabuild/util" 8 "github.com/metux/go-metabuild/util/cmd" 9 ) 10 11 const delim = " ||| " 12 13 func Authors() ([]string, error) { 14 c := append(gitCmd, "log", `--pretty=format:%an`+delim+`%ae`) 15 16 if out, err := cmd.RunOutLines(c, true); err == nil { 17 m := make(map[string]string) 18 for _, l := range out { 19 if name, email := util.StrSplitTwo(l, delim); email == "" { 20 if _, ok := m[name]; !ok { 21 m[name] = "" 22 } 23 } else { 24 m[name] = strings.ToLower(email) 25 } 26 } 27 lines := []string{} 28 for k, v := range m { 29 if v == "" { 30 lines = append(lines, k) 31 } else { 32 lines = append(lines, k+" <"+v+">") 33 } 34 } 35 sort.Strings(lines) 36 return lines, nil 37 } else { 38 return []string{}, err 39 } 40 }