diff --git a/repo_commit.go b/repo_commit.go index bfbf5c6da..fbb8f97a1 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 77867f46c..84825d7dc 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 42fadcb0d..aadbefb02 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) +}