summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2014-04-05 17:14:55 +0200
committerRonny Pfannschmidt <opensource@ronnypfannschmidt.de>2014-04-05 17:14:55 +0200
commit699c6c560696f3ca6405ac48622f92dc604817bd (patch)
tree74a4e0fc3483cbc4ab412a98d673713d844c411d
parent7309cc8a5d922086663c86cef8b743c7521e5fd6 (diff)
downloadsetuptools-scm-0.17.tar.gz
finish guessing the next versionv0.17
-rw-r--r--.hgignore1
-rw-r--r--hgdistver.py44
-rw-r--r--test_hgdistver.py21
3 files changed, 48 insertions, 18 deletions
diff --git a/.hgignore b/.hgignore
index 40af9e4..9a2a23e 100644
--- a/.hgignore
+++ b/.hgignore
@@ -4,3 +4,4 @@ hgdistver.egg-info
dist
build
\.tox
+\.cache
diff --git a/hgdistver.py b/hgdistver.py
index 0deef9f..fbd146f 100644
--- a/hgdistver.py
+++ b/hgdistver.py
@@ -73,15 +73,21 @@ version_re = r"""^
(?P<prerelversion>\d+(?:\.\d+)*)
)?)
# we dont mach those, its our job to generate them
-##(?P<postdev>(\.post(?P<post>\d+))?(\.dev(?P<dev>\d+))?)?
+# we match those and dev should have nothing that follows
+##
+(?P<postdev>
+ (\.post(?P<post>\d+))?
+ (\.dev(?P<dev>\d+)?)?
+)?
$"""
def tag_to_version(tag):
+ trace(tag)
match = re.match(version_re, tag, re.VERBOSE)
if match is not None:
return ''.join(match.group(
- 'version', 'extraversion', 'prerelfullversion',
+ 'version', 'extraversion', 'prerelfullversion', 'postdev'
))
@@ -90,11 +96,15 @@ def tags_to_versions(tags):
return list(filter(None, versions))
-def _version(tag, distance=0, node=None, dirty=False):
- tag = tag_to_version(tag)
+def _version(tag, distance=None, node=None, dirty=False):
+ version = tag_to_version(tag)
+ trace('version', version)
+ assert version is not None, 'cant parse version %s' % tag
+ if (version.endswith('.dev') and distance is None) or dirty:
+ distance = 0
time = datetime.date.today().strftime('%Y%m%d')
return dict(
- tag=tag,
+ tag=version,
distance=distance,
node=node,
dirty=dirty,
@@ -186,6 +196,7 @@ def version_from_git(root, cachefile=None):
def _archival_to_version(data):
"""stolen logic from mercurials setup.py"""
+ trace('data', data)
if 'tag' in data:
return _version(data['tag'])
elif 'latesttag' in data:
@@ -245,17 +256,32 @@ methods = [
]
+def guess_next_tag(tag):
+ prefix, tail = tag.rsplit('.', 1)
+ if tail.isdigit():
+ return '%s.%s.dev' % (prefix, int(tail) + 1)
+ else:
+ assert tail == 'dev', 'broken version data'
+ return tag
+
+
def format_version(version):
if not isinstance(version, dict):
trace('string')
return version
+ version['next_tag'] = guess_next_tag(version['tag'])
+ if version['node'] is not None:
+ version['xnode'] = '-' + version['node']
+ else:
+ version['xnode'] = ''
+
if version['dirty']:
import time
- version['time'] = time.strftime('%Y%m%d')
- return "%(tag)s.post%(distance)s-%(node)s+%(time)s" % version
- elif version['distance']:
- return "%(tag)s.post%(distance)s-%(node)s" % version
+ version['time'] = time.strftime('+%Y%m%d')
+ return "%(next_tag)s%(distance)s%(xnode)s%(time)s" % version
+ elif version['distance'] is not None:
+ return "%(next_tag)s%(distance)s%(xnode)s" % version
else:
return str(version['tag'])
diff --git a/test_hgdistver.py b/test_hgdistver.py
index 23a3612..46f3519 100644
--- a/test_hgdistver.py
+++ b/test_hgdistver.py
@@ -65,7 +65,7 @@ def test_data_from_mime(wd):
archival_mapping = {
'1.0': {'tag': '1.0'},
- '1.0.post3-000000000000': {
+ '1.1.dev3-000000000000': {
'latesttag': '1.0',
'latesttagdistance': '3',
'node': '0'*20,
@@ -74,7 +74,7 @@ archival_mapping = {
'node': '0'*20,
},
'1.2.2': {'tag': 'release-1.2.2'},
- '1.2.2a1': {'tag': 'release-1.2.2a1'},
+ '1.2.2.dev0': {'tag': 'release-1.2.2.dev'},
}
@@ -101,17 +101,17 @@ def test_version_from_git(wd):
wd('git add test.txt')
wd('git commit -m commit')
- assert wd.version.startswith('0.0.post1-')
+ assert wd.version.startswith('0.1.dev1-')
assert not wd.version.endswith('1-')
wd('git tag v0.1')
assert wd.version == '0.1'
wd.write('test.txt', 'test2')
- assert wd.version.startswith('0.1.post0-')
+ assert wd.version.startswith('0.2.dev0-')
wd('git add test.txt')
wd('git commit -m commit')
- assert wd.version.startswith('0.1.post1-')
+ assert wd.version.startswith('0.2.dev1-')
# XXX: better tests for tag prefixes
@@ -122,22 +122,25 @@ def test_version_from_hg_id(wd):
wd('hg add test.txt')
wd('hg commit -m commit -u test -d "0 0"')
- assert wd.version.startswith('0.0.post1-')
+ assert wd.version.startswith('0.1.dev1-')
+ # tagging commit is considered the tag
wd('hg tag v0.1 -u test -d "0 0"')
assert wd.version == '0.1'
wd.write('test.txt', 'test2')
wd('hg commit -m commit2 -u test -d "0 0"')
- assert wd.version.startswith('0.1.post2')
+ assert wd.version.startswith('0.2.dev2')
wd('hg up v0.1')
assert wd.version == '0.1'
+ # commit originating from the taged revision
+ # that is not a actual tag
wd.write('test.txt', 'test2')
wd('hg commit -m commit3 -u test -d "0 0"')
- assert wd.version.startswith('0.1.post1-')
+ assert wd.version.startswith('0.2.dev1-')
def test_version_from_archival(tmpdir):
@@ -155,7 +158,7 @@ def test_version_from_archival(tmpdir):
'latesttagdistance: 3\n'
)
- assert get_version(tmpdir) == '0.1.post3-000000000000'
+ assert get_version(tmpdir) == '0.2.dev3-000000000000'
def test_version_from_cachefile(tmpdir):