diff options
-rw-r--r-- | .hgignore | 1 | ||||
-rw-r--r-- | hgdistver.py | 44 | ||||
-rw-r--r-- | test_hgdistver.py | 21 |
3 files changed, 48 insertions, 18 deletions
@@ -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): |