diff options
Diffstat (limited to 'pkg/git')
| -rw-r--r-- | pkg/git/git.go | 55 | 
1 files changed, 49 insertions, 6 deletions
diff --git a/pkg/git/git.go b/pkg/git/git.go index b33afa7..9e7f9c9 100644 --- a/pkg/git/git.go +++ b/pkg/git/git.go @@ -32,6 +32,10 @@ type (  		ref *plumbing.Reference  		tag *object.Tag  	} +	CommitReference struct { +		commit *object.Commit +		ref    *plumbing.Reference +	}  	infoWrapper struct {  		name    string  		size    int64 @@ -81,7 +85,7 @@ func (g *GitRepository) Path() string {  	return g.path  } -func (g *GitRepository) LastCommit() (*object.Commit, error) { +func (g *GitRepository) LastCommit() (*CommitReference, error) {  	err := g.validateRef()  	if err != nil {  		return nil, err @@ -91,10 +95,27 @@ func (g *GitRepository) LastCommit() (*object.Commit, error) {  	if err != nil {  		return nil, err  	} -	return c, nil + +	iter, err := g.repository.Tags() +	if err != nil { +		return nil, err +	} + +	commitRef := &CommitReference{commit: c} +	if err := iter.ForEach(func(ref *plumbing.Reference) error { +		if ref.Hash() != c.Hash { +			return nil +		} +		commitRef.ref = ref +		return nil +	}); err != nil { +		return nil, err +	} + +	return commitRef, nil  } -func (g *GitRepository) Commits(count int, from string) ([]*object.Commit, *object.Commit, error) { +func (g *GitRepository) Commits(count int, from string) ([]*CommitReference, *object.Commit, error) {  	err := g.validateRef()  	if err != nil {  		return nil, nil, err @@ -115,7 +136,7 @@ func (g *GitRepository) Commits(count int, from string) ([]*object.Commit, *obje  		return nil, nil, fmt.Errorf("commits from ref: %w", err)  	} -	commits := []*object.Commit{} +	commitRefs := []*CommitReference{}  	var next *object.Commit  	// iterate one more item so we can fetch the next commit @@ -129,11 +150,29 @@ func (g *GitRepository) Commits(count int, from string) ([]*object.Commit, *obje  		if x == count {  			next = c  		} else { -			commits = append(commits, c) +			commitRefs = append(commitRefs, &CommitReference{commit: c})  		}  	} -	return commits, next, nil +	// new we fetch for possible tags for each commit +	iter, err := g.repository.Tags() +	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 +			} +			c.ref = ref +		} +		return nil +	}); err != nil { +		return nil, nil, err +	} + +	return commitRefs, next, nil  }  func (g *GitRepository) Head() (*plumbing.Reference, error) { @@ -454,6 +493,10 @@ func (t *TagReference) Message() string {  	return ""  } +func (c *CommitReference) Commit() *object.Commit { +	return c.commit +} +  func (self *tagList) Len() int {  	return len(self.refs)  }  | 
