diff options
author | zeripath <art27@cantab.net> | 2021-02-10 07:37:25 +0000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-02-10 07:37:25 +0000 |
commit | 0a23079485b8f40bc86f6869a202be8be2727cc6 (patch) | |
tree | 1ba25df2ce01c77596374d2abd335ee3b26d9a01 /modules | |
parent | f9abf94bd99b5b9c603037aaad4dd327b68263bd (diff) | |
download | gitea-0a23079485b8f40bc86f6869a202be8be2727cc6.tar.gz gitea-0a23079485b8f40bc86f6869a202be8be2727cc6.zip |
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>
Diffstat (limited to 'modules')
-rw-r--r-- | modules/git/repo_commit.go | 26 |
1 files changed, 15 insertions, 11 deletions
diff --git a/modules/git/repo_commit.go b/modules/git/repo_commit.go index f02fdde5a8..caf91e59fd 100644 --- a/modules/git/repo_commit.go +++ b/modules/git/repo_commit.go @@ -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. |