Do not assume all 40 char strings are SHA1s (#14624)
GetCommit() assumes that all 40 char strings are SHA1s. This leads to an error if you try to do a PR on a branch which is 40 characters long. This PR attempts the SHA first - and if it fails will switch to using rev-parse. Fix #14470 Signed-off-by: Andrew Thornton <art27@cantab.net>
This commit is contained in:
		
							parent
							
								
									f9abf94bd9
								
							
						
					
					
						commit
						0a23079485
					
				| @ -31,19 +31,23 @@ func (repo *Repository) GetTagCommitID(name string) (string, error) { | ||||
| 
 | ||||
| // ConvertToSHA1 returns a Hash object from a potential ID string
 | ||||
| func (repo *Repository) ConvertToSHA1(commitID string) (SHA1, error) { | ||||
| 	if len(commitID) != 40 { | ||||
| 		var err error | ||||
| 		actualCommitID, err := NewCommand("rev-parse", "--verify", commitID).RunInDir(repo.Path) | ||||
| 		if err != nil { | ||||
| 			if strings.Contains(err.Error(), "unknown revision or path") || | ||||
| 				strings.Contains(err.Error(), "fatal: Needed a single revision") { | ||||
| 				return SHA1{}, ErrNotExist{commitID, ""} | ||||
| 			} | ||||
| 			return SHA1{}, err | ||||
| 	if len(commitID) == 40 { | ||||
| 		sha1, err := NewIDFromString(commitID) | ||||
| 		if err == nil { | ||||
| 			return sha1, nil | ||||
| 		} | ||||
| 		commitID = actualCommitID | ||||
| 	} | ||||
| 	return NewIDFromString(commitID) | ||||
| 
 | ||||
| 	actualCommitID, err := NewCommand("rev-parse", "--verify", commitID).RunInDir(repo.Path) | ||||
| 	if err != nil { | ||||
| 		if strings.Contains(err.Error(), "unknown revision or path") || | ||||
| 			strings.Contains(err.Error(), "fatal: Needed a single revision") { | ||||
| 			return SHA1{}, ErrNotExist{commitID, ""} | ||||
| 		} | ||||
| 		return SHA1{}, err | ||||
| 	} | ||||
| 
 | ||||
| 	return NewIDFromString(actualCommitID) | ||||
| } | ||||
| 
 | ||||
| // GetCommit returns commit object of by ID string.
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user