Mercurial > hg
comparison setup.py @ 9763:e06c940d554d
Merge with main
author | Martin Geisler <mg@lazybytes.net> |
---|---|
date | Sat, 24 Oct 2009 00:47:49 +0200 |
parents | f51d1822d6fd |
children | f359d4f528aa |
comparison
equal
deleted
inserted
replaced
9762:a33c710a463e | 9763:e06c940d554d |
---|---|
95 extra['console'] = ['hg'] | 95 extra['console'] = ['hg'] |
96 | 96 |
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 |
104 # includes the pure Python modules in mercurial/pure. We also take | 118 # includes the pure Python modules in mercurial/pure. We also take |
105 # care to not use any hgrc files and do no localization. | 119 # care to not use any hgrc files and do no localization. |
111 # Copy SystemRoot into the custom environment for Python 2.6 | 125 # Copy SystemRoot into the custom environment for Python 2.6 |
112 # under Windows. Otherwise, the subprocess will fail with | 126 # under Windows. Otherwise, the subprocess will fail with |
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") |
147 f.write('# this file is autogenerated by setup.py\n') | 155 f.write('# this file is autogenerated by setup.py\n') |
148 f.write('version = "%s"\n' % version) | 156 f.write('version = "%s"\n' % version) |