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
					
				
					 1 changed files with 15 additions and 11 deletions
				
			
		|  | @ -31,19 +31,23 @@ func (repo *Repository) GetTagCommitID(name string) (string, error) { | ||||||
| 
 | 
 | ||||||
| // ConvertToSHA1 returns a Hash object from a potential ID string
 | // ConvertToSHA1 returns a Hash object from a potential ID string
 | ||||||
| func (repo *Repository) ConvertToSHA1(commitID string) (SHA1, error) { | func (repo *Repository) ConvertToSHA1(commitID string) (SHA1, error) { | ||||||
| 	if len(commitID) != 40 { | 	if len(commitID) == 40 { | ||||||
| 		var err error | 		sha1, err := NewIDFromString(commitID) | ||||||
| 		actualCommitID, err := NewCommand("rev-parse", "--verify", commitID).RunInDir(repo.Path) | 		if err == nil { | ||||||
| 		if err != nil { | 			return sha1, 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 |  | ||||||
| 		} | 		} | ||||||
| 		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.
 | // GetCommit returns commit object of by ID string.
 | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue