aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/vcs/git.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-10-15 09:47:17 +0200
committerDmitry Vyukov <dvyukov@google.com>2020-10-21 10:22:10 +0200
commite2605999d9d1fa4e98bcf850ed007cfd98f27383 (patch)
treed87623db89fd2db41621f1041de4b6674ac84f55 /pkg/vcs/git.go
parentff4a3345a1b2a40ff1b8b983153d0b1fcc72f1c5 (diff)
pkg/vcs: add ReleaseTag
Add ReleaseTag method that returns last release tag for the given commit. Update #2171
Diffstat (limited to 'pkg/vcs/git.go')
-rw-r--r--pkg/vcs/git.go31
1 files changed, 21 insertions, 10 deletions
diff --git a/pkg/vcs/git.go b/pkg/vcs/git.go
index 025fab69e..f487b60c2 100644
--- a/pkg/vcs/git.go
+++ b/pkg/vcs/git.go
@@ -482,36 +482,47 @@ func (git *git) bisectInconclusive(output []byte) ([]*Commit, error) {
return commits, nil
}
-func (git *git) previousReleaseTags(commit string, self bool) ([]string, error) {
+func (git *git) ReleaseTag(commit string) (string, error) {
+ tags, err := git.previousReleaseTags(commit, true, true)
+ if err != nil {
+ return "", err
+ }
+ if len(tags) == 0 {
+ return "", fmt.Errorf("no release tags found for commit %v", commit)
+ }
+ return tags[0], nil
+}
+
+func (git *git) previousReleaseTags(commit string, self, onlyTop bool) ([]string, error) {
var tags []string
if self {
output, err := git.git("tag", "--list", "--points-at", commit, "--merged", commit, "v*.*")
if err != nil {
return nil, err
}
- tags, err = gitParseReleaseTags(output)
- if err != nil {
- return nil, err
+ tags = gitParseReleaseTags(output)
+ if onlyTop && len(tags) != 0 {
+ return tags, nil
}
}
output, err := git.git("tag", "--no-contains", commit, "--merged", commit, "v*.*")
if err != nil {
return nil, err
}
- tags1, err := gitParseReleaseTags(output)
- if err != nil {
- return nil, err
- }
+ tags1 := gitParseReleaseTags(output)
tags = append(tags, tags1...)
+ if len(tags) == 0 {
+ return nil, fmt.Errorf("no release tags found for commit %v", commit)
+ }
return tags, nil
}
func (git *git) IsRelease(commit string) (bool, error) {
- tags1, err := git.previousReleaseTags(commit, true)
+ tags1, err := git.previousReleaseTags(commit, true, false)
if err != nil {
return false, err
}
- tags2, err := git.previousReleaseTags(commit, false)
+ tags2, err := git.previousReleaseTags(commit, false, false)
if err != nil {
return false, err
}