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  }