modules/git: able to parse RFC1123Z date format #663
This commit is contained in:
		
							parent
							
								
									3fcc39c26b
								
							
						
					
					
						commit
						9dfa17faf2
					
				
					 1 changed files with 20 additions and 9 deletions
				
			
		|  | @ -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 | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue