Tue, 15 Feb 2022 13:32:11 -0500 narrowspec: add timing block for validating narrowspec
Augie Fackler <augie@google.com> [Tue, 15 Feb 2022 13:32:11 -0500] rev 48777
narrowspec: add timing block for validating narrowspec This was showing up in an operation I was doing today, and I'd like to be able to get trace spans for it instead of just profiler samples. Differential Revision: https://phab.mercurial-scm.org/D12185
Tue, 15 Feb 2022 20:24:46 -0800 branching: merge with stable
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Feb 2022 20:24:46 -0800] rev 48776
branching: merge with stable
Fri, 11 Feb 2022 16:52:48 -0800 filemerge: put temporary files in single temp dir by default
Martin von Zweigbergk <martinvonz@google.com> [Fri, 11 Feb 2022 16:52:48 -0800] rev 48775
filemerge: put temporary files in single temp dir by default The feature introduced in D2888 seems like a pure improvement to me. It makes the names' of temporary file easier to read. Let's have it always enabled. I also removed the config option for the path prefix because it doesn't seem useful. I asked Kyle (the author of the feature) about it and he couldn't think of a reason to keep it. I suspect it was just that we to have a config to turn it on/off while it was experimental, so it might as well be a configurable prefix then. Differential Revision: https://phab.mercurial-scm.org/D12171
Tue, 15 Feb 2022 05:20:46 +0100 dirstate-tracked-key: update the config value to match latest discussion
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Feb 2022 05:20:46 +0100] rev 48774
dirstate-tracked-key: update the config value to match latest discussion Special cases are not special enough, we align the option name on the other. The `version` value is undocumented for now as it can only have a single value. It is supported in the code to properly detect and abort if more value are introduced in the future value. Differential Revision: https://phab.mercurial-scm.org/D12184
Fri, 26 Nov 2021 15:38:04 +0100 rhg: signal when falling back in logs
Raphaël Gomès <rgomes@octobus.net> [Fri, 26 Nov 2021 15:38:04 +0100] rev 48773
rhg: signal when falling back in logs We use the `trace` level for the actual message because it can get really busy. Differential Revision: https://phab.mercurial-scm.org/D11814
Mon, 07 Feb 2022 13:23:58 +0100 revlog: register changelogv2 C implementation in parsers
pacien <pacien.trangirard@pacien.net> [Mon, 07 Feb 2022 13:23:58 +0100] rev 48772
revlog: register changelogv2 C implementation in parsers This allows Python code to make use of the C implementation of the changelogv2 base operations when the C extensions are enabled. The `format_version` values are now shared between the C and Python sides, avoiding an additional translation for the selection of the format version to use. Differential Revision: https://phab.mercurial-scm.org/D12179
Mon, 14 Feb 2022 12:34:02 +0100 revlog: implement changelogv2 packing and unpacking in C
pacien <pacien.trangirard@pacien.net> [Mon, 14 Feb 2022 12:34:02 +0100] rev 48771
revlog: implement changelogv2 packing and unpacking in C This introduces a C implementation of changelogv2 records packing and unpacking operations matching the pure Python counterpart, similarly to what we already have for revlogv1 and revlogv2. This is also necessary to access changelogv2 record fields from future Rust code without going through the Python part, which would annihilate any performance benefit. Differential Revision: https://phab.mercurial-scm.org/D12178
Thu, 10 Feb 2022 16:20:14 +0100 revlog: memset whole record instead of dealing with padding
pacien <pacien.trangirard@pacien.net> [Thu, 10 Feb 2022 16:20:14 +0100] rev 48770
revlog: memset whole record instead of dealing with padding This is less error-prone. Differential Revision: https://phab.mercurial-scm.org/D12177
Fri, 11 Feb 2022 05:37:19 +0100 revlog: do not compute node location by hand in index_invalidate_added
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 11 Feb 2022 05:37:19 +0100] rev 48769
revlog: do not compute node location by hand in index_invalidate_added The node is not guaranteed to be at the same location all the time (e.g: changelog v2), so let's use the official existing API to get that value. Differential Revision: https://phab.mercurial-scm.org/D12176
Fri, 28 Jan 2022 11:54:44 +0100 rank: compute property incrementally
pacien <pacien.trangirard@pacien.net> [Fri, 28 Jan 2022 11:54:44 +0100] rev 48768
rank: compute property incrementally This replaces the naive rank computation with a more efficient incremental method, avoiding computing the whole ancestor set when possible. Differential Revision: https://phab.mercurial-scm.org/D12143
Fri, 28 Jan 2022 11:45:33 +0100 rank: add test with golden values
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 11:45:33 +0100] rev 48767
rank: add test with golden values This adds a regression test for the computation of the rank, using the current values computed with the naive algorithm as the "golden" reference. Differential Revision: https://phab.mercurial-scm.org/D12142
Fri, 28 Jan 2022 11:45:18 +0100 rank: add minimal test
pacien <pacien.trangirard@pacien.net> [Fri, 28 Jan 2022 11:45:18 +0100] rev 48766
rank: add minimal test This adds a small test checking the rank computation in the case of a merge. Differential Revision: https://phab.mercurial-scm.org/D12141
Fri, 28 Jan 2022 11:35:41 +0100 rank: add context and template keyword
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 11:35:41 +0100] rev 48765
rank: add context and template keyword This makes the stored rank property accessible, to be expanded and printed. Differential Revision: https://phab.mercurial-scm.org/D12140
Fri, 28 Jan 2022 11:33:01 +0100 rank: naive rank property computation and retrieval
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 11:33:01 +0100] rev 48764
rank: naive rank property computation and retrieval This stores the rank (size of the ancestor set of a revision, including itself) in a changelog field and allows this property to be retrieved. This new property is used as part of stable-range computations, which will be introduced later on. The value is computed in a naive way from the definition of the rank. This will be replaced by a more efficient version subsequently. Differential Revision: https://phab.mercurial-scm.org/D12139
Mon, 07 Feb 2022 22:54:38 -0800 filemerge: move check for identical sides out of filemerge()
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 Feb 2022 22:54:38 -0800] rev 48763
filemerge: move check for identical sides out of filemerge() `filemerge.filemerge()` returns `None` if no merge was necessary because the two sides were identical. I don't think it should be that function's responsibility to handle that case; we should ideally not even call `filemerge.filemerge()` if the two inputs identical. This patch therefore moves the check out to the caller (`mergestate.py`). The largefiles test changed because we now notice that the two sides made the same change, so we don't consider it a merge. Also note that the new message better matches the line above it in the test output. Differential Revision: https://phab.mercurial-scm.org/D12154
Mon, 07 Feb 2022 20:12:09 -0800 mergestate: use an early return for trivial merges
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 Feb 2022 20:12:09 -0800] rev 48762
mergestate: use an early return for trivial merges `filemerge.filemerge()` returns `None` if no merge was needed because the two sides were identical. I'd like to move that to the caller. This is a little refactoring to prepare for that. Differential Revision: https://phab.mercurial-scm.org/D12153
Mon, 07 Feb 2022 14:07:04 -0800 simplemerge: remove now-unused arguments
Martin von Zweigbergk <martinvonz@google.com> [Mon, 07 Feb 2022 14:07:04 -0800] rev 48761
simplemerge: remove now-unused arguments The `ui` argument is no longer needed now that we don't handle `--print` in the library code. Differential Revision: https://phab.mercurial-scm.org/D12151
Tue, 18 Jan 2022 13:22:55 -0800 merge: fix documented order of `labels` argument
Martin von Zweigbergk <martinvonz@google.com> [Tue, 18 Jan 2022 13:22:55 -0800] rev 48760
merge: fix documented order of `labels` argument Differential Revision: https://phab.mercurial-scm.org/D12150
Tue, 18 Jan 2022 12:57:55 -0800 filemerge: when not keeping premerge, don't write markers to context
Martin von Zweigbergk <martinvonz@google.com> [Tue, 18 Jan 2022 12:57:55 -0800] rev 48759
filemerge: when not keeping premerge, don't write markers to context When premerge is enabled (as it is for non-binary inputs by default) and the markers are not kept, we currently still write it to the output context and then restore the previous content right after. With the refactoring in the previous patch, we can easily avoid that step and instead write the output in the opposite case (i.e. when it's successful or when the markers are supposed to be kept). Differential Revision: https://phab.mercurial-scm.org/D12149
Fri, 14 Jan 2022 08:17:13 -0800 simplemerge: move printing of merge result to extension
Martin von Zweigbergk <martinvonz@google.com> [Fri, 14 Jan 2022 08:17:13 -0800] rev 48758
simplemerge: move printing of merge result to extension The `mercurial.simplemerge` module still has some command-lines processing that doesn't belong in such a low-level module. This patch moves the handling of `hg simplemerge --print` to the extension by having `mercurial.simplemerge.simplemerge()` return the merged text. Differential Revision: https://phab.mercurial-scm.org/D12148
Thu, 10 Feb 2022 15:48:01 -0800 simplemerge: remove code for checking binary input now that callers do it
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 15:48:01 -0800] rev 48757
simplemerge: remove code for checking binary input now that callers do it The callers now do the checking for binary inputs and handle warnings and/or errors, so we can remove that code from the low-level `simplemerge` module now. After this patch we just raise an error unless the caller told us to allow binary inputs. Differential Revision: https://phab.mercurial-scm.org/D12169
Thu, 10 Feb 2022 15:27:58 -0800 simplemerge: let filemerge check for binary inputs
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 15:27:58 -0800] rev 48756
simplemerge: let filemerge check for binary inputs This is similar to the previous patch, but here we put a specialized copy of `simplemerge._verifytext()` in the the `filemerge` module instead. Differential Revision: https://phab.mercurial-scm.org/D12147
Thu, 10 Feb 2022 13:36:09 -0800 simplemerge: let extension check for binary inputs (unless `--text`)
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 13:36:09 -0800] rev 48755
simplemerge: let extension check for binary inputs (unless `--text`) The `simplemerge` module does too much UI-related things. This patch puts a specialized copy of `simplemerge._verifytext()` in the simplemerge extension. Differential Revision: https://phab.mercurial-scm.org/D12146
Thu, 10 Feb 2022 11:00:32 -0800 simplemerge: store input data in MergeInput
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 11:00:32 -0800] rev 48754
simplemerge: store input data in MergeInput I want to be able to update the file contents for support for partial conflict resolution. Having the text available (and later settable) on `MergeInput` will enable that. Differential Revision: https://phab.mercurial-scm.org/D12144
Fri, 04 Feb 2022 18:36:36 -0800 simplemerge: convert MergeInput to regular, non-attr.ib class
Martin von Zweigbergk <martinvonz@google.com> [Fri, 04 Feb 2022 18:36:36 -0800] rev 48753
simplemerge: convert MergeInput to regular, non-attr.ib class I'm about to add more logic and state to it. Differential Revision: https://phab.mercurial-scm.org/D12145
Thu, 10 Feb 2022 09:59:07 -0800 simplemerge: replace `**opts` passed to `simplemerge()` by keyword arguments
Martin von Zweigbergk <martinvonz@google.com> [Thu, 10 Feb 2022 09:59:07 -0800] rev 48752
simplemerge: replace `**opts` passed to `simplemerge()` by keyword arguments The `simplemerge` module is library code; it should not get an unmodified `opts` dict from the `simplemerge` extension. Differential Revision: https://phab.mercurial-scm.org/D12152
Thu, 03 Feb 2022 18:14:25 +0100 narrow: add support for merging add and remove outside of the tracked set
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 03 Feb 2022 18:14:25 +0100] rev 48751
narrow: add support for merging add and remove outside of the tracked set This extend f1eb77dceb36 to test and support the remaining action. Or, at least, the simple incarnation of them. Differential Revision: https://phab.mercurial-scm.org/D12181
Fri, 21 Jan 2022 17:54:03 +0100 status: prefer relative paths in Rust code
Simon Sapin <simon.sapin@octobus.net> [Fri, 21 Jan 2022 17:54:03 +0100] rev 48750
status: prefer relative paths in Rust code … when the repository root is under the current directory, so the kernel needs to traverse fewer directory in every call to `read_dir` or `symlink_metadata`. Better yet would be to use libc functions like `openat` and `fstatat` to remove such repeated traversals entirely, but the standard library does not provide APIs based on those. Maybe with a crate like https://crates.io/crates/openat instead? Benchmarks of `rhg status` show that this patch is neutral in some configurations, and makes the command up to ~20% faster in others. Below is semi-arbitrary subset of results. The four numeric columns are: time (in seconds) with this changeset’s parent, time with this changeset, time difference (negative is better), time ratio (less than 1 is better). ``` mercurial-dirstate-v1 | default-plain-clean.no-iu.pbr | 0.0061 -> 0.0059: -0.0002 (0.97) mercurial-dirstate-v2 | default-plain-clean.no-iu.pbr | 0.0029 -> 0.0028: -0.0001 (0.97) mozilla-dirstate-v1 | default-plain-clean.no-iu.pbr | 0.2110 -> 0.2102: -0.0007 (1.00) mozilla-dirstate-v2 | default-copies-clean.ignored.pbr | 0.0489 -> 0.0401: -0.0088 (0.82) mozilla-dirstate-v2 | default-copies-clean.no-iu.pbr | 0.0479 -> 0.0393: -0.0085 (0.82) mozilla-dirstate-v2 | default-copies-large.all.pbr | 0.1262 -> 0.1210: -0.0051 (0.96) mozilla-dirstate-v2 | default-copies-small.ignored-unknown.pbr | 0.1262 -> 0.1200: -0.0062 (0.95) mozilla-dirstate-v2 | default-copies-small.ignored.pbr | 0.0536 -> 0.0417: -0.0119 (0.78) mozilla-dirstate-v2 | default-copies-small.no-iu.pbr | 0.0482 -> 0.0393: -0.0089 (0.81) mozilla-dirstate-v2 | default-plain-clean.ignored.pbr | 0.0518 -> 0.0402: -0.0116 (0.78) mozilla-dirstate-v2 | default-plain-clean.no-iu.pbr | 0.0481 -> 0.0392: -0.0088 (0.82) mozilla-dirstate-v2 | default-plain-large.all.pbr | 0.1271 -> 0.1218: -0.0052 (0.96) mozilla-dirstate-v2 | default-plain-small.ignored-unknown.pbr | 0.1225 -> 0.1202: -0.0022 (0.98) mozilla-dirstate-v2 | default-plain-small.ignored.pbr | 0.0510 -> 0.0418: -0.0092 (0.82) mozilla-dirstate-v2 | default-plain-small.no-iu.pbr | 0.0480 -> 0.0394: -0.0086 (0.82) netbeans-dirstate-v1 | default-plain-clean.no-iu.pbr | 0.1442 -> 0.1422: -0.0020 (0.99) netbeans-dirstate-v2 | default-plain-clean.no-iu.pbr | 0.0325 -> 0.0282: -0.0043 (0.87) ``` Differential Revision: https://phab.mercurial-scm.org/D12175
Mon, 14 Feb 2022 18:51:43 +0100 rust: remove unused `StatusError::IO` enum variant
Simon Sapin <simon.sapin@octobus.net> [Mon, 14 Feb 2022 18:51:43 +0100] rev 48749
rust: remove unused `StatusError::IO` enum variant All `io::Error` cases are now handled through PatternFileWarning or BadMatch Differential Revision: https://phab.mercurial-scm.org/D12174
Mon, 14 Feb 2022 18:57:12 +0100 rust: fix code formatting
Simon Sapin <simon.sapin@octobus.net> [Mon, 14 Feb 2022 18:57:12 +0100] rev 48748
rust: fix code formatting Differential Revision: https://phab.mercurial-scm.org/D12173
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 tip