##// END OF EJS Templates
setup: refactor the version string to a subset of tag+tagdist-hash+date...
Gilles Moris -
r9615:f51d1822 default
parent child Browse files
Show More
@@ -97,7 +97,21 b' try:'
97 except ImportError:
97 except ImportError:
98 pass
98 pass
99
99
100 version = None
100 def runcmd(cmd):
101 p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
102 stderr=subprocess.PIPE, env=env)
103 out, err = p.communicate()
104 # If root is executing setup.py, but the repository is owned by
105 # another user (as in "sudo python setup.py install") we will get
106 # trust warnings since the .hg/hgrc file is untrusted. That is
107 # fine, we don't want to load it anyway.
108 err = [e for e in err.splitlines()
109 if not e.startswith('Not trusting file')]
110 if err:
111 return ''
112 return out
113
114 version = ''
101
115
102 if os.path.isdir('.hg'):
116 if os.path.isdir('.hg'):
103 # Execute hg out of this directory with a custom environment which
117 # Execute hg out of this directory with a custom environment which
@@ -113,34 +127,28 b" if os.path.isdir('.hg'):"
113 # error 0xc0150004. See: http://bugs.python.org/issue3440
127 # error 0xc0150004. See: http://bugs.python.org/issue3440
114 env['SystemRoot'] = os.environ['SystemRoot']
128 env['SystemRoot'] = os.environ['SystemRoot']
115 cmd = [sys.executable, 'hg', 'id', '-i', '-t']
129 cmd = [sys.executable, 'hg', 'id', '-i', '-t']
116
130 l = runcmd(cmd).split()
117 p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
131 while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags
118 stderr=subprocess.PIPE, env=env)
132 l.pop()
119 out, err = p.communicate()
133 if len(l) > 1: # tag found
120
134 version = l[-1]
121 # If root is executing setup.py, but the repository is owned by
135 if l[0].endswith('+'): # propagate the dirty status to the tag
122 # another user (as in "sudo python setup.py install") we will get
136 version += '+'
123 # trust warnings since the .hg/hgrc file is untrusted. That is
137 elif len(l) == 1: # no tag found
124 # fine, we don't want to load it anyway.
138 cmd = [sys.executable, 'hg', 'parents', '--template',
125 err = [e for e in err.splitlines()
139 '{latesttag}+{latesttagdistance}-']
126 if not e.startswith('Not trusting file')]
140 version = runcmd(cmd) + l[0]
127 if err:
141 if version.endswith('+'):
128 sys.stderr.write('warning: could not establish Mercurial '
142 version += time.strftime('%Y%m%d')
129 'version:\n%s\n' % '\n'.join(err))
143 elif os.path.exists('.hg_archival.txt'):
144 kw = dict([t.strip() for t in l.split(':', 1)]
145 for l in open('.hg_archival.txt'))
146 if 'tag' in kw:
147 version = kw['tag']
148 elif 'latesttag' in kw:
149 version = '%(latesttag)s+%(latesttagdistance)s-%(node).12s' % kw
130 else:
150 else:
131 l = out.split()
151 version = kw.get('node', '')[:12]
132 while len(l) > 1 and l[-1][0].isalpha(): # remove non-numbered tags
133 l.pop()
134 if l:
135 version = l[-1] # latest tag or revision number
136 if version.endswith('+'):
137 version += time.strftime('%Y%m%d')
138 elif os.path.exists('.hg_archival.txt'):
139 hgarchival = open('.hg_archival.txt')
140 for line in hgarchival:
141 if line.startswith('node:'):
142 version = line.split(':')[1].strip()[:12]
143 break
144
152
145 if version:
153 if version:
146 f = open("mercurial/__version__.py", "w")
154 f = open("mercurial/__version__.py", "w")
General Comments 0
You need to be logged in to leave comments. Login now