# HG changeset patch # User Pierre-Yves David # Date 1685461093 -3600 # Node ID 11562d72cb7b7254594d21339925b5e72ef7d3cd # Parent cdb471c8ebcfed65234a644539d0b0845c196fcc store: directly pass the filesize in the `details` of revlog The dictionary only contains 1 (or 0) entries, we can directly store that information (or None). Moving to a simpler argument passing result in a noticable speedup (because Python) The number below use `hg perf::stream-locked-section` to measure the time spend in the locked section of the streaming clone. Number are run on various repository. ### mercurial-2018-08-01-zstd-sparse-revlog before: 0.031247 seconds after: 0.030246 seconds (-3.20%) ### mozilla-central-2018-08-01-zstd-sparse-revlog before: 6.718968 seconds after: 6.304179 seconds (-6.17%) ### mozilla-try-2019-02-18-zstd-sparse-revlog before: 14.631343 seconds after: 14.142687 seconds (-3.34%) ### netbeans-2018-08-01-zstd-sparse-revlog before: 2.895584 seconds after: 2.719939 seconds (-6.07%) ### pypy-2018-08-01-zstd-sparse-revlog before: 0.561843 seconds after: 0.543034 seconds (-3.35%) diff -r cdb471c8ebcf -r 11562d72cb7b mercurial/store.py --- a/mercurial/store.py Tue May 30 16:35:10 2023 +0100 +++ b/mercurial/store.py Tue May 30 16:38:13 2023 +0100 @@ -607,14 +607,13 @@ self._files = [] for ext in sorted(self._details, key=_ext_key): path = self._path_prefix + ext - data = self._details[ext] + file_size = self._details[ext] # files that are "volatile" and might change between # listing and streaming # # note: the ".nd" file are nodemap data and won't "change" # but they might be deleted. volatile = ext.endswith(REVLOG_FILES_VOLATILE_EXT) - file_size = data.get('file_size') f = StoreFile(path, file_size, volatile) self._files.append(f) return self._files @@ -802,10 +801,8 @@ if strip_filename and b'/' in revlog: revlog_target_id = revlog_target_id.rsplit(b'/', 1)[0] revlog_target_id += b'/' - for ext, (t, s) in sorted(details.items()): - file_details[ext] = { - 'file_size': s, - } + for ext, (t, size) in sorted(details.items()): + file_details[ext] = size yield RevlogStoreEntry( path_prefix=revlog, revlog_type=rl_type, @@ -857,10 +854,8 @@ for data, revlog_type in top_rl: for revlog, details in sorted(data.items()): file_details = {} - for ext, (t, s) in details.items(): - file_details[ext] = { - 'file_size': s, - } + for ext, (t, size) in details.items(): + file_details[ext] = size yield RevlogStoreEntry( path_prefix=revlog, revlog_type=revlog_type, @@ -1160,8 +1155,8 @@ else: # unreachable assert False, revlog - for ext, t in details.items(): - file_details[ext] = {} + for ext in details: + file_details[ext] = None entry = RevlogStoreEntry( path_prefix=revlog, revlog_type=rl_type,