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)  } | 
