53 lines
1 KiB
Go
53 lines
1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"strings"
|
|
|
|
"github.com/go-git/go-git/v5"
|
|
"github.com/go-git/go-git/v5/plumbing/object"
|
|
|
|
"github.com/AlecAivazis/survey/v2"
|
|
)
|
|
|
|
func CheckIfError(err error) {
|
|
if err != nil {
|
|
log.Fatal("Fail")
|
|
os.Exit(1)
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
repo, err := git.PlainOpen(".")
|
|
CheckIfError(err)
|
|
|
|
cIter, err := repo.Log(&git.LogOptions{})
|
|
CheckIfError(err)
|
|
|
|
contributersMap := map[string]bool{}
|
|
contributers := []string{}
|
|
|
|
err = cIter.ForEach(func(c *object.Commit) error {
|
|
line := fmt.Sprintf("%s <%s>", c.Author.Name, c.Author.Email)
|
|
if !contributersMap[line] {
|
|
contributersMap[line] = true
|
|
contributers = append(contributers, line)
|
|
}
|
|
return nil
|
|
})
|
|
CheckIfError(err)
|
|
|
|
prompt := &survey.Select{
|
|
Message: "Which contributer:",
|
|
Options: contributers,
|
|
Filter: func(filterValue string, optValue string, optIndex int) bool {
|
|
return strings.Contains(optValue, filterValue)
|
|
},
|
|
}
|
|
|
|
contributer := ""
|
|
// or define a default for all of the questions
|
|
survey.AskOne(prompt, &contributer)
|
|
}
|