Skip to content

Commit d150d89

Browse files
committed
cmd: fix looking at tags not in the branch
Signed-off-by: Matheus Pimenta <matheuscscp@gmail.com>
1 parent 5279a41 commit d150d89

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

cmd/internal/compute_module_bumps.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"github.com/go-git/go-git/v5"
2828
"github.com/go-git/go-git/v5/plumbing"
2929
"github.com/go-git/go-git/v5/plumbing/format/diff"
30+
"github.com/go-git/go-git/v5/plumbing/object"
3031
)
3132

3233
// ComputeModuleBumps looks at the current Git repository and computes
@@ -66,6 +67,21 @@ func ComputeModuleBumps(ctx context.Context) (*ModuleBumps, error) {
6667
fmt.Println("Current branch:", currentBranch)
6768
fmt.Println("Release mode:", releaseMode)
6869

70+
// Build set of all commits reachable from HEAD.
71+
commitIter, err := repo.Log(&git.LogOptions{From: headRef.Hash()})
72+
if err != nil {
73+
return nil, fmt.Errorf("failed to get commit log: %w", err)
74+
}
75+
defer commitIter.Close()
76+
reachable := make(map[plumbing.Hash]struct{})
77+
err = commitIter.ForEach(func(c *object.Commit) error {
78+
reachable[c.Hash] = struct{}{}
79+
return nil
80+
})
81+
if err != nil {
82+
return nil, fmt.Errorf("failed to iterate commits: %w", err)
83+
}
84+
6985
// Get iterator for tags in the repository.
7086
tagsIter, err := repo.Tags()
7187
if err != nil {
@@ -77,6 +93,18 @@ func ComputeModuleBumps(ctx context.Context) (*ModuleBumps, error) {
7793
moduleTags := make(map[string][]*semver.Version)
7894
err = tagsIter.ForEach(func(ref *plumbing.Reference) error {
7995
tag := ref.Name().Short()
96+
97+
// Resolve tag to its target commit and skip if not reachable from HEAD.
98+
var targetHash plumbing.Hash
99+
if tagObj, err := repo.TagObject(ref.Hash()); err == nil {
100+
targetHash = tagObj.Target
101+
} else {
102+
targetHash = ref.Hash()
103+
}
104+
if _, ok := reachable[targetHash]; !ok {
105+
return nil
106+
}
107+
80108
for _, module := range taggables {
81109
prefix := module + "/v"
82110
if !strings.HasPrefix(tag, prefix) {

0 commit comments

Comments
 (0)