Skip to content

Commit

Permalink
Merge pull request #912 from divmain/smart_tag
Browse files Browse the repository at this point in the history
Enhancement: support prefix in prerelease smart tag
  • Loading branch information
randy3k committed Apr 4, 2018
2 parents ad605e1 + 92ea4f4 commit 71ad54b
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 23 deletions.
27 changes: 4 additions & 23 deletions core/commands/tag.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
from ..git_command import GitCommand
from ..ui_mixins.quick_panel import PanelActionMixin

RELEASE_REGEXP = re.compile(r"^([0-9A-Za-z-]*[A-Za-z-])?([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9]+))?$")
RELEASE_REGEXP = re.compile(r"^([0-9A-Za-z-]*[A-Za-z-])?([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9A-Za-z-\.]*?)?([0-9]+))?$")

TAG_CREATE_PROMPT = "Enter tag:"
TAG_CREATE_MESSAGE = "Tag \"{}\" created."
Expand All @@ -17,32 +17,13 @@
def smart_incremented_tag(tag, release_type):
"""
Automatic increment of a given tag depending on the type of release.
>>> smart_incremented_tag('v1.3.2', "prerelease") == 'v1.3.3-0'
>>> smart_incremented_tag('v1.3.2', "prepatch") == 'v1.3.3-0'
>>> smart_incremented_tag('v1.3.2', "preminor") == 'v1.4.0-0'
>>> smart_incremented_tag('v1.3.2', "premajor") == 'v2.0.0-0'
>>> smart_incremented_tag('v1.3.2', "patch") == 'v1.3.3'
>>> smart_incremented_tag('v1.3.2', "minor") == 'v1.4.0'
>>> smart_incremented_tag('v1.3.2', "major") == 'v2.0.0'
>>> smart_incremented_tag('v1.3.2-1', "prerelease") == 'v1.3.2-2'
>>> smart_incremented_tag('v1.3.2-1', "prepatch") == 'v1.3.3-0'
>>> smart_incremented_tag('v1.3.2-1', "preminor") == 'v1.4.0-0'
>>> smart_incremented_tag('v1.3.2-1', "premajor") == 'v2.0.0-0'
>>> smart_incremented_tag('v1.3.2-1', "patch") == 'v1.3.2'
>>> smart_incremented_tag('v1.3.2-1', "minor") == 'v1.4.0'
>>> smart_incremented_tag('v1.3.2-1', "major") == 'v2.0.0'
>>> smart_incremented_tag('v1.3.0-1', "patch") == 'v1.3.0'
>>> smart_incremented_tag('v1.3.0-1', "minor") == 'v1.3.0'
>>> smart_incremented_tag('v1.3.0-1', "major") == 'v2.0.0'
>>> smart_incremented_tag('v1.0.0-1', "major") == 'v1.0.0'
"""

m = RELEASE_REGEXP.match(tag)
if m:
prefix, major, minor, patch, prerelease = m.groups()
prefix, major, minor, patch, prefix2, prerelease = m.groups()
prefix = "" if not prefix else prefix
prefix2 = "" if not prefix2 else prefix2

if release_type == "premajor" \
or (not prerelease and release_type == "major") \
Expand All @@ -64,7 +45,7 @@ def smart_incremented_tag(tag, release_type):

if "pre" in release_type[0:3]:
prerelease = str(int(prerelease) + 1) if prerelease else "0"
return prefix + major + "." + minor + "." + patch + "-" + prerelease
return prefix + major + "." + minor + "." + patch + "-" + prefix2 + prerelease
else:
return prefix + major + "." + minor + "." + patch

Expand Down
39 changes: 39 additions & 0 deletions tests/test_smart_tag.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
from GitSavvy.core.commands.tag import smart_incremented_tag

import unittest


class TestSmartTag(unittest.TestCase):
def test_smart_tag(self):
self.assertEquals(smart_incremented_tag('v1.3.2', "prerelease"), 'v1.3.3-0')
self.assertEquals(smart_incremented_tag('v1.3.2', "prepatch"), 'v1.3.3-0')
self.assertEquals(smart_incremented_tag('v1.3.2', "preminor"), 'v1.4.0-0')
self.assertEquals(smart_incremented_tag('v1.3.2', "premajor"), 'v2.0.0-0')
self.assertEquals(smart_incremented_tag('v1.3.2', "patch"), 'v1.3.3')
self.assertEquals(smart_incremented_tag('v1.3.2', "minor"), 'v1.4.0')
self.assertEquals(smart_incremented_tag('v1.3.2', "major"), 'v2.0.0')
self.assertEquals(smart_incremented_tag('v1.3.2-1', "prerelease"), 'v1.3.2-2')
self.assertEquals(smart_incremented_tag('v1.3.2-1', "prepatch"), 'v1.3.3-0')
self.assertEquals(smart_incremented_tag('v1.3.2-1', "preminor"), 'v1.4.0-0')
self.assertEquals(smart_incremented_tag('v1.3.2-1', "premajor"), 'v2.0.0-0')
self.assertEquals(smart_incremented_tag('v1.3.2-1', "patch"), 'v1.3.2')
self.assertEquals(smart_incremented_tag('v1.3.2-1', "minor"), 'v1.4.0')
self.assertEquals(smart_incremented_tag('v1.3.2-1', "major"), 'v2.0.0')
self.assertEquals(smart_incremented_tag('v1.3.0-1', "patch"), 'v1.3.0')
self.assertEquals(smart_incremented_tag('v1.3.0-1', "minor"), 'v1.3.0')
self.assertEquals(smart_incremented_tag('v1.3.0-1', "major"), 'v2.0.0')
self.assertEquals(smart_incremented_tag('v1.0.0-1', "major"), 'v1.0.0')
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "prerelease"), 'v1.3.2-rc.2')
self.assertEquals(smart_incremented_tag('v1.3.2-rc.11', "prerelease"), 'v1.3.2-rc.12')
self.assertEquals(smart_incremented_tag('v1.3.2-beta1', "prerelease"), 'v1.3.2-beta2')
self.assertEquals(smart_incremented_tag('v1.3.2-beta9', "prerelease"), 'v1.3.2-beta10')
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "prepatch"), 'v1.3.3-rc.0')
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "preminor"), 'v1.4.0-rc.0')
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "premajor"), 'v2.0.0-rc.0')
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "patch"), 'v1.3.2')
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "minor"), 'v1.4.0')
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "major"), 'v2.0.0')
self.assertEquals(smart_incremented_tag('v1.3.0-rc.1', "patch"), 'v1.3.0')
self.assertEquals(smart_incremented_tag('v1.3.0-rc.1', "minor"), 'v1.3.0')
self.assertEquals(smart_incremented_tag('v1.3.0-rc.1', "major"), 'v2.0.0')
self.assertEquals(smart_incremented_tag('v1.0.0-rc.1', "major"), 'v1.0.0')

0 comments on commit 71ad54b

Please sign in to comment.