aboutsummaryrefslogtreecommitdiff
path: root/pkg/git/git.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/git/git.go')
-rw-r--r--pkg/git/git.go47
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)
}