pseudo-version: allow tags that are only references

This commit is contained in:
Malte Poll 2022-07-14 17:16:38 +02:00 committed by Paul Meyer
parent cce2611e2a
commit d1d24ca587

View File

@ -11,7 +11,10 @@ import (
"github.com/go-git/go-git/v5/plumbing/storer"
)
var versionRegex = regexp.MustCompile(`^v\d+\.\d+\.\d+$`)
var (
versionRegex = regexp.MustCompile(`^v\d+\.\d+\.\d+$`)
tagReference = regexp.MustCompile(`^refs/tags/([^/]+)$`)
)
type Git struct {
repo *git.Repository
@ -87,19 +90,24 @@ func (g *Git) tagsByRevisionHash() (map[string][]string, error) {
switch err {
case nil:
// Tag object present
commit, err := tag.Commit()
if err != nil {
return err
}
commitHash := commit.Hash.String()
tags[commitHash] = append(tags[commitHash], tag.Name)
case plumbing.ErrObjectNotFound:
// Not a tag object
return nil
message, err := tagRefToMessage(ref)
if err != nil {
return err
}
tags[ref.Hash().String()] = append(tags[ref.Hash().String()], message)
default:
// Some other error
return err
}
commit, err := tag.Commit()
if err != nil {
return err
}
commitHash := commit.Hash.String()
tags[commitHash] = append(tags[commitHash], tag.Name)
return nil
},
); err != nil {
@ -117,3 +125,11 @@ func (g *Git) findVersionTag(tags []string) *string {
}
return nil
}
func tagRefToMessage(tagRef *plumbing.Reference) (string, error) {
matches := tagReference.FindStringSubmatch(tagRef.Name().String())
if len(matches) != 2 {
return "", errors.New("invalid tag reference")
}
return matches[1], nil
}