Compare commits

..

2 Commits

Author SHA1 Message Date
Sebastian Beisch
5225b12c00 style(internal) clean up code 2021-04-28 08:43:10 +02:00
Sebastian Beisch
2cd24777b3 fix(internal): improve git log for commits on current branch since last release
At the moment when PRs where done in parallel it could happen that some commits where ignored in the release. This should be fixed now
2021-04-28 08:43:10 +02:00
2 changed files with 35 additions and 29 deletions

View File

@@ -11,7 +11,6 @@ import (
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing"
"github.com/go-git/go-git/v5/plumbing/object"
"github.com/go-git/go-git/v5/plumbing/storer"
log "github.com/sirupsen/logrus"
)
@@ -77,14 +76,14 @@ func (g *GitUtil) GetBranch() (string, error) {
}
// GetLastVersion from git tags
func (g *GitUtil) GetLastVersion() (*semver.Version, string, error) {
func (g *GitUtil) GetLastVersion() (*semver.Version, *plumbing.Reference, error) {
var tags []*semver.Version
gitTags, err := g.Repository.Tags()
if err != nil {
return nil, "", err
return nil, nil, err
}
err = gitTags.ForEach(func(p *plumbing.Reference) error {
@@ -100,63 +99,70 @@ func (g *GitUtil) GetLastVersion() (*semver.Version, string, error) {
})
if err != nil {
return nil, "", err
return nil, nil, err
}
sort.Sort(sort.Reverse(semver.Collection(tags)))
if len(tags) == 0 {
log.Debugf("Found no tags")
return nil, "", nil
return nil, nil, nil
}
log.Debugf("Found old version %s", tags[0].String())
tag, err := g.Repository.Tag(tags[0].Original())
if err != nil {
return nil, "", err
return nil, nil, err
}
log.Debugf("Found old hash %s", tag.Hash().String())
return tags[0], tag.Hash().String(), nil
return tags[0], tag, nil
}
// GetCommits from git hash to HEAD
func (g *GitUtil) GetCommits(lastTagHash string) ([]shared.Commit, error) {
func (g *GitUtil) GetCommits(lastTagHash *plumbing.Reference) ([]shared.Commit, error) {
excludeIter, err := g.Repository.Log(&git.LogOptions{From: lastTagHash.Hash()})
if err != nil {
return nil, err
}
seen := map[plumbing.Hash]struct{}{}
err = excludeIter.ForEach(func(c *object.Commit) error {
seen[c.Hash] = struct{}{}
return nil
})
if err != nil {
return nil, err
}
var isValid object.CommitFilter = func(commit *object.Commit) bool {
_, ok := seen[commit.Hash]
return !ok && len(commit.ParentHashes) < 2
}
ref, err := g.Repository.Head()
if err != nil {
return nil, err
}
cIter, err := g.Repository.Log(&git.LogOptions{From: ref.Hash(), Order: git.LogOrderCommitterTime})
startCommit, err := g.Repository.CommitObject(ref.Hash())
if err != nil {
return nil, err
}
cIter := object.NewFilterCommitIter(startCommit, &isValid, nil)
commits := make(map[string]shared.Commit)
var foundEnd bool
err = cIter.ForEach(func(c *object.Commit) error {
if c.Hash.String() == lastTagHash {
log.Debugf("Found commit with hash %s, will stop here", c.Hash.String())
foundEnd = true
return storer.ErrStop
}
if !foundEnd {
log.Tracef("Found commit with hash %s", c.Hash.String())
commits[c.Hash.String()] = shared.Commit{
Message: c.Message,
Author: c.Committer.Name,
Hash: c.Hash.String(),
}
log.Debugf("Found commit with hash %s", c.Hash.String())
commits[c.Hash.String()] = shared.Commit{
Message: c.Message,
Author: c.Committer.Name,
Hash: c.Hash.String(),
}
return nil
})
if err != nil {
return nil, errors.Wrap(err, "Could not read commits, check git clone depth in your ci")
}

View File

@@ -131,7 +131,7 @@ func (s *SemanticRelease) GetNextVersion(provider *ci.ProviderConfig, force bool
Version: &newVersion,
},
Last: shared.ReleaseVersionEntry{
Commit: lastVersionHash,
Commit: lastVersionHash.Hash().String(),
Version: lastVersion,
},
Branch: provider.Branch,
@@ -171,7 +171,7 @@ func (s *SemanticRelease) SetVersion(provider *ci.ProviderConfig, version string
Version: newVersion,
},
Last: shared.ReleaseVersionEntry{
Commit: lastVersionHash,
Commit: lastVersionHash.Hash().String(),
Version: lastVersion,
},
Branch: provider.Branch,