Mercurial > hg
view tests/blackbox-readonly-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 |
line wrap: on
line source
import os from mercurial import ( dispatch, extensions, ui as uimod, ) def testdispatch(cmd): """Simple wrapper around dispatch.dispatch() Prints command and result value, but does not handle quoting. """ ui = uimod.ui.load() extensions.populateui(ui) ui.statusnoi18n(b"running: %s\n" % cmd) req = dispatch.request(cmd.split(), ui) result = dispatch.dispatch(req) ui.statusnoi18n(b"result: %r\n" % result) # create file 'foo', add and commit f = open(b'foo', 'wb') f.write(b'foo\n') f.close() testdispatch(b"--debug add foo") testdispatch(b"--debug commit -m commit1 -d 2000-01-01 foo") # append to file 'foo' and commit f = open(b'foo', 'ab') f.write(b'bar\n') f.close() # remove blackbox.log directory (proxy for readonly log file) os.rmdir(b".hg/blackbox.log") # replace it with the real blackbox.log file os.rename(b".hg/blackbox.log-", b".hg/blackbox.log") testdispatch(b"--debug commit -m commit2 -d 2000-01-02 foo") # check 88803a69b24 (fancyopts modified command table) testdispatch(b"--debug log -r 0") testdispatch(b"--debug log -r tip")