diff options
author | wxiaoguang <wxiaoguang@gmail.com> | 2024-02-09 11:02:53 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-09 11:02:53 +0800 |
commit | a24e1da7e9e38fc5f5c84c083d122c0cc3da4b74 (patch) | |
tree | 470d8c494c78ccd9022fcb0c4013b284398a9b38 /modules/git/signature_gogit.go | |
parent | da2f03750f9672c5aac48209539874f2af2673f1 (diff) | |
download | gitea-a24e1da7e9e38fc5f5c84c083d122c0cc3da4b74.tar.gz gitea-a24e1da7e9e38fc5f5c84c083d122c0cc3da4b74.zip |
Refactor parseSignatureFromCommitLine (#29054)
Replace #28849. Thanks to @yp05327 for the looking into the problem.
Fix #28840
The old behavior of newSignatureFromCommitline is not right. The new
parseSignatureFromCommitLine:
1. never fails
2. only accept one format (if there is any other, it could be easily added)
And add some tests.
Diffstat (limited to 'modules/git/signature_gogit.go')
-rw-r--r-- | modules/git/signature_gogit.go | 44 |
1 files changed, 0 insertions, 44 deletions
diff --git a/modules/git/signature_gogit.go b/modules/git/signature_gogit.go index c984ad6e20..1fc6aabceb 100644 --- a/modules/git/signature_gogit.go +++ b/modules/git/signature_gogit.go @@ -7,52 +7,8 @@ package git import ( - "bytes" - "strconv" - "strings" - "time" - "github.com/go-git/go-git/v5/plumbing/object" ) // Signature represents the Author or Committer information. type Signature = object.Signature - -// 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 for timestamp! -func newSignatureFromCommitline(line []byte) (_ *Signature, err error) { - sig := new(Signature) - emailStart := bytes.IndexByte(line, '<') - if emailStart > 0 { // Empty name has already occurred, even if it shouldn't - sig.Name = strings.TrimSpace(string(line[:emailStart-1])) - } - emailEnd := bytes.IndexByte(line, '>') - sig.Email = string(line[emailStart+1 : emailEnd]) - - // Check date format. - if len(line) > emailEnd+2 { - firstChar := line[emailEnd+2] - if firstChar >= 48 && firstChar <= 57 { - timestop := bytes.IndexByte(line[emailEnd+2:], ' ') - timestring := string(line[emailEnd+2 : emailEnd+2+timestop]) - seconds, _ := strconv.ParseInt(timestring, 10, 64) - sig.When = time.Unix(seconds, 0) - } else { - sig.When, err = time.Parse(GitTimeLayout, string(line[emailEnd+2:])) - if err != nil { - return nil, err - } - } - } else { - // Fall back to unix 0 time - sig.When = time.Unix(0, 0) - } - return sig, nil -} |