12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- package identity
- import (
- "strings"
- "gopkg.in/src-d/go-git.v4/plumbing/object"
- )
- // ParseMailmap parses the contents of .mailmap and returns the mapping
- // between signature parts. It does *not* follow the full signature
- // matching convention, that is, developers are identified by email
- // and by name independently.
- func ParseMailmap(contents string) map[string]object.Signature {
- mm := map[string]object.Signature{}
- lines := strings.Split(contents, "\n")
- for _, line := range lines {
- line = strings.TrimSpace(line)
- if line == "" {
- continue
- }
- if strings.HasPrefix(line, "#") {
- continue
- }
- if strings.LastIndex(line, ">") != len(line)-1 {
- continue
- }
- ltp := strings.LastIndex(line, "<")
- fromEmail := line[ltp+1 : len(line)-1]
- line = strings.TrimSpace(line[:ltp])
- gtp := strings.LastIndex(line, ">")
- fromName := ""
- if gtp != len(line)-1 {
- fromName = strings.TrimSpace(line[gtp+1:])
- }
- toEmail := ""
- if gtp > 0 {
- line = line[:gtp]
- ltp = strings.LastIndex(line, "<")
- toEmail = line[ltp+1:]
- line = strings.TrimSpace(line[:ltp])
- }
- toName := line
- if fromEmail != "" {
- mm[fromEmail] = object.Signature{Name: toName, Email: toEmail}
- }
- if fromName != "" {
- mm[fromName] = object.Signature{Name: toName, Email: toEmail}
- }
- }
- return mm
- }
|