Skip to content

Commit 92ea4f4

Browse files
committed
Enhancement: support prefix in prerelease
1 parent ad605e1 commit 92ea4f4

File tree

2 files changed

+43
-23
lines changed

2 files changed

+43
-23
lines changed

core/commands/tag.py

Lines changed: 4 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from ..git_command import GitCommand
77
from ..ui_mixins.quick_panel import PanelActionMixin
88

9-
RELEASE_REGEXP = re.compile(r"^([0-9A-Za-z-]*[A-Za-z-])?([0-9]+)\.([0-9]+)\.([0-9]+)(?:-([0-9]+))?$")
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]+))?$")
1010

1111
TAG_CREATE_PROMPT = "Enter tag:"
1212
TAG_CREATE_MESSAGE = "Tag \"{}\" created."
@@ -17,32 +17,13 @@
1717
def smart_incremented_tag(tag, release_type):
1818
"""
1919
Automatic increment of a given tag depending on the type of release.
20-
21-
>>> smart_incremented_tag('v1.3.2', "prerelease") == 'v1.3.3-0'
22-
>>> smart_incremented_tag('v1.3.2', "prepatch") == 'v1.3.3-0'
23-
>>> smart_incremented_tag('v1.3.2', "preminor") == 'v1.4.0-0'
24-
>>> smart_incremented_tag('v1.3.2', "premajor") == 'v2.0.0-0'
25-
>>> smart_incremented_tag('v1.3.2', "patch") == 'v1.3.3'
26-
>>> smart_incremented_tag('v1.3.2', "minor") == 'v1.4.0'
27-
>>> smart_incremented_tag('v1.3.2', "major") == 'v2.0.0'
28-
>>> smart_incremented_tag('v1.3.2-1', "prerelease") == 'v1.3.2-2'
29-
>>> smart_incremented_tag('v1.3.2-1', "prepatch") == 'v1.3.3-0'
30-
>>> smart_incremented_tag('v1.3.2-1', "preminor") == 'v1.4.0-0'
31-
>>> smart_incremented_tag('v1.3.2-1', "premajor") == 'v2.0.0-0'
32-
>>> smart_incremented_tag('v1.3.2-1', "patch") == 'v1.3.2'
33-
>>> smart_incremented_tag('v1.3.2-1', "minor") == 'v1.4.0'
34-
>>> smart_incremented_tag('v1.3.2-1', "major") == 'v2.0.0'
35-
>>> smart_incremented_tag('v1.3.0-1', "patch") == 'v1.3.0'
36-
>>> smart_incremented_tag('v1.3.0-1', "minor") == 'v1.3.0'
37-
>>> smart_incremented_tag('v1.3.0-1', "major") == 'v2.0.0'
38-
>>> smart_incremented_tag('v1.0.0-1', "major") == 'v1.0.0'
39-
4020
"""
4121

4222
m = RELEASE_REGEXP.match(tag)
4323
if m:
44-
prefix, major, minor, patch, prerelease = m.groups()
24+
prefix, major, minor, patch, prefix2, prerelease = m.groups()
4525
prefix = "" if not prefix else prefix
26+
prefix2 = "" if not prefix2 else prefix2
4627

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

6546
if "pre" in release_type[0:3]:
6647
prerelease = str(int(prerelease) + 1) if prerelease else "0"
67-
return prefix + major + "." + minor + "." + patch + "-" + prerelease
48+
return prefix + major + "." + minor + "." + patch + "-" + prefix2 + prerelease
6849
else:
6950
return prefix + major + "." + minor + "." + patch
7051

tests/test_smart_tag.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from GitSavvy.core.commands.tag import smart_incremented_tag
2+
3+
import unittest
4+
5+
6+
class TestSmartTag(unittest.TestCase):
7+
def test_smart_tag(self):
8+
self.assertEquals(smart_incremented_tag('v1.3.2', "prerelease"), 'v1.3.3-0')
9+
self.assertEquals(smart_incremented_tag('v1.3.2', "prepatch"), 'v1.3.3-0')
10+
self.assertEquals(smart_incremented_tag('v1.3.2', "preminor"), 'v1.4.0-0')
11+
self.assertEquals(smart_incremented_tag('v1.3.2', "premajor"), 'v2.0.0-0')
12+
self.assertEquals(smart_incremented_tag('v1.3.2', "patch"), 'v1.3.3')
13+
self.assertEquals(smart_incremented_tag('v1.3.2', "minor"), 'v1.4.0')
14+
self.assertEquals(smart_incremented_tag('v1.3.2', "major"), 'v2.0.0')
15+
self.assertEquals(smart_incremented_tag('v1.3.2-1', "prerelease"), 'v1.3.2-2')
16+
self.assertEquals(smart_incremented_tag('v1.3.2-1', "prepatch"), 'v1.3.3-0')
17+
self.assertEquals(smart_incremented_tag('v1.3.2-1', "preminor"), 'v1.4.0-0')
18+
self.assertEquals(smart_incremented_tag('v1.3.2-1', "premajor"), 'v2.0.0-0')
19+
self.assertEquals(smart_incremented_tag('v1.3.2-1', "patch"), 'v1.3.2')
20+
self.assertEquals(smart_incremented_tag('v1.3.2-1', "minor"), 'v1.4.0')
21+
self.assertEquals(smart_incremented_tag('v1.3.2-1', "major"), 'v2.0.0')
22+
self.assertEquals(smart_incremented_tag('v1.3.0-1', "patch"), 'v1.3.0')
23+
self.assertEquals(smart_incremented_tag('v1.3.0-1', "minor"), 'v1.3.0')
24+
self.assertEquals(smart_incremented_tag('v1.3.0-1', "major"), 'v2.0.0')
25+
self.assertEquals(smart_incremented_tag('v1.0.0-1', "major"), 'v1.0.0')
26+
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "prerelease"), 'v1.3.2-rc.2')
27+
self.assertEquals(smart_incremented_tag('v1.3.2-rc.11', "prerelease"), 'v1.3.2-rc.12')
28+
self.assertEquals(smart_incremented_tag('v1.3.2-beta1', "prerelease"), 'v1.3.2-beta2')
29+
self.assertEquals(smart_incremented_tag('v1.3.2-beta9', "prerelease"), 'v1.3.2-beta10')
30+
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "prepatch"), 'v1.3.3-rc.0')
31+
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "preminor"), 'v1.4.0-rc.0')
32+
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "premajor"), 'v2.0.0-rc.0')
33+
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "patch"), 'v1.3.2')
34+
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "minor"), 'v1.4.0')
35+
self.assertEquals(smart_incremented_tag('v1.3.2-rc.1', "major"), 'v2.0.0')
36+
self.assertEquals(smart_incremented_tag('v1.3.0-rc.1', "patch"), 'v1.3.0')
37+
self.assertEquals(smart_incremented_tag('v1.3.0-rc.1', "minor"), 'v1.3.0')
38+
self.assertEquals(smart_incremented_tag('v1.3.0-rc.1', "major"), 'v2.0.0')
39+
self.assertEquals(smart_incremented_tag('v1.0.0-rc.1', "major"), 'v1.0.0')

0 commit comments

Comments
 (0)