]> source.dussan.org Git - gitea.git/commitdiff
modules/git: able to parse RFC1123Z date format #663
authorUnknwon <u@gogs.io>
Sun, 22 Feb 2015 04:37:32 +0000 (23:37 -0500)
committerUnknwon <u@gogs.io>
Sun, 22 Feb 2015 04:37:32 +0000 (23:37 -0500)
modules/git/signature.go

index 20f647d2662becbeb72c45d931693370346421a7..ad9c1b39b7a5eeae84ca0a10f8a9733801a4a377 100644 (file)
@@ -17,24 +17,35 @@ type Signature struct {
        When  time.Time
 }
 
-// Helper to get a signature from the commit line, which looks like this:
+// Helper to get a signature from the commit line, which looks like these:
 //     author Patrick Gundlach <gundlach@speedata.de> 1378823654 +0200
+//     author Patrick Gundlach <gundlach@speedata.de> Thu, 07 Apr 2005 22:13:13 +0200
 // but without the "author " at the beginning (this method should)
 // be used for author and committer.
 //
-// FIXME: include timezone!
-func newSignatureFromCommitline(line []byte) (*Signature, error) {
+// FIXME: include timezone for timestamp!
+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])
-       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
+
+       // Check date format.
+       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(time.RFC1123Z, string(line[emailstop+2:]))
+               if err != nil {
+                       return nil, err
+               }
        }
-       sig.When = time.Unix(seconds, 0)
        return sig, nil
 }