diff -r 58edd448da4f -r f51d1822d6fd setup.py --- a/setup.py Tue Aug 11 09:04:02 2009 +0200 +++ b/setup.py Sun Oct 18 14:35:36 2009 +0200 @@ -97,7 +97,21 @@ except ImportError: pass -version = None +def runcmd(cmd): + p = subprocess.Popen(cmd, stdout=subprocess.PIPE, + stderr=subprocess.PIPE, env=env) + out, err = p.communicate() + # If root is executing setup.py, but the repository is owned by + # another user (as in "sudo python setup.py install") we will get + # trust warnings since the .hg/hgrc file is untrusted. That is + # fine, we don't want to load it anyway. + err = [e for e in err.splitlines() + if not e.startswith('Not trusting file')] + if err: + return '' + return out + +version = '' if os.path.isdir('.hg'): # Execute hg out of this directory with a custom environment which @@ -113,34 +127,28 @@ # error 0xc0150004. See: http://bugs.python.org/issue3440 env['SystemRoot'] = os.environ['SystemRoot'] cmd = [sys.executable, 'hg', 'id', '-i', '-t'] - - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, - stderr=subprocess.PIPE, env=env) - out, err = p.communicate() - - # If root is executing setup.py, but the repository is owned by - # another user (as in "sudo python setup.py install") we will get - # trust warnings since the .hg/hgrc file is untrusted. That is - # fine, we don't want to load it anyway. - err = [e for e in err.splitlines() - if not e.startswith('Not trusting file')] - if err: - sys.stderr.write('warning: could not establish Mercurial ' - 'version:\n%s\n' % '\n'.join(err)) + l = runcmd(cmd).split() + while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags + l.pop() + if len(l) > 1: # tag found + version = l[-1] + if l[0].endswith('+'): # propagate the dirty status to the tag + version += '+' + elif len(l) == 1: # no tag found + cmd = [sys.executable, 'hg', 'parents', '--template', + '{latesttag}+{latesttagdistance}-'] + version = runcmd(cmd) + l[0] + if version.endswith('+'): + version += time.strftime('%Y%m%d') +elif os.path.exists('.hg_archival.txt'): + kw = dict([t.strip() for t in l.split(':', 1)] + for l in open('.hg_archival.txt')) + if 'tag' in kw: + version = kw['tag'] + elif 'latesttag' in kw: + version = '%(latesttag)s+%(latesttagdistance)s-%(node).12s' % kw else: - l = out.split() - while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags - l.pop() - if l: - version = l[-1] # latest tag or revision number - if version.endswith('+'): - version += time.strftime('%Y%m%d') -elif os.path.exists('.hg_archival.txt'): - hgarchival = open('.hg_archival.txt') - for line in hgarchival: - if line.startswith('node:'): - version = line.split(':')[1].strip()[:12] - break + version = kw.get('node', '')[:12] if version: f = open("mercurial/__version__.py", "w")