Mercurial > hg
view tests/testlib/ext-stream-clone-steps.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 | c2633c69cbe0 |
line wrap: on
line source
from mercurial import ( encoding, extensions, streamclone, testing, ) WALKED_FILE_1 = encoding.environ[b'HG_TEST_STREAM_WALKED_FILE_1'] WALKED_FILE_2 = encoding.environ[b'HG_TEST_STREAM_WALKED_FILE_2'] def _test_sync_point_walk_1(orig, repo): testing.write_file(WALKED_FILE_1) def _test_sync_point_walk_2(orig, repo): assert repo._currentlock(repo._lockref) is None testing.wait_file(WALKED_FILE_2) def uisetup(ui): extensions.wrapfunction( streamclone, '_test_sync_point_walk_1', _test_sync_point_walk_1 ) extensions.wrapfunction( streamclone, '_test_sync_point_walk_2', _test_sync_point_walk_2 )