From a6cc9480d4e569858ec1fea24efd9f91bd57e676 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauris=20Buk=C5=A1is-Haberkorns?= Date: Tue, 5 Jun 2018 03:29:25 +0300 Subject: [PATCH 1/2] Add function to resolve short commit ID to full SHA1 --- commit.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/commit.go b/commit.go index 299a2381b..4e91d3c29 100644 --- a/commit.go +++ b/commit.go @@ -274,3 +274,19 @@ func (c *Commit) GetSubModule(entryname string) (*SubModule, error) { } return nil, nil } + +// GetFullCommitID returns full length (40) of commit ID by given short SHA in a repository. +func GetFullCommitID(repoPath, shortID string) (string, error) { + if len(shortID) >= 40 { + return shortID, nil + } + + commitID, err := NewCommand("rev-parse", shortID).RunInDir(repoPath) + if err != nil { + if strings.Contains(err.Error(), "exit status 128") { + return "", ErrNotExist{shortID, ""} + } + return "", err + } + return strings.TrimSpace(commitID), nil +} From c85816adb318b663598d8a9b441523713ca04834 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lauris=20Buk=C5=A1is-Haberkorns?= Date: Tue, 12 Jun 2018 12:42:51 +0300 Subject: [PATCH 2/2] Add tests for GetFullCommitID --- commit_test.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/commit_test.go b/commit_test.go index 121ba9c64..5b0cfca3a 100644 --- a/commit_test.go +++ b/commit_test.go @@ -14,3 +14,17 @@ func TestCommitsCount(t *testing.T) { commitsCount, _ := CommitsCount(".", "d86a90f801dbe279db095437a8c7ea42c60e8d98") assert.Equal(t, int64(3), commitsCount) } + +func TestGetFullCommitID(t *testing.T) { + id, err := GetFullCommitID(".", "d86a90f8") + assert.NoError(t, err) + assert.Equal(t, "d86a90f801dbe279db095437a8c7ea42c60e8d98", id) +} + +func TestGetFullCommitIDError(t *testing.T) { + id, err := GetFullCommitID(".", "unknown") + assert.Empty(t, id) + if assert.Error(t, err) { + assert.EqualError(t, err, "object does not exist [id: unknown, rel_path: ]") + } +}