Arseniy Alekseyev <aalekseyev@janestreet.com> [Tue, 05 Oct 2021 15:10:42 +0100] rev 48237
rhg: stop manifest traversal when no more files are needed
Stopping the traversal early can skip a significant part
of the manifest traversal, to avoid some of its cost.
The worst-case benchmarks are favorable, as well.
Running [hg cat] on the last file in the manifest of
a large repo, I'm seeing a ~4ms improvement (150ms -> 146ms),
so this time is now almost indistinguishable from the
baseline ("brute force") implementation.
Running [hg cat] on ~220 files together with the last file
of the repo is further improved by ~5ms or so.
I suspect the raw performance improvements are caused by splitting
the manifest search and the file data access into separate phases,
instead of interleaving them.
Differential Revision: https://phab.mercurial-scm.org/D11616
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 04 Oct 2021 19:06:45 +0100] rev 48236
rhg: faster hg cat when many files are requested
With this patch I'm seeing a ~39ms improvement (220ms -> 181ms) when
running [hg cat] on ~220 files in a ~260k-file repo.
The timing for [hg cat] on an individual file becomes slightly worse
(losing 5ms: 145ms -> 150ms).
A follow-up commit is intended to improve that.
Differential Revision: https://phab.mercurial-scm.org/D11615
Simon Sapin <simon.sapin@octobus.net> [Fri, 16 Jul 2021 18:42:20 +0200] rev 48235
dirstate-v2: Add support when Rust is not enabled
This wires into `dirstatemap` the parser and serializer added in previous
changesets. The memory representation is still the same, with a flat `dict`
for `DirstateItem`s and another one for copy sources. Serialization always
creates a new dirstate-v2 data file and does not support (when Rust is not
enabled) appending to an existing one, since we don’t keep track of which
tree nodes are new or modified. Instead the tree is reconstructed during
serialization.
Differential Revision: https://phab.mercurial-scm.org/D11520
Raphaël Gomès <rgomes@octobus.net> [Thu, 22 Jul 2021 17:31:37 +0200] rev 48234
dirstate-v2: Initial Python serializer
This adds code seralizing a `map` and `copy_map` dicts into dirstate-v2
file formate. This is not used yet.
Differential Revision: https://phab.mercurial-scm.org/D11519
Simon Sapin <simon.sapin@octobus.net> [Sun, 03 Oct 2021 13:18:03 +0200] rev 48233
dirstate-v2: initial Python parser
The dirstate-v2 file format should be supported even if Rust extensions are
not enabled. This changeset adds parsing code that is not used yet.
Differential Revision: https://phab.mercurial-scm.org/D11518
Simon Sapin <simon.sapin@octobus.net> [Fri, 08 Oct 2021 13:15:22 +0200] rev 48232
dirstate: Move more methods to the _dirstatemapcommon base class
This reduces duplication slightly and will help with supporting dirstate-v2
when Rust is not enabled.
Differential Revision: https://phab.mercurial-scm.org/D11621
Simon Sapin <simon.sapin@octobus.net> [Wed, 13 Oct 2021 17:32:52 +0200] rev 48231
dirstate-v2: Add storage space for nanoseconds precision in file mtimes
For now the sub-second component is always set to zero for tracked files and
symlinks. (The mtime of directories for the `readdir`-skipping optimization
is a different code path and already uses the full precision available.)
This extra storage uses the space previously freed by replacing the 32-bit
`mode` field by two bits in the existing `flags` field, so the overall size
of nodes is unchanged. (This space had been left as padding for this purpose.)
Also move things around in the node layout and documentation to have less
duplication. Now that they have the same representation, directory mtime and
file mtime are kept in the same field. (Only either one can exist for a given
node.)
Differential Revision: https://phab.mercurial-scm.org/D11655
Simon Sapin <simon.sapin@octobus.net> [Wed, 13 Oct 2021 16:21:39 +0200] rev 48230
status: Extract TruncatedTimestamp from fs::Metadata without SystemTime
On Unix, the Rust standard library exposes `mtime` and `mtime_nsec` methods
for `std::fs::Metada` whih is exactly what we need to construct a
`TruncatedTimestamp`. This skips the computation in the conversion through
`SystemTime` and `Result<Duration, Duration>`.
Differential Revision: https://phab.mercurial-scm.org/D11654
Matt Harbison <matt_harbison@yahoo.com> [Fri, 17 Sep 2021 15:07:30 -0400] rev 48229
pyoxidizer: add the user site to `sys.path` on macOS
This allows 3rd party extensions that are installed with `pip` to be picked up,
similar to what we do on Windows. PyOxidizer has a bug that prevents this from
working without this extra help (see 95af358fcdfe), though it appears there's
another wrinkle here with `sys._framework` too.
I needed this to see if the problem[1] loading the keyring extension on Windows
also occurs on macOS (it doesn't).
[1] https://github.com/indygreg/PyOxidizer/issues/445
Differential Revision: https://phab.mercurial-scm.org/D11452
Matt Harbison <matt_harbison@yahoo.com> [Fri, 17 Sep 2021 15:02:01 -0400] rev 48228
pyoxidizer: don't use in-memory for resources on macOS
When trying to debug something else on macOS, pyoxidized builds were failing
with the following message about pywatchman (and then cext.base85 when I
commented out pywatchman):
"cannot be loaded from memory but memory loading required"
I don't have any immediate plans to do more work on macOS, but maybe this will
save someone else time debugging this.
Differential Revision: https://phab.mercurial-scm.org/D11451
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 14:12:41 -0700] rev 48227
chistedit: rename a confusingly named variable
I would expect `ctxs` contain instances of some class from the
`context` module but it actually contains instances of `histeditrule`.
Differential Revision: https://phab.mercurial-scm.org/D11653
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 14:28:51 -0700] rev 48226
chistedit: remove some local variable and access state on self instead
Now that we've replaced the state dict by a class, some of the local
variables that just do `foo = self.foo` seem unnecessary.
Differential Revision: https://phab.mercurial-scm.org/D11652
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:41:11 -0700] rev 48225
chistedit: move changeview() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11649
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:38:04 -0700] rev 48224
chistedit: move cycleaction() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11648
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:22:29 -0700] rev 48223
chistedit: move changeaction() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11647
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:20:46 -0700] rev 48222
chistedit: move swap() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11646
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:17:59 -0700] rev 48221
chistedit: move makeselection() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11645
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:16:14 -0700] rev 48220
chistedit: move changemode() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11644
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 09:00:51 -0700] rev 48219
chistedit: move movecursor() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11643
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 08:56:56 -0700] rev 48218
chistedit: move patchcontents() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11642
Martin von Zweigbergk <martinvonz@google.com> [Tue, 12 Oct 2021 08:55:19 -0700] rev 48217
chistedit: move event() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11641
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Oct 2021 23:07:54 -0700] rev 48216
chistedit: move renderpatch() and dependencies onto state class
Differential Revision: https://phab.mercurial-scm.org/D11640
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Oct 2021 23:04:29 -0700] rev 48215
chistedit: move renderrules() onto state class
Differential Revision: https://phab.mercurial-scm.org/D11639
Martin von Zweigbergk <martinvonz@google.com> [Mon, 11 Oct 2021 23:02:49 -0700] rev 48214
chistedit: move layout() and dependencies onto state class
Differential Revision: https://phab.mercurial-scm.org/D11638