123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- package git
- import (
- "bytes"
- "strconv"
- "time"
- )
- type Signature struct {
- Email string
- Name string
- When time.Time
- }
- func newSignatureFromCommitline(line []byte) (_ *Signature, err error) {
- sig := new(Signature)
- emailstart := bytes.IndexByte(line, '<')
- sig.Name = string(line[:emailstart-1])
- emailstop := bytes.IndexByte(line, '>')
- sig.Email = string(line[emailstart+1 : emailstop])
-
- firstChar := line[emailstop+2]
- if firstChar >= 48 && firstChar <= 57 {
- timestop := bytes.IndexByte(line[emailstop+2:], ' ')
- timestring := string(line[emailstop+2 : emailstop+2+timestop])
- seconds, err := strconv.ParseInt(timestring, 10, 64)
- if err != nil {
- return nil, err
- }
- sig.When = time.Unix(seconds, 0)
- } else {
- sig.When, err = time.Parse("Mon Jan _2 15:04:05 2006 -0700", string(line[emailstop+2:]))
- if err != nil {
- return nil, err
- }
- }
- return sig, nil
- }
|