diff options
author | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2014-04-05 17:14:55 +0200 |
---|---|---|
committer | Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> | 2014-04-05 17:14:55 +0200 |
commit | 699c6c560696f3ca6405ac48622f92dc604817bd (patch) | |
tree | 74a4e0fc3483cbc4ab412a98d673713d844c411d /hgdistver.py | |
parent | 7309cc8a5d922086663c86cef8b743c7521e5fd6 (diff) | |
download | setuptools-scm-0.17.tar.gz |
finish guessing the next versionv0.17
Diffstat (limited to 'hgdistver.py')
-rw-r--r-- | hgdistver.py | 44 |
1 files changed, 35 insertions, 9 deletions
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']) |