Mercurial > hg
annotate tests/test-dispatch.py @ 50400:95acba2c29f6
encoding: avoid quadratic time complexity when json-encoding non-UTF8 strings
Apparently the code uses "+=" with a bytes object, which is linear-time, so the
whole encoding is quadratic-time. This patch makes us use a bytearray object,
instead, which has a(n amortized-)constant-time append operation.
The encoding is still not particularly fast, but at least a 10MB file
takes tens of seconds, not many hours to encode.
author | Arseniy Alekseyev <aalekseyev@janestreet.com> |
---|---|
date | Mon, 06 Mar 2023 11:27:57 +0000 |
parents | 6000f5b25c9b |
children |
rev | line source |
---|---|
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
1 import os |
37924
32106c474086
tests: port test-dispatch.py to Python 3
Augie Fackler <augie@google.com>
parents:
36374
diff
changeset
|
2 import sys |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37924
diff
changeset
|
3 from mercurial import dispatch |
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37924
diff
changeset
|
4 |
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
5 |
37924
32106c474086
tests: port test-dispatch.py to Python 3
Augie Fackler <augie@google.com>
parents:
36374
diff
changeset
|
6 def printb(data, end=b'\n'): |
32106c474086
tests: port test-dispatch.py to Python 3
Augie Fackler <augie@google.com>
parents:
36374
diff
changeset
|
7 out = getattr(sys.stdout, 'buffer', sys.stdout) |
32106c474086
tests: port test-dispatch.py to Python 3
Augie Fackler <augie@google.com>
parents:
36374
diff
changeset
|
8 out.write(data + end) |
32106c474086
tests: port test-dispatch.py to Python 3
Augie Fackler <augie@google.com>
parents:
36374
diff
changeset
|
9 out.flush() |
32106c474086
tests: port test-dispatch.py to Python 3
Augie Fackler <augie@google.com>
parents:
36374
diff
changeset
|
10 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37924
diff
changeset
|
11 |
5178
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
5095
diff
changeset
|
12 def testdispatch(cmd): |
18a9fbb5cd78
dispatch: move command dispatching into its own module
Matt Mackall <mpm@selenic.com>
parents:
5095
diff
changeset
|
13 """Simple wrapper around dispatch.dispatch() |
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
14 |
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
15 Prints command and result value, but does not handle quoting. |
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
16 """ |
37924
32106c474086
tests: port test-dispatch.py to Python 3
Augie Fackler <augie@google.com>
parents:
36374
diff
changeset
|
17 printb(b"running: %s" % (cmd,)) |
14438
08bfec2ef031
dispatch: wrap dispatch related information in a request class
Idan Kamara <idankk86@gmail.com>
parents:
9031
diff
changeset
|
18 req = dispatch.request(cmd.split()) |
08bfec2ef031
dispatch: wrap dispatch related information in a request class
Idan Kamara <idankk86@gmail.com>
parents:
9031
diff
changeset
|
19 result = dispatch.dispatch(req) |
37924
32106c474086
tests: port test-dispatch.py to Python 3
Augie Fackler <augie@google.com>
parents:
36374
diff
changeset
|
20 printb(b"result: %r" % (result,)) |
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
21 |
43076
2372284d9457
formatting: blacken the codebase
Augie Fackler <augie@google.com>
parents:
37924
diff
changeset
|
22 |
36374
f0c94af0d70d
py3: add b'' prefixes in test-dispatch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28405
diff
changeset
|
23 testdispatch(b"init test1") |
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
24 os.chdir('test1') |
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
25 |
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
26 # create file 'foo', add and commit |
9031
3b76321aa0de
compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents:
5178
diff
changeset
|
27 f = open('foo', 'wb') |
36374
f0c94af0d70d
py3: add b'' prefixes in test-dispatch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28405
diff
changeset
|
28 f.write(b'foo\n') |
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
29 f.close() |
36374
f0c94af0d70d
py3: add b'' prefixes in test-dispatch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28405
diff
changeset
|
30 testdispatch(b"add foo") |
f0c94af0d70d
py3: add b'' prefixes in test-dispatch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28405
diff
changeset
|
31 testdispatch(b"commit -m commit1 -d 2000-01-01 foo") |
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
32 |
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
33 # append to file 'foo' and commit |
9031
3b76321aa0de
compat: use open() instead of file() everywhere
Alejandro Santos <alejolp@alejolp.com>
parents:
5178
diff
changeset
|
34 f = open('foo', 'ab') |
36374
f0c94af0d70d
py3: add b'' prefixes in test-dispatch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28405
diff
changeset
|
35 f.write(b'bar\n') |
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
36 f.close() |
36374
f0c94af0d70d
py3: add b'' prefixes in test-dispatch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28405
diff
changeset
|
37 testdispatch(b"commit -m commit2 -d 2000-01-02 foo") |
5095
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
38 |
f3f033def181
Added test for commands.dispatch (especially 88803a69b24)
Thomas Arendsen Hein <thomas@intevation.de>
parents:
diff
changeset
|
39 # check 88803a69b24 (fancyopts modified command table) |
36374
f0c94af0d70d
py3: add b'' prefixes in test-dispatch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28405
diff
changeset
|
40 testdispatch(b"log -r 0") |
f0c94af0d70d
py3: add b'' prefixes in test-dispatch.py
Pulkit Goyal <7895pulkit@gmail.com>
parents:
28405
diff
changeset
|
41 testdispatch(b"log -r tip") |