Show More
@@ -249,3 +249,4 b' 271a4ab29605ffa0bae5d3208eaa21a95427ff92' | |||||
249 | bb42988c7e156931b0ff1e93732b98173ebbcb7f 0 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 |
@@ -265,3 +265,4 b' 271a4ab29605ffa0bae5d3208eaa21a95427ff92' | |||||
265 | bb42988c7e156931b0ff1e93732b98173ebbcb7f 6.5rc0 |
|
265 | bb42988c7e156931b0ff1e93732b98173ebbcb7f 6.5rc0 | |
266 | 3ffc7209bbae5804a53084c9dc2d41139e88c867 6.5 |
|
266 | 3ffc7209bbae5804a53084c9dc2d41139e88c867 6.5 | |
267 | 787af4e0e8b787e1b77a8059926b123730a4cd01 6.5.1 |
|
267 | 787af4e0e8b787e1b77a8059926b123730a4cd01 6.5.1 | |
|
268 | 5a8b5420103937fca97c584c5162178eed828ada 6.5.2 |
@@ -16,6 +16,7 b' import os' | |||||
16 |
|
16 | |||
17 | from .i18n import _ |
|
17 | from .i18n import _ | |
18 | from . import ( |
|
18 | from . import ( | |
|
19 | encoding, | |||
19 | error, |
|
20 | error, | |
20 | pycompat, |
|
21 | pycompat, | |
21 | util, |
|
22 | util, | |
@@ -229,7 +230,7 b' class transaction(util.transactional):' | |||||
229 | validator=None, |
|
230 | validator=None, | |
230 | releasefn=None, |
|
231 | releasefn=None, | |
231 | checkambigfiles=None, |
|
232 | checkambigfiles=None, | |
232 | name='<unnamed>', |
|
233 | name=b'<unnamed>', | |
233 | ): |
|
234 | ): | |
234 | """Begin a new transaction |
|
235 | """Begin a new transaction | |
235 |
|
236 | |||
@@ -318,7 +319,7 b' class transaction(util.transactional):' | |||||
318 | def __repr__(self): |
|
319 | def __repr__(self): | |
319 | name = b'/'.join(self._names) |
|
320 | name = b'/'.join(self._names) | |
320 | return '<transaction name=%s, count=%d, usages=%d>' % ( |
|
321 | return '<transaction name=%s, count=%d, usages=%d>' % ( | |
321 | name, |
|
322 | encoding.strfromlocal(name), | |
322 | self._count, |
|
323 | self._count, | |
323 | self._usages, |
|
324 | self._usages, | |
324 | ) |
|
325 | ) | |
@@ -574,7 +575,7 b' class transaction(util.transactional):' | |||||
574 | self._file.flush() |
|
575 | self._file.flush() | |
575 |
|
576 | |||
576 | @active |
|
577 | @active | |
577 | def nest(self, name='<unnamed>'): |
|
578 | def nest(self, name=b'<unnamed>'): | |
578 | self._count += 1 |
|
579 | self._count += 1 | |
579 | self._usages += 1 |
|
580 | self._usages += 1 | |
580 | self._names.append(name) |
|
581 | self._names.append(name) |
@@ -1,3 +1,13 b'' | |||||
|
1 | = Mercurial 6.5.2 = | |||
|
2 | ||||
|
3 | * hgweb: encode WSGI environment using the ISO-8859-1 codec | |||
|
4 | * rhg: fix the bug where sparse config is interpreted as relglob instead of glob | |||
|
5 | * gpg: fix an UnboundLocalError whenever using --force | |||
|
6 | * transaction: fix __repr__() and make the default name bytes | |||
|
7 | * setup: make the error "Unable to find a working hg binary" more informative | |||
|
8 | * tests: avoid test environment affecting setup.py | |||
|
9 | * run-tests: detect HGWITHRUSTEXT value | |||
|
10 | ||||
1 | = Mercurial 6.5.1 = |
|
11 | = Mercurial 6.5.1 = | |
2 |
|
12 | |||
3 | * A bunch of improvements to Python 3.12 compatibility |
|
13 | * A bunch of improvements to Python 3.12 compatibility |
@@ -278,28 +278,44 b' def findhg():' | |||||
278 | # gives precedence to hg.exe in the current directory, so fall back to the |
|
278 | # gives precedence to hg.exe in the current directory, so fall back to the | |
279 | # python invocation of local hg, where pythonXY.dll can always be found. |
|
279 | # python invocation of local hg, where pythonXY.dll can always be found. | |
280 | check_cmd = ['log', '-r.', '-Ttest'] |
|
280 | check_cmd = ['log', '-r.', '-Ttest'] | |
281 | if os.name != 'nt' or not os.path.exists("hg.exe"): |
|
281 | attempts = [] | |
|
282 | ||||
|
283 | def attempt(cmd, env): | |||
282 | try: |
|
284 | try: | |
283 | retcode, out, err = runcmd(hgcmd + check_cmd, hgenv) |
|
285 | retcode, out, err = runcmd(hgcmd + check_cmd, hgenv) | |
284 | except EnvironmentError: |
|
286 | res = (True, retcode, out, err) | |
285 | retcode = -1 |
|
|||
286 | if retcode == 0 and not filterhgerr(err): |
|
287 | if retcode == 0 and not filterhgerr(err): | |
|
288 | return True | |||
|
289 | except EnvironmentError as e: | |||
|
290 | res = (False, e) | |||
|
291 | attempts.append((cmd, res)) | |||
|
292 | return False | |||
|
293 | ||||
|
294 | if os.name != 'nt' or not os.path.exists("hg.exe"): | |||
|
295 | if attempt(hgcmd + check_cmd, hgenv): | |||
287 | return hgcommand(hgcmd, hgenv) |
|
296 | return hgcommand(hgcmd, hgenv) | |
288 |
|
297 | |||
289 | # Fall back to trying the local hg installation. |
|
298 | # Fall back to trying the local hg installation. | |
290 | hgenv = localhgenv() |
|
299 | hgenv = localhgenv() | |
291 | hgcmd = [sys.executable, 'hg'] |
|
300 | hgcmd = [sys.executable, 'hg'] | |
292 | try: |
|
301 | if attempt(hgcmd + check_cmd, hgenv): | |
293 | retcode, out, err = runcmd(hgcmd + check_cmd, hgenv) |
|
|||
294 | except EnvironmentError: |
|
|||
295 | retcode = -1 |
|
|||
296 | if retcode == 0 and not filterhgerr(err): |
|
|||
297 | return hgcommand(hgcmd, hgenv) |
|
302 | return hgcommand(hgcmd, hgenv) | |
298 |
|
303 | |||
299 | eprint("/!\\") |
|
304 | eprint("/!\\") | |
300 | eprint(r"/!\ Unable to find a working hg binary") |
|
305 | eprint(r"/!\ Unable to find a working hg binary") | |
301 | eprint(r"/!\ Version cannot be extract from the repository") |
|
306 | eprint(r"/!\ Version cannot be extracted from the repository") | |
302 | eprint(r"/!\ Re-run the setup once a first version is built") |
|
307 | eprint(r"/!\ Re-run the setup once a first version is built") | |
|
308 | eprint(r"/!\ Attempts:") | |||
|
309 | for i, e in enumerate(attempts): | |||
|
310 | eprint(r"/!\ attempt #%d:" % (i)) | |||
|
311 | eprint(r"/!\ cmd: ", e[0]) | |||
|
312 | res = e[1] | |||
|
313 | if res[0]: | |||
|
314 | eprint(r"/!\ return code:", res[1]) | |||
|
315 | eprint("/!\\ std output:\n%s" % (res[2].decode()), end="") | |||
|
316 | eprint("/!\\ std error:\n%s" % (res[3].decode()), end="") | |||
|
317 | else: | |||
|
318 | eprint(r"/!\ exception: ", res[1]) | |||
303 | return None |
|
319 | return None | |
304 |
|
320 | |||
305 |
|
321 |
@@ -165,6 +165,7 b' def _bytes2sys(p):' | |||||
165 | return p.decode('utf-8') |
|
165 | return p.decode('utf-8') | |
166 |
|
166 | |||
167 |
|
167 | |||
|
168 | original_env = os.environ.copy() | |||
168 | osenvironb = getattr(os, 'environb', None) |
|
169 | osenvironb = getattr(os, 'environb', None) | |
169 | if osenvironb is None: |
|
170 | if osenvironb is None: | |
170 | # Windows lacks os.environb, for instance. A proxy over the real thing |
|
171 | # Windows lacks os.environb, for instance. A proxy over the real thing | |
@@ -3770,7 +3771,7 b' class TestRunner:' | |||||
3770 | makedirs(self._bindir) |
|
3771 | makedirs(self._bindir) | |
3771 |
|
3772 | |||
3772 | vlog("# Running", cmd.decode("utf-8")) |
|
3773 | vlog("# Running", cmd.decode("utf-8")) | |
3773 | if subprocess.call(_bytes2sys(cmd), shell=True) == 0: |
|
3774 | if subprocess.call(_bytes2sys(cmd), shell=True, env=original_env) == 0: | |
3774 | if not self.options.verbose: |
|
3775 | if not self.options.verbose: | |
3775 | try: |
|
3776 | try: | |
3776 | os.remove(installerrs) |
|
3777 | os.remove(installerrs) |
General Comments 0
You need to be logged in to leave comments.
Login now