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}$"