mirror of
				https://github.com/go-gitea/gitea
				synced 2025-10-31 03:18:24 +00:00 
			
		
		
		
	modules/git: able to parse RFC1123Z date format #663
This commit is contained in:
		| @@ -17,24 +17,35 @@ type Signature struct { | |||||||
| 	When  time.Time | 	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> 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) | // but without the "author " at the beginning (this method should) | ||||||
| // be used for author and committer. | // be used for author and committer. | ||||||
| // | // | ||||||
| // FIXME: include timezone! | // FIXME: include timezone for timestamp! | ||||||
| func newSignatureFromCommitline(line []byte) (*Signature, error) { | func newSignatureFromCommitline(line []byte) (_ *Signature, err error) { | ||||||
| 	sig := new(Signature) | 	sig := new(Signature) | ||||||
| 	emailstart := bytes.IndexByte(line, '<') | 	emailstart := bytes.IndexByte(line, '<') | ||||||
| 	sig.Name = string(line[:emailstart-1]) | 	sig.Name = string(line[:emailstart-1]) | ||||||
| 	emailstop := bytes.IndexByte(line, '>') | 	emailstop := bytes.IndexByte(line, '>') | ||||||
| 	sig.Email = string(line[emailstart+1 : emailstop]) | 	sig.Email = string(line[emailstart+1 : emailstop]) | ||||||
| 	timestop := bytes.IndexByte(line[emailstop+2:], ' ') |  | ||||||
| 	timestring := string(line[emailstop+2 : emailstop+2+timestop]) | 	// Check date format. | ||||||
| 	seconds, err := strconv.ParseInt(timestring, 10, 64) | 	firstChar := line[emailstop+2] | ||||||
| 	if err != nil { | 	if firstChar >= 48 && firstChar <= 57 { | ||||||
| 		return nil, err | 		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 | 	return sig, nil | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user