Show More
@@ -34,6 +34,7 b' checks:' | |||||
34 | variables: |
|
34 | variables: | |
35 | RUNTEST_ARGS: "--time --test-list /tmp/check-tests.txt" |
|
35 | RUNTEST_ARGS: "--time --test-list /tmp/check-tests.txt" | |
36 | PYTHON: python3 |
|
36 | PYTHON: python3 | |
|
37 | CI_CLEVER_CLOUD_FLAVOR: S | |||
37 |
|
38 | |||
38 | rust-cargo-test: |
|
39 | rust-cargo-test: | |
39 | <<: *all |
|
40 | <<: *all | |
@@ -44,6 +45,7 b' rust-cargo-test:' | |||||
44 | - make cargo-clippy |
|
45 | - make cargo-clippy | |
45 | variables: |
|
46 | variables: | |
46 | PYTHON: python3 |
|
47 | PYTHON: python3 | |
|
48 | CI_CLEVER_CLOUD_FLAVOR: S | |||
47 |
|
49 | |||
48 | test-c: |
|
50 | test-c: | |
49 | <<: *runtests |
|
51 | <<: *runtests |
@@ -44,6 +44,12 b' try:' | |||||
44 | revision = breezy.revision |
|
44 | revision = breezy.revision | |
45 | revisionspec = breezy.revisionspec |
|
45 | revisionspec = breezy.revisionspec | |
46 | revisionspec.RevisionSpec |
|
46 | revisionspec.RevisionSpec | |
|
47 | ||||
|
48 | try: | |||
|
49 | # brz 3.3.0 (revno: 7614.2.2) | |||
|
50 | from breezy.transport import NoSuchFile | |||
|
51 | except ImportError: | |||
|
52 | from breezy.errors import NoSuchFile | |||
47 | except ImportError: |
|
53 | except ImportError: | |
48 | pass |
|
54 | pass | |
49 |
|
55 | |||
@@ -153,7 +159,7 b' class bzr_source(common.converter_source' | |||||
153 |
|
159 | |||
154 | try: |
|
160 | try: | |
155 | kind = revtree.kind(name) |
|
161 | kind = revtree.kind(name) | |
156 |
except |
|
162 | except NoSuchFile: | |
157 | return None, None |
|
163 | return None, None | |
158 | if kind not in supportedkinds: |
|
164 | if kind not in supportedkinds: | |
159 | # the file is not available anymore - was deleted |
|
165 | # the file is not available anymore - was deleted |
@@ -142,7 +142,9 b' class convert_cvs(converter_source):' | |||||
142 |
|
142 | |||
143 | if root.startswith(b":pserver:"): |
|
143 | if root.startswith(b":pserver:"): | |
144 | root = root[9:] |
|
144 | root = root[9:] | |
145 | m = re.match(r'(?:(.*?)(?::(.*?))?@)?([^:/]*)(?::(\d*))?(.*)', root) |
|
145 | m = re.match( | |
|
146 | br'(?:(.*?)(?::(.*?))?@)?([^:/]*)(?::(\d*))?(.*)', root | |||
|
147 | ) | |||
146 | if m: |
|
148 | if m: | |
147 | conntype = b"pserver" |
|
149 | conntype = b"pserver" | |
148 | user, passw, serv, port, root = m.groups() |
|
150 | user, passw, serv, port, root = m.groups() | |
@@ -197,7 +199,7 b' class convert_cvs(converter_source):' | |||||
197 | if sck.recv(128) != b"I LOVE YOU\n": |
|
199 | if sck.recv(128) != b"I LOVE YOU\n": | |
198 | raise error.Abort(_(b"CVS pserver authentication failed")) |
|
200 | raise error.Abort(_(b"CVS pserver authentication failed")) | |
199 |
|
201 | |||
200 |
self.writep = self.readp = sck.makefile( |
|
202 | self.writep = self.readp = sck.makefile('rwb') | |
201 |
|
203 | |||
202 | if not conntype and root.startswith(b":local:"): |
|
204 | if not conntype and root.startswith(b":local:"): | |
203 | conntype = b"local" |
|
205 | conntype = b"local" |
@@ -686,7 +686,10 b' def createchangeset(ui, log, fuzz=60, me' | |||||
686 |
|
686 | |||
687 | files = set() |
|
687 | files = set() | |
688 | if len(changesets) % 100 == 0: |
|
688 | if len(changesets) % 100 == 0: | |
689 |
t = b'%d %s' % ( |
|
689 | t = b'%d %s' % ( | |
|
690 | len(changesets), | |||
|
691 | pycompat.byterepr(e.comment)[2:-1], | |||
|
692 | ) | |||
690 | ui.status(stringutil.ellipsis(t, 80) + b'\n') |
|
693 | ui.status(stringutil.ellipsis(t, 80) + b'\n') | |
691 |
|
694 | |||
692 | c.entries.append(e) |
|
695 | c.entries.append(e) |
@@ -533,6 +533,8 b' def makebundlerepository(ui, repopath, b' | |||||
533 | try: |
|
533 | try: | |
534 | repo = localrepo.instance(ui, repopath, create=False) |
|
534 | repo = localrepo.instance(ui, repopath, create=False) | |
535 | tempparent = None |
|
535 | tempparent = None | |
|
536 | except error.RequirementError: | |||
|
537 | raise # no fallback if the backing repo is unsupported | |||
536 | except error.RepoError: |
|
538 | except error.RepoError: | |
537 | tempparent = pycompat.mkdtemp() |
|
539 | tempparent = pycompat.mkdtemp() | |
538 | try: |
|
540 | try: |
@@ -10,7 +10,6 b' import binascii' | |||||
10 | import functools |
|
10 | import functools | |
11 | import random |
|
11 | import random | |
12 | import re |
|
12 | import re | |
13 | import sys |
|
|||
14 |
|
13 | |||
15 | from .i18n import _ |
|
14 | from .i18n import _ | |
16 | from .pycompat import getattr |
|
15 | from .pycompat import getattr | |
@@ -2352,7 +2351,7 b' def roots(repo, subset, x):' | |||||
2352 | return subset & s.filter(filter, condrepr=b'<roots>') |
|
2351 | return subset & s.filter(filter, condrepr=b'<roots>') | |
2353 |
|
2352 | |||
2354 |
|
2353 | |||
2355 | MAXINT = sys.maxsize |
|
2354 | MAXINT = (1 << 31) - 1 | |
2356 | MININT = -MAXINT - 1 |
|
2355 | MININT = -MAXINT - 1 | |
2357 |
|
2356 | |||
2358 |
|
2357 |
@@ -278,6 +278,11 b' def checknewlabel(repo, lbl, kind):' | |||||
278 | ) |
|
278 | ) | |
279 | try: |
|
279 | try: | |
280 | int(lbl) |
|
280 | int(lbl) | |
|
281 | if b'_' in lbl: | |||
|
282 | # If label contains underscores, Python might consider it an | |||
|
283 | # integer (with "_" as visual separators), but we do not. | |||
|
284 | # See PEP 515 - Underscores in Numeric Literals. | |||
|
285 | raise ValueError | |||
281 | raise error.InputError(_(b"cannot use an integer as a name")) |
|
286 | raise error.InputError(_(b"cannot use an integer as a name")) | |
282 | except ValueError: |
|
287 | except ValueError: | |
283 | pass |
|
288 | pass |
@@ -59,7 +59,10 b' try:' | |||||
59 | from importlib import resources # pytype: disable=import-error |
|
59 | from importlib import resources # pytype: disable=import-error | |
60 |
|
60 | |||
61 | # Force loading of the resources module |
|
61 | # Force loading of the resources module | |
62 | resources.open_binary # pytype: disable=module-attr |
|
62 | if pycompat.safehasattr(resources, 'files'): | |
|
63 | resources.files # pytype: disable=module-attr | |||
|
64 | else: | |||
|
65 | resources.open_binary # pytype: disable=module-attr | |||
63 |
|
66 | |||
64 | # py2exe raises an AssertionError if uses importlib.resources |
|
67 | # py2exe raises an AssertionError if uses importlib.resources | |
65 | if getattr(sys, "frozen", None) in ("console_exe", "windows_exe"): |
|
68 | if getattr(sys, "frozen", None) in ("console_exe", "windows_exe"): | |
@@ -92,9 +95,18 b' else:' | |||||
92 | from .. import encoding |
|
95 | from .. import encoding | |
93 |
|
96 | |||
94 | def open_resource(package, name): |
|
97 | def open_resource(package, name): | |
95 | return resources.open_binary( # pytype: disable=module-attr |
|
98 | if pycompat.safehasattr(resources, 'files'): | |
96 | pycompat.sysstr(package), pycompat.sysstr(name) |
|
99 | return ( | |
97 | ) |
|
100 | resources.files( # pytype: disable=module-attr | |
|
101 | pycompat.sysstr(package) | |||
|
102 | ) | |||
|
103 | .joinpath(pycompat.sysstr(name)) | |||
|
104 | .open('rb') | |||
|
105 | ) | |||
|
106 | else: | |||
|
107 | return resources.open_binary( # pytype: disable=module-attr | |||
|
108 | pycompat.sysstr(package), pycompat.sysstr(name) | |||
|
109 | ) | |||
98 |
|
110 | |||
99 | def is_resource(package, name): |
|
111 | def is_resource(package, name): | |
100 | return resources.is_resource( # pytype: disable=module-attr |
|
112 | return resources.is_resource( # pytype: disable=module-attr |
@@ -217,9 +217,10 b' class hgcommand:' | |||||
217 | cmd = self.cmd + args |
|
217 | cmd = self.cmd + args | |
218 | returncode, out, err = runcmd(cmd, self.env) |
|
218 | returncode, out, err = runcmd(cmd, self.env) | |
219 | err = filterhgerr(err) |
|
219 | err = filterhgerr(err) | |
220 |
if err |
|
220 | if err: | |
221 | print("stderr from '%s':" % (' '.join(cmd)), file=sys.stderr) |
|
221 | print("stderr from '%s':" % (' '.join(cmd)), file=sys.stderr) | |
222 | print(err, file=sys.stderr) |
|
222 | print(err, file=sys.stderr) | |
|
223 | if returncode != 0: | |||
223 | return b'' |
|
224 | return b'' | |
224 | return out |
|
225 | return out | |
225 |
|
226 | |||
@@ -333,8 +334,12 b" if os.path.isdir('.hg'):" | |||||
333 | else: # no tag found |
|
334 | else: # no tag found | |
334 | ltagcmd = ['parents', '--template', '{latesttag}'] |
|
335 | ltagcmd = ['parents', '--template', '{latesttag}'] | |
335 | ltag = sysstr(hg.run(ltagcmd)) |
|
336 | ltag = sysstr(hg.run(ltagcmd)) | |
|
337 | if not ltag: | |||
|
338 | ltag = 'null' | |||
336 | changessincecmd = ['log', '-T', 'x\n', '-r', "only(.,'%s')" % ltag] |
|
339 | changessincecmd = ['log', '-T', 'x\n', '-r', "only(.,'%s')" % ltag] | |
337 | changessince = len(hg.run(changessincecmd).splitlines()) |
|
340 | changessince = len(hg.run(changessincecmd).splitlines()) | |
|
341 | if ltag == 'null': | |||
|
342 | ltag = '0.0' | |||
338 | version = '%s+hg%s.%s' % (ltag, changessince, hgid) |
|
343 | version = '%s+hg%s.%s' % (ltag, changessince, hgid) | |
339 | if version.endswith('+'): |
|
344 | if version.endswith('+'): | |
340 | version = version[:-1] + 'local' + time.strftime('%Y%m%d') |
|
345 | version = version[:-1] + 'local' + time.strftime('%Y%m%d') |
@@ -31,6 +31,11 b' for line in sys.stdin:' | |||||
31 | elif not line.startswith(' '): |
|
31 | elif not line.startswith(' '): | |
32 | state = 'none' |
|
32 | state = 'none' | |
33 |
|
33 | |||
|
34 | elif not line.replace('^', '').replace('~', '').strip(): | |||
|
35 | # PEP 657: Fine-grained error locations in tracebacks | |||
|
36 | # ~~~~~~^^^^^^^^^ | |||
|
37 | continue | |||
|
38 | ||||
34 | elif state == 'file': |
|
39 | elif state == 'file': | |
35 | # Ignore lines after " File " |
|
40 | # Ignore lines after " File " | |
36 | state = 'tb' |
|
41 | state = 'tb' |
@@ -206,7 +206,7 b' def has_pyoxidizer():' | |||||
206 | "pyoxidizer-in-memory", |
|
206 | "pyoxidizer-in-memory", | |
207 | "running with pyoxidizer build as 'hg' with embedded resources", |
|
207 | "running with pyoxidizer build as 'hg' with embedded resources", | |
208 | ) |
|
208 | ) | |
209 | def has_pyoxidizer(): |
|
209 | def has_pyoxidizer_mem(): | |
210 | return 'PYOXIDIZED_IN_MEMORY_RSRC' in os.environ |
|
210 | return 'PYOXIDIZED_IN_MEMORY_RSRC' in os.environ | |
211 |
|
211 | |||
212 |
|
212 | |||
@@ -214,7 +214,7 b' def has_pyoxidizer():' | |||||
214 | "pyoxidizer-in-filesystem", |
|
214 | "pyoxidizer-in-filesystem", | |
215 | "running with pyoxidizer build as 'hg' with external resources", |
|
215 | "running with pyoxidizer build as 'hg' with external resources", | |
216 | ) |
|
216 | ) | |
217 | def has_pyoxidizer(): |
|
217 | def has_pyoxidizer_fs(): | |
218 | return 'PYOXIDIZED_FILESYSTEM_RSRC' in os.environ |
|
218 | return 'PYOXIDIZED_FILESYSTEM_RSRC' in os.environ | |
219 |
|
219 | |||
220 |
|
220 | |||
@@ -661,36 +661,22 b' def has_pygments():' | |||||
661 | return False |
|
661 | return False | |
662 |
|
662 | |||
663 |
|
663 | |||
664 | @check("pygments25", "Pygments version >= 2.5") |
|
664 | def getpygmentsversion(): | |
665 | def pygments25(): |
|
|||
666 | try: |
|
665 | try: | |
667 | import pygments |
|
666 | import pygments | |
668 |
|
667 | |||
669 | v = pygments.__version__ |
|
668 | v = pygments.__version__ | |
|
669 | ||||
|
670 | parts = v.split(".") | |||
|
671 | return (int(parts[0]), int(parts[1])) | |||
670 | except ImportError: |
|
672 | except ImportError: | |
671 |
return |
|
673 | return (0, 0) | |
672 |
|
||||
673 | parts = v.split(".") |
|
|||
674 | major = int(parts[0]) |
|
|||
675 | minor = int(parts[1]) |
|
|||
676 |
|
||||
677 | return (major, minor) >= (2, 5) |
|
|||
678 |
|
674 | |||
679 |
|
675 | |||
680 |
@check("pygments |
|
676 | @checkvers("pygments", "Pygments version >= %s", (2.5, 2.11, 2.14)) | |
681 |
def pygments |
|
677 | def has_pygments_range(v): | |
682 | try: |
|
678 | major, minor = v.split('.')[0:2] | |
683 | import pygments |
|
679 | return getpygmentsversion() >= (int(major), int(minor)) | |
684 |
|
||||
685 | v = pygments.__version__ |
|
|||
686 | except ImportError: |
|
|||
687 | return False |
|
|||
688 |
|
||||
689 | parts = v.split(".") |
|
|||
690 | major = int(parts[0]) |
|
|||
691 | minor = int(parts[1]) |
|
|||
692 |
|
||||
693 | return (major, minor) >= (2, 11) |
|
|||
694 |
|
680 | |||
695 |
|
681 | |||
696 | @check("outer-repo", "outer repo") |
|
682 | @check("outer-repo", "outer repo") |
@@ -82,6 +82,11 b' trailing or leading spaces should be str' | |||||
82 | (use 'hg update' to switch to it) |
|
82 | (use 'hg update' to switch to it) | |
83 | [10] |
|
83 | [10] | |
84 |
|
84 | |||
|
85 | underscores in numeric branch names (issue6737) | |||
|
86 | ||||
|
87 | $ hg branch 2700_210 | |||
|
88 | marked working directory as branch 2700_210 | |||
|
89 | ||||
85 | verify update will accept invalid legacy branch names |
|
90 | verify update will accept invalid legacy branch names | |
86 |
|
91 | |||
87 | $ hg init test-invalid-branch-name |
|
92 | $ hg init test-invalid-branch-name |
@@ -14,7 +14,8 b' In tests, enforce $PYTHON and *not* /usr' | |||||
14 | > -X tests/test-check-format.t \ |
|
14 | > -X tests/test-check-format.t \ | |
15 | > -X tests/test-check-module-imports.t \ |
|
15 | > -X tests/test-check-module-imports.t \ | |
16 | > -X tests/test-check-pyflakes.t \ |
|
16 | > -X tests/test-check-pyflakes.t \ | |
17 | > -X tests/test-check-shbang.t |
|
17 | > -X tests/test-check-shbang.t \ | |
|
18 | > -X tests/test-highlight.t | |||
18 | [1] |
|
19 | [1] | |
19 |
|
20 | |||
20 | The above exclusions are because they're looking for files that |
|
21 | The above exclusions are because they're looking for files that |
@@ -8,6 +8,7 b' import sys' | |||||
8 | import types |
|
8 | import types | |
9 |
|
9 | |||
10 | # Don't import pycompat because it has too many side-effects. |
|
10 | # Don't import pycompat because it has too many side-effects. | |
|
11 | ispy311 = (sys.version_info.major, sys.version_info.minor) >= (3, 11) | |||
11 |
|
12 | |||
12 | # Only run if demandimport is allowed |
|
13 | # Only run if demandimport is allowed | |
13 | if subprocess.call( |
|
14 | if subprocess.call( | |
@@ -73,8 +74,7 b' demandimport.enable()' | |||||
73 | assert 'mercurial.error' not in sys.modules |
|
74 | assert 'mercurial.error' not in sys.modules | |
74 | from mercurial import error as errorproxy |
|
75 | from mercurial import error as errorproxy | |
75 |
|
76 | |||
76 | # unsure why this isn't lazy. |
|
77 | assert isinstance(errorproxy, _LazyModule) | |
77 | assert not isinstance(f, _LazyModule) |
|
|||
78 | assert f(errorproxy) == "<module 'mercurial.error' from '?'>", f(errorproxy) |
|
78 | assert f(errorproxy) == "<module 'mercurial.error' from '?'>", f(errorproxy) | |
79 |
|
79 | |||
80 | doc = ' '.join(errorproxy.__doc__.split()[:3]) |
|
80 | doc = ' '.join(errorproxy.__doc__.split()[:3]) | |
@@ -92,10 +92,16 b' assert f(errorproxy) == "<module \'mercur' | |||||
92 | import os |
|
92 | import os | |
93 |
|
93 | |||
94 | assert not isinstance(os, _LazyModule) |
|
94 | assert not isinstance(os, _LazyModule) | |
95 | assert f(os) == "<module 'os' from '?'>", f(os) |
|
95 | if ispy311: | |
|
96 | assert f(os) == "<module 'os' (frozen)>", f(os) | |||
|
97 | else: | |||
|
98 | assert f(os) == "<module 'os' from '?'>", f(os) | |||
96 |
|
99 | |||
97 | assert f(os.system) == '<built-in function system>', f(os.system) |
|
100 | assert f(os.system) == '<built-in function system>', f(os.system) | |
98 | assert f(os) == "<module 'os' from '?'>", f(os) |
|
101 | if ispy311: | |
|
102 | assert f(os) == "<module 'os' (frozen)>", f(os) | |||
|
103 | else: | |||
|
104 | assert f(os) == "<module 'os' from '?'>", f(os) | |||
99 |
|
105 | |||
100 | assert 'mercurial.utils.procutil' not in sys.modules |
|
106 | assert 'mercurial.utils.procutil' not in sys.modules | |
101 | from mercurial.utils import procutil |
|
107 | from mercurial.utils import procutil |
@@ -598,6 +598,7 b' Even though the extension fails during u' | |||||
598 | uisetup(ui) |
|
598 | uisetup(ui) | |
599 | File "$TESTTMP/baduisetup.py", line 2, in uisetup |
|
599 | File "$TESTTMP/baduisetup.py", line 2, in uisetup | |
600 | 1 / 0 |
|
600 | 1 / 0 | |
|
601 | ~~^~~ (py311 !) | |||
601 | ZeroDivisionError: * by zero (glob) |
|
602 | ZeroDivisionError: * by zero (glob) | |
602 | *** failed to set up extension baduisetup: * by zero (glob) |
|
603 | *** failed to set up extension baduisetup: * by zero (glob) | |
603 | Mercurial Distributed SCM (version *) (glob) |
|
604 | Mercurial Distributed SCM (version *) (glob) |
@@ -163,7 +163,8 b' hgweb filerevision, html' | |||||
163 | <span id="l7"><span class="kn">import</span> <span class="nn">itertools</span></span><a href="#l7"></a> |
|
163 | <span id="l7"><span class="kn">import</span> <span class="nn">itertools</span></span><a href="#l7"></a> | |
164 | <span id="l8"></span><a href="#l8"></a> |
|
164 | <span id="l8"></span><a href="#l8"></a> | |
165 | <span id="l9"><span class="kn">def</span> <span class="nf">primes</span><span class="p">():</span></span><a href="#l9"></a> |
|
165 | <span id="l9"><span class="kn">def</span> <span class="nf">primes</span><span class="p">():</span></span><a href="#l9"></a> | |
166 | <span id="l10"> <span class="sd">"""Generate all primes."""</span></span><a href="#l10"></a> |
|
166 | <span id="l10"><span class="w"> </span><span class="sd">"""Generate all primes."""</span></span><a href="#l10"></a> (pygments214 !) | |
|
167 | <span id="l10"> <span class="sd">"""Generate all primes."""</span></span><a href="#l10"></a> (no-pygments214 !) | |||
167 | <span id="l11"> <span class="kn">def</span> <span class="nf">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></span><a href="#l11"></a> |
|
168 | <span id="l11"> <span class="kn">def</span> <span class="nf">sieve</span><span class="p">(</span><span class="n">ns</span><span class="p">):</span></span><a href="#l11"></a> | |
168 | <span id="l12"> <span class="n">p</span> <span class="o">=</span> <span class="n">ns</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></span><a href="#l12"></a> |
|
169 | <span id="l12"> <span class="n">p</span> <span class="o">=</span> <span class="n">ns</span><span class="o">.</span><span class="n">next</span><span class="p">()</span></span><a href="#l12"></a> | |
169 | <span id="l13"> <span class="c"># It is important to yield *here* in order to stop the</span></span><a href="#l13"></a> |
|
170 | <span id="l13"> <span class="c"># It is important to yield *here* in order to stop the</span></span><a href="#l13"></a> | |
@@ -489,7 +490,8 b' hgweb fileannotate, html' | |||||
489 | <a href="/rev/687f2d169546">changeset</a> |
|
490 | <a href="/rev/687f2d169546">changeset</a> | |
490 | </div> |
|
491 | </div> | |
491 | </td> |
|
492 | </td> | |
492 |
<td class="source followlines-btn-parent"><a href="#l10"> 10</a> <span class="sd">""" |
|
493 | <td class="source followlines-btn-parent"><a href="#l10"> 10</a> <span class="w"> </span><span class="sd">"""Generate all primes."""</span></td> (pygments214 !) | |
|
494 | <td class="source followlines-btn-parent"><a href="#l10"> 10</a> <span class="sd">"""Generate all primes."""</span></td> (no-pygments214 !) | |||
493 | </tr> |
|
495 | </tr> | |
494 | <tr id="l11" class="thisrev"> |
|
496 | <tr id="l11" class="thisrev"> | |
495 | <td class="annotate parity0"> |
|
497 | <td class="annotate parity0"> | |
@@ -1008,7 +1010,7 b' We attempt to highlight unknown files by' | |||||
1008 | > EOF |
|
1010 | > EOF | |
1009 |
|
1011 | |||
1010 | $ cat > unknownfile << EOF |
|
1012 | $ cat > unknownfile << EOF | |
1011 | > #!$PYTHON |
|
1013 | > #!/this/helps/pygments/detect/python | |
1012 | > def foo(): |
|
1014 | > def foo(): | |
1013 | > pass |
|
1015 | > pass | |
1014 | > EOF |
|
1016 | > EOF |
@@ -340,12 +340,14 b' Test a checksum failure during the proce' | |||||
340 | $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.git/info/lfs/objects/batch': (glob) |
|
340 | $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.git/info/lfs/objects/batch': (glob) | |
341 | $LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob) |
|
341 | $LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob) | |
342 | $LOCALIP - - [$ERRDATE$] HG error: verifies = store.verify(oid) (glob) |
|
342 | $LOCALIP - - [$ERRDATE$] HG error: verifies = store.verify(oid) (glob) | |
|
343 | $LOCALIP - - [$ERRDATE$] HG error: ^^^^^^^^^^^^^^^^^ (glob) (py311 !) | |||
343 | $LOCALIP - - [$ERRDATE$] HG error: raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8")) (glob) |
|
344 | $LOCALIP - - [$ERRDATE$] HG error: raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8")) (glob) | |
344 | $LOCALIP - - [$ERRDATE$] HG error: *Error: [Errno *] f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e: I/O error (glob) |
|
345 | $LOCALIP - - [$ERRDATE$] HG error: *Error: [Errno *] f03217a32529a28a42d03b1244fe09b6e0f9fd06d7b966d4d50567be2abe6c0e: I/O error (glob) | |
345 | $LOCALIP - - [$ERRDATE$] HG error: (glob) |
|
346 | $LOCALIP - - [$ERRDATE$] HG error: (glob) | |
346 | $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.git/info/lfs/objects/batch': (glob) |
|
347 | $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.git/info/lfs/objects/batch': (glob) | |
347 | $LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob) |
|
348 | $LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob) | |
348 | $LOCALIP - - [$ERRDATE$] HG error: verifies = store.verify(oid) (glob) |
|
349 | $LOCALIP - - [$ERRDATE$] HG error: verifies = store.verify(oid) (glob) | |
|
350 | $LOCALIP - - [$ERRDATE$] HG error: ^^^^^^^^^^^^^^^^^ (glob) (py311 !) | |||
349 | $LOCALIP - - [$ERRDATE$] HG error: raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8")) (glob) |
|
351 | $LOCALIP - - [$ERRDATE$] HG error: raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8")) (glob) | |
350 | $LOCALIP - - [$ERRDATE$] HG error: *Error: [Errno *] b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c: I/O error (glob) |
|
352 | $LOCALIP - - [$ERRDATE$] HG error: *Error: [Errno *] b5bb9d8014a0f9b1d61e21e796d78dccdf1352f23cd32812f4850b878ae4944c: I/O error (glob) | |
351 | $LOCALIP - - [$ERRDATE$] HG error: (glob) |
|
353 | $LOCALIP - - [$ERRDATE$] HG error: (glob) | |
@@ -363,19 +365,26 b' Test a checksum failure during the proce' | |||||
363 | self.do_hgweb() |
|
365 | self.do_hgweb() | |
364 | for chunk in self.server.application(env, self._start_response): |
|
366 | for chunk in self.server.application(env, self._start_response): | |
365 | for r in self._runwsgi(req, res, repo): |
|
367 | for r in self._runwsgi(req, res, repo): | |
|
368 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (py311 !) | |||
366 | handled = wireprotoserver.handlewsgirequest( (py38 !) |
|
369 | handled = wireprotoserver.handlewsgirequest( (py38 !) | |
|
370 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (py311 !) | |||
367 | return _processbasictransfer( (py38 !) |
|
371 | return _processbasictransfer( (py38 !) | |
|
372 | ^^^^^^^^^^^^^^^^^^^^^^ (py311 !) | |||
368 | rctx, req, res, self.check_perm (no-py38 !) |
|
373 | rctx, req, res, self.check_perm (no-py38 !) | |
369 | rctx.repo, req, res, lambda perm: checkperm(rctx, req, perm) (no-py38 !) |
|
374 | rctx.repo, req, res, lambda perm: checkperm(rctx, req, perm) (no-py38 !) | |
370 | res.setbodybytes(localstore.read(oid)) |
|
375 | res.setbodybytes(localstore.read(oid)) | |
|
376 | ^^^^^^^^^^^^^^^^^^^^ (py311 !) | |||
371 | blob = self._read(self.vfs, oid, verify) |
|
377 | blob = self._read(self.vfs, oid, verify) | |
|
378 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (py311 !) | |||
372 | raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8")) |
|
379 | raise IOError(errno.EIO, r'%s: I/O error' % oid.decode("utf-8")) | |
373 | *Error: [Errno *] 276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d: I/O error (glob) |
|
380 | *Error: [Errno *] 276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d: I/O error (glob) | |
374 |
|
381 | |||
375 | $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.hg/lfs/objects/276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d': (glob) |
|
382 | $LOCALIP - - [$ERRDATE$] HG error: Exception happened while processing request '/.hg/lfs/objects/276f73cfd75f9fb519810df5f5d96d6594ca2521abd86cbcd92122f7d51a1f3d': (glob) | |
376 | $LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob) |
|
383 | $LOCALIP - - [$ERRDATE$] HG error: Traceback (most recent call last): (glob) | |
377 | $LOCALIP - - [$ERRDATE$] HG error: res.setbodybytes(localstore.read(oid)) (glob) |
|
384 | $LOCALIP - - [$ERRDATE$] HG error: res.setbodybytes(localstore.read(oid)) (glob) | |
|
385 | $LOCALIP - - [$ERRDATE$] HG error: ^^^^^^^^^^^^^^^^^^^^ (glob) (py311 !) | |||
378 | $LOCALIP - - [$ERRDATE$] HG error: blob = self._read(self.vfs, oid, verify) (glob) |
|
386 | $LOCALIP - - [$ERRDATE$] HG error: blob = self._read(self.vfs, oid, verify) (glob) | |
|
387 | $LOCALIP - - [$ERRDATE$] HG error: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ (glob) (py311 !) | |||
379 | $LOCALIP - - [$ERRDATE$] HG error: blobstore._verify(oid, b'dummy content') (glob) |
|
388 | $LOCALIP - - [$ERRDATE$] HG error: blobstore._verify(oid, b'dummy content') (glob) | |
380 | $LOCALIP - - [$ERRDATE$] HG error: raise LfsCorruptionError( (glob) (py38 !) |
|
389 | $LOCALIP - - [$ERRDATE$] HG error: raise LfsCorruptionError( (glob) (py38 !) | |
381 | $LOCALIP - - [$ERRDATE$] HG error: hint=_(b'run hg verify'), (glob) (no-py38 !) |
|
390 | $LOCALIP - - [$ERRDATE$] HG error: hint=_(b'run hg verify'), (glob) (no-py38 !) |
@@ -81,4 +81,14 b' another repository of push/pull/clone on' | |||||
81 | abort: required features are not supported in the destination: featuresetup-test |
|
81 | abort: required features are not supported in the destination: featuresetup-test | |
82 | [255] |
|
82 | [255] | |
83 |
|
83 | |||
|
84 | Bundlerepo also enforces the underlying repo requirements | |||
|
85 | ||||
|
86 | $ hg --cwd supported bundle --all ../bundle.hg | |||
|
87 | 1 changesets found | |||
|
88 | $ echo outdoor-pool > push-dst/.hg/requires | |||
|
89 | $ hg --cwd push-dst log -R ../bundle.hg -T phases | |||
|
90 | abort: repository requires features unknown to this Mercurial: outdoor-pool | |||
|
91 | (see https://mercurial-scm.org/wiki/MissingRequirement for more information) | |||
|
92 | [255] | |||
|
93 | ||||
84 | $ cd .. |
|
94 | $ cd .. |
@@ -2981,16 +2981,16 b' random sort' | |||||
2981 | $ hg log --rev 'sort(all(), "-random")' | wc -l |
|
2981 | $ hg log --rev 'sort(all(), "-random")' | wc -l | |
2982 | \s*8 (re) |
|
2982 | \s*8 (re) | |
2983 | $ hg log --rev 'sort(all(), "random", random.seed=celeste)' |
|
2983 | $ hg log --rev 'sort(all(), "random", random.seed=celeste)' | |
|
2984 | 0 b12 m111 u112 111 10800 | |||
|
2985 | 4 b111 m112 u111 110 14400 | |||
|
2986 | 2 b111 m11 u12 111 3600 | |||
2984 | 6 b111 t2 tu 130 0 |
|
2987 | 6 b111 t2 tu 130 0 | |
|
2988 | 1 b11 m12 u111 112 7200 | |||
2985 | 7 b111 t3 tu 130 0 |
|
2989 | 7 b111 t3 tu 130 0 | |
2986 | 4 b111 m112 u111 110 14400 |
|
|||
2987 | 3 b112 m111 u11 120 0 |
|
|||
2988 | 5 b111 t1 tu 130 0 |
|
2990 | 5 b111 t1 tu 130 0 | |
|
2991 | 3 b112 m111 u11 120 0 | |||
|
2992 | $ hg log --rev 'first(sort(all(), "random", random.seed=celeste))' | |||
2989 | 0 b12 m111 u112 111 10800 |
|
2993 | 0 b12 m111 u112 111 10800 | |
2990 | 1 b11 m12 u111 112 7200 |
|
|||
2991 | 2 b111 m11 u12 111 3600 |
|
|||
2992 | $ hg log --rev 'first(sort(all(), "random", random.seed=celeste))' |
|
|||
2993 | 6 b111 t2 tu 130 0 |
|
|||
2994 |
|
2994 | |||
2995 |
|
2995 | |||
2996 | topographical sorting can't be combined with other sort keys, and you can't |
|
2996 | topographical sorting can't be combined with other sort keys, and you can't |
General Comments 0
You need to be logged in to leave comments.
Login now