mailmap.go 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package hercules
  2. import (
  3. "strings"
  4. "gopkg.in/src-d/go-git.v4/plumbing/object"
  5. )
  6. func ParseMailmap(contents string) map[string]object.Signature {
  7. mm := map[string]object.Signature{}
  8. lines := strings.Split(contents, "\n")
  9. for _, line := range lines {
  10. line = strings.TrimSpace(line)
  11. if line == "" {
  12. continue
  13. }
  14. if strings.HasPrefix(line, "#") {
  15. continue
  16. }
  17. if strings.LastIndex(line, ">") != len(line) - 1 {
  18. continue
  19. }
  20. ltp := strings.LastIndex(line, "<")
  21. fromEmail := line[ltp + 1:len(line) - 1]
  22. line = strings.TrimSpace(line[:ltp])
  23. gtp := strings.LastIndex(line, ">")
  24. fromName := ""
  25. if gtp != len(line) - 1 {
  26. fromName = strings.TrimSpace(line[gtp + 1:])
  27. }
  28. toEmail := ""
  29. if gtp > 0 {
  30. ltp = strings.LastIndex(line, "<")
  31. toEmail = line[ltp + 1:gtp]
  32. line = strings.TrimSpace(line[:ltp])
  33. }
  34. toName := line
  35. if fromEmail != "" {
  36. mm[fromEmail] = object.Signature{Name: toName, Email: toEmail}
  37. }
  38. if fromName != "" {
  39. mm[fromName] = object.Signature{Name: toName, Email: toEmail}
  40. }
  41. }
  42. return mm
  43. }