From 8983773ac6fef49203e7ee8cdbfde3e118bc3421 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Sat, 2 Mar 2019 09:11:11 +0800 Subject: [PATCH] fix bug when get tag id (#147) * fix bug when get tag id * fix wrong test * use GetTagCommitID on getTag but not git command --- repo_commit.go | 9 ++++++++- repo_tag.go | 4 ++-- repo_tag_test.go | 15 ++++++++++++++- 3 files changed, 24 insertions(+), 4 deletions(-) diff --git a/repo_commit.go b/repo_commit.go index bfbf5c6..fbb8f97 100644 --- a/repo_commit.go +++ b/repo_commit.go @@ -32,7 +32,14 @@ func (repo *Repository) GetBranchCommitID(name string) (string, error) { // GetTagCommitID returns last commit ID string of given tag. func (repo *Repository) GetTagCommitID(name string) (string, error) { - return repo.GetRefCommitID(TagPrefix + name) + stdout, err := NewCommand("rev-list", "-n", "1", name).RunInDir(repo.Path) + if err != nil { + if strings.Contains(err.Error(), "unknown revision or path") { + return "", ErrNotExist{name, ""} + } + return "", err + } + return strings.TrimSpace(stdout), nil } // parseCommitData parses commit information from the (uncompressed) raw diff --git a/repo_tag.go b/repo_tag.go index 77867f4..84825d7 100644 --- a/repo_tag.go +++ b/repo_tag.go @@ -76,12 +76,12 @@ func (repo *Repository) getTag(id SHA1) (*Tag, error) { // GetTag returns a Git tag by given name. func (repo *Repository) GetTag(name string) (*Tag, error) { - stdout, err := NewCommand("show-ref", "--tags", name).RunInDir(repo.Path) + idStr, err := repo.GetTagCommitID(name) if err != nil { return nil, err } - id, err := NewIDFromString(strings.Split(stdout, " ")[0]) + id, err := NewIDFromString(idStr) if err != nil { return nil, err } diff --git a/repo_tag_test.go b/repo_tag_test.go index 42fadcb..aadbefb 100644 --- a/repo_tag_test.go +++ b/repo_tag_test.go @@ -20,6 +20,19 @@ func TestRepository_GetTags(t *testing.T) { assert.NoError(t, err) assert.Len(t, tags, 1) assert.EqualValues(t, "test", tags[0].Name) - assert.EqualValues(t, "3ad28a9149a2864384548f3d17ed7f38014c9e8a", tags[0].ID.String()) + assert.EqualValues(t, "37991dec2c8e592043f47155ce4808d4580f9123", tags[0].ID.String()) assert.EqualValues(t, "commit", tags[0].Type) } + +func TestRepository_GetTag(t *testing.T) { + bareRepo1Path := filepath.Join(testReposDir, "repo1") + bareRepo1, err := OpenRepository(bareRepo1Path) + assert.NoError(t, err) + + tag, err := bareRepo1.GetTag("test") + assert.NoError(t, err) + assert.NotNil(t, tag) + assert.EqualValues(t, "test", tag.Name) + assert.EqualValues(t, "37991dec2c8e592043f47155ce4808d4580f9123", tag.ID.String()) + assert.EqualValues(t, "commit", tag.Type) +}