From 5294d8d4844351d6169a1650d8f6ccc70120b07c Mon Sep 17 00:00:00 2001 From: knoflook Date: Fri, 1 Oct 2021 18:56:46 +0200 Subject: [PATCH] feat: add Tag.UpgradeElement(newTag Tag) which returns a difference between two tags --- tagcmp.go | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tagcmp.go b/tagcmp.go index c898c55..825c016 100644 --- a/tagcmp.go +++ b/tagcmp.go @@ -166,6 +166,25 @@ func (t Tag) IsCompatible(tag Tag) bool { return true } +// UpgradeElement returns a Tag object which is the difference between an old and new tag +// It can contain negative numbers if comparing with an older tag +func (curTag Tag) UpgradeElement(newTag Tag) (Tag, error) { + if !curTag.IsCompatible(newTag) { + return Tag{}, fmt.Errorf("%s and %s are not compatible with each other", curTag.String(), newTag.String()) + } + diff := Tag{ + Major: Itoa(Atoi(newTag.Major) - Atoi(curTag.Major)), + Minor: Itoa(Atoi(newTag.Minor) - Atoi(curTag.Minor)), + MissingMinor: false, + Patch: Itoa(Atoi(newTag.Patch) - Atoi(curTag.Patch)), + MissingPatch: false, + UsesV: false, + Suffix: "", + } + + return diff, nil +} + // CommitHashPattern matches commit-like hash tags var CommitHashPattern = "^[a-f0-9]{7,40}$"