diff options
Diffstat (limited to 'pkg/git')
-rw-r--r-- | pkg/git/git.go | 47 |
1 files changed, 39 insertions, 8 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go index 9e7f9c9..d72e561 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -34,7 +34,7 @@ type ( } CommitReference struct { commit *object.Commit - ref *plumbing.Reference + refs []*plumbing.Reference } infoWrapper struct { name string @@ -103,10 +103,20 @@ func (g *GitRepository) LastCommit() (*CommitReference, error) { commitRef := &CommitReference{commit: c} if err := iter.ForEach(func(ref *plumbing.Reference) error { - if ref.Hash() != c.Hash { - return nil + obj, err := g.repository.TagObject(ref.Hash()) + switch err { + case nil: + if obj.Target == commitRef.commit.Hash { + commitRef.AddReference(ref) + } + case plumbing.ErrObjectNotFound: + if commitRef.commit.Hash == ref.Hash() { + commitRef.AddReference(ref) + } + default: + return err } - commitRef.ref = ref + return nil }); err != nil { return nil, err @@ -155,17 +165,26 @@ func (g *GitRepository) Commits(count int, from string) ([]*CommitReference, *ob } // new we fetch for possible tags for each commit - iter, err := g.repository.Tags() + iter, err := g.repository.References() if err != nil { return nil, nil, err } if err := iter.ForEach(func(ref *plumbing.Reference) error { for _, c := range commitRefs { - if c.commit.Hash != ref.Hash() { - continue + obj, err := g.repository.TagObject(ref.Hash()) + switch err { + case nil: + if obj.Target == c.commit.Hash { + c.AddReference(ref) + } + case plumbing.ErrObjectNotFound: + if c.commit.Hash == ref.Hash() { + c.AddReference(ref) + } + default: + return err } - c.ref = ref } return nil }); err != nil { @@ -497,6 +516,18 @@ func (c *CommitReference) Commit() *object.Commit { return c.commit } +func (c *CommitReference) HasReference() bool { + return len(c.refs) > 0 +} + +func (c *CommitReference) References() []*plumbing.Reference { + return c.refs +} + +func (c *CommitReference) AddReference(ref *plumbing.Reference) { + c.refs = append(c.refs, ref) +} + func (self *tagList) Len() int { return len(self.refs) } |