2014-07-26 08:24:27 +04:00
// Copyright 2014 The Gogs Authors. All rights reserved.
// Use of this source code is governed by a MIT-style
// license that can be found in the LICENSE file.
package git
import (
"bytes"
"strconv"
"time"
)
// Author and Committer information
type Signature struct {
Email string
Name string
When time . Time
}
2015-02-22 07:37:32 +03:00
// Helper to get a signature from the commit line, which looks like these:
2014-07-26 08:24:27 +04:00
// author Patrick Gundlach <gundlach@speedata.de> 1378823654 +0200
2015-02-22 07:37:32 +03:00
// author Patrick Gundlach <gundlach@speedata.de> Thu, 07 Apr 2005 22:13:13 +0200
2014-07-26 08:24:27 +04:00
// but without the "author " at the beginning (this method should)
// be used for author and committer.
//
2015-02-22 07:37:32 +03:00
// FIXME: include timezone for timestamp!
func newSignatureFromCommitline ( line [ ] byte ) ( _ * Signature , err error ) {
2014-07-26 08:24:27 +04:00
sig := new ( Signature )
emailstart := bytes . IndexByte ( line , '<' )
sig . Name = string ( line [ : emailstart - 1 ] )
emailstop := bytes . IndexByte ( line , '>' )
sig . Email = string ( line [ emailstart + 1 : emailstop ] )
2015-02-22 07:37:32 +03:00
// 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 {
2015-03-07 02:27:20 +03:00
sig . When , err = time . Parse ( "Mon Jan _2 15:04:05 2006 -0700" , string ( line [ emailstop + 2 : ] ) )
2015-02-22 07:37:32 +03:00
if err != nil {
return nil , err
}
2014-07-26 08:24:27 +04:00
}
return sig , nil
}