Mon, 28 Feb 2022 18:34:23 +0100 merge: remove direct rustmod reference stable 6.1
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Feb 2022 18:34:23 +0100] rev 48805
merge: remove direct rustmod reference We shouldn't rely on this member being present in `dirstate.py`, this creates unnecessary coupling. This also can trigger certain issues in edge-cases where the policy is changed at runtime or multiple Python environments fight, which is an added bonus. Differential Revision: https://phab.mercurial-scm.org/D12217
Mon, 21 Feb 2022 11:22:40 +0100 relnotes: add 6.1 stable
Raphaël Gomès <rgomes@octobus.net> [Mon, 21 Feb 2022 11:22:40 +0100] rev 48804
relnotes: add 6.1 Differential Revision: https://phab.mercurial-scm.org/D12205
Fri, 18 Feb 2022 13:14:32 +0100 relnotes: add 6.0.3 stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 13:14:32 +0100] rev 48803
relnotes: add 6.0.3 Differential Revision: https://phab.mercurial-scm.org/D12204
Fri, 18 Feb 2022 12:51:23 +0100 windows: adjust test output in test-merge-tools.t stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 12:51:23 +0100] rev 48802
windows: adjust test output in test-merge-tools.t Differential Revision: https://phab.mercurial-scm.org/D12216
Fri, 18 Feb 2022 12:51:06 +0100 windows: generalize output for test-status-tracked-key.t stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 12:51:06 +0100] rev 48801
windows: generalize output for test-status-tracked-key.t Differential Revision: https://phab.mercurial-scm.org/D12215
Tue, 22 Feb 2022 11:51:08 +0100 windows: skip a section of a test that is legitimately broken on windows stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 22 Feb 2022 11:51:08 +0100] rev 48800
windows: skip a section of a test that is legitimately broken on windows See the comment in the test itself. Differential Revision: https://phab.mercurial-scm.org/D12214
Mon, 21 Feb 2022 12:03:57 +0100 heptapod-ci: remove Python 2 support
Raphaël Gomès <rgomes@octobus.net> [Mon, 21 Feb 2022 12:03:57 +0100] rev 48799
heptapod-ci: remove Python 2 support (hurray!) 6.1 was the last release to support Python 2, let's lighten the CI. Differential Revision: https://phab.mercurial-scm.org/D12206
Fri, 18 Feb 2022 14:32:26 +0100 Added signature for changeset c00d3ce4e94b stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 14:32:26 +0100] rev 48798
Added signature for changeset c00d3ce4e94b
Fri, 18 Feb 2022 14:32:09 +0100 Added tag 6.1rc0 for changeset c00d3ce4e94b stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 14:32:09 +0100] rev 48797
Added tag 6.1rc0 for changeset c00d3ce4e94b
Fri, 18 Feb 2022 14:27:43 +0100 branching: merge default into stable for 6.1 freeze stable 6.1rc0
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 14:27:43 +0100] rev 48796
branching: merge default into stable for 6.1 freeze
Fri, 18 Feb 2022 12:58:44 +0100 branching: merge 6.0.3 stable into default
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 12:58:44 +0100] rev 48795
branching: merge 6.0.3 stable into default
Fri, 18 Feb 2022 11:37:08 +0100 branching: merge stable into default
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 11:37:08 +0100] rev 48794
branching: merge stable into default
Thu, 17 Feb 2022 07:34:49 +0100 tracked-key: remove the dual write and rename to tracked-hint
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Feb 2022 07:34:49 +0100] rev 48793
tracked-key: remove the dual write and rename to tracked-hint The dual-write approach was mostly useless. As explained in the previous version of the help, the key had to be read twice before we could cache a value. However this "read twice" limitation actually also apply to any usage of the key. If some operation wants to rely of the "same value == same tracked set" property it would need to read the value before, and after running that operation (or at least, after, in all cases). So it cannot be sure the operation it did is "valid" until checking the key after the operation. As a resultat such operation can only be read-only or rollbackable. This reduce the utility of the "same value == same tracked set" a lot. So it seems simpler to drop the double write and to update the documentation to highlight that this file does not garantee race-free operation. As a result the "key" is demoted to a "hint". Documentation is updated accordingly. Differential Revision: https://phab.mercurial-scm.org/D12201
Thu, 17 Feb 2022 06:41:54 +0100 tracked-file: rename the format option to use `use-`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Feb 2022 06:41:54 +0100] rev 48792
tracked-file: rename the format option to use `use-` This is more consistent with the other options. Differential Revision: https://phab.mercurial-scm.org/D12200
Thu, 17 Feb 2022 06:35:42 +0100 tracked-key: update the requirement value
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Feb 2022 06:35:42 +0100] rev 48791
tracked-key: update the requirement value We renamed the config option but we forgot to change the actual value… Differential Revision: https://phab.mercurial-scm.org/D12199
Thu, 17 Feb 2022 06:32:03 +0100 tracked-key: make it possible to upgrade to and downgrade from the feature
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Feb 2022 06:32:03 +0100] rev 48790
tracked-key: make it possible to upgrade to and downgrade from the feature This seems rather important if we want people to start using it. Differential Revision: https://phab.mercurial-scm.org/D12198
Mon, 31 Jan 2022 18:13:00 +0300 obsolete: don't use os.stat in repo.obsstore.__nonzero__ if it's static HTTP
Anton Shestakov <av6@dwimlabs.net> [Mon, 31 Jan 2022 18:13:00 +0300] rev 48789
obsolete: don't use os.stat in repo.obsstore.__nonzero__ if it's static HTTP If a repo is accessed via static HTTP, then we obviously can't use os.stat() to just peek at the file size. Let's download the entire file to check its size. Yes, this feels wasteful, but: 1. If we're cloning or pulling a repo from a static HTTP server, we need the contents of the obsstore anyway. 2. Implementing statichttpvfs.stat() that uses HEAD will result in one more request to a static-only HTTP server, which is already slow. Also parsing a response to a HEAD request to construct os.stat_result is pretty hacky. There's also a question of the remote server properly supporting HEAD method and reporting at least file size. 3. Implementing statichttpvfs.stat() that uses GET is pretty much the same thing as we do here, except we can't even cache the response easily, unlike simply accessing obsstore._data, which is @propertycache'd. Importing statichttprepo locally to avoid circular import. See also: 4507bc001365 and commit message of f8f2ecdde4b5. Differential Revision: https://phab.mercurial-scm.org/D12195
Mon, 14 Feb 2022 22:49:03 -0800 filemerge: make `_maketempfiles()` more reusable
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:49:03 -0800] rev 48788
filemerge: make `_maketempfiles()` more reusable `_maketempfiles()` is very specialized for its current use. I hope to use it also when creating temporary files for input for tools that do partial conflict resolution. That'll be possible if the function is more generic. Instead of passing in two contexts (for "other" and "base") and an optional path (for "local"), let's pass a single list of files to make backups for. Even if we don't end up using for partial conflict resolution, this is still a simplification (but I do have a WIP patch for partial conflict resolution and it is able to benefit from this). Differential Revision: https://phab.mercurial-scm.org/D12193
Mon, 14 Feb 2022 22:16:29 -0800 filemerge: reduce some duplication in `_maketempfiles()`
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:16:29 -0800] rev 48787
filemerge: reduce some duplication in `_maketempfiles()` The two callers of the local `maketempfrompath()` function used the returned file object in the same way. We can reduce duplication by moving that code into the function. Differential Revision: https://phab.mercurial-scm.org/D12192
Mon, 14 Feb 2022 22:11:50 -0800 filemerge: use leverage `util.readfile()` in `_maketempfiles()`
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:11:50 -0800] rev 48786
filemerge: use leverage `util.readfile()` in `_maketempfiles()` Differential Revision: https://phab.mercurial-scm.org/D12191
Mon, 14 Feb 2022 22:04:50 -0800 filemerge: move removal of `.orig` extension on temp file close to context
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 22:04:50 -0800] rev 48785
filemerge: move removal of `.orig` extension on temp file close to context The place where the `.orig` extension is removed in `_maketempfiles()` doesn't make it clear that it's the backup path, which is why we have a comment in the code explaining it. Let's instead move it out of the function and close to where we get it from `backup.path()`, so that becomes clear. Differential Revision: https://phab.mercurial-scm.org/D12190
Mon, 14 Feb 2022 21:52:18 -0800 filemerge: remove `uselocalpath` argument from `_maketempfiles()`
Martin von Zweigbergk <martinvonz@google.com> [Mon, 14 Feb 2022 21:52:18 -0800] rev 48784
filemerge: remove `uselocalpath` argument from `_maketempfiles()` The `localpath` argument is unused if `uselocalpath` is false, so we can use `None` as a sentinel value for the variable instead and remove extra `uselocalpath` argument. That's not much of a win, but it's a small step towards further improvements. Differential Revision: https://phab.mercurial-scm.org/D12189
Fri, 11 Feb 2022 22:39:53 -0800 filemerge: remove an unnecessary join with absolute path
Martin von Zweigbergk <martinvonz@google.com> [Fri, 11 Feb 2022 22:39:53 -0800] rev 48783
filemerge: remove an unnecessary join with absolute path The `backup` path is now always absolute, so we don't need to join it with the working copy path. Differential Revision: https://phab.mercurial-scm.org/D12188
Fri, 11 Feb 2022 21:39:55 -0800 filemerge: when using in-memory merge, always put backup files in temp dir
Martin von Zweigbergk <martinvonz@google.com> [Fri, 11 Feb 2022 21:39:55 -0800] rev 48782
filemerge: when using in-memory merge, always put backup files in temp dir Before calling a merge tool, we create a backup of the local side of the merge. That file can be put in the working copy or in a temporary directory, depending on the user's config. When we're merging in memory, we don't want to write to the actual, on-disk working copy, so we write the file to the in-memory working copy instead. However, since we don't support external merge tools with in-memory merge, it makes no difference where the file is actually stored (and if we ever do add support for external merge tools, then the file clearly can't live in the in-memory working-copy object anyway). So, since it doesn't matter where the file is stored, we can simplify by always putting them in the system's temp directory. Differential Revision: https://phab.mercurial-scm.org/D12187
Tue, 15 Feb 2022 20:18:57 -0800 filemerge: remove unused `repo` argument from `_maketempfiles()`
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Feb 2022 20:18:57 -0800] rev 48781
filemerge: remove unused `repo` argument from `_maketempfiles()` I missed this in D12171. Differential Revision: https://phab.mercurial-scm.org/D12194
Tue, 15 Feb 2022 23:45:30 +0100 upgrade: make dirstate-v2 format variant compatible with share
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Feb 2022 23:45:30 +0100] rev 48780
upgrade: make dirstate-v2 format variant compatible with share This only affects the dirstate and is safe to upgrade in the share. Differential Revision: https://phab.mercurial-scm.org/D12197
Tue, 15 Feb 2022 23:09:07 +0100 upgrade: prepare code (and output) for the idea of upgrading share
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 15 Feb 2022 23:09:07 +0100] rev 48779
upgrade: prepare code (and output) for the idea of upgrading share This would work for a subset of action only. Our first target is dirstate-v2. Differential Revision: https://phab.mercurial-scm.org/D12196
Tue, 15 Feb 2022 13:32:30 -0500 sparse: add timing block for parsing sparse configs
Augie Fackler <augie@google.com> [Tue, 15 Feb 2022 13:32:30 -0500] rev 48778
sparse: add timing block for parsing sparse configs 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/D12186
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
Fri, 18 Feb 2022 12:55:39 +0100 Added signature for changeset dcec16e799dd stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 12:55:39 +0100] rev 48776
Added signature for changeset dcec16e799dd
Fri, 18 Feb 2022 12:55:20 +0100 Added tag 6.0.3 for changeset dcec16e799dd stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Feb 2022 12:55:20 +0100] rev 48775
Added tag 6.0.3 for changeset dcec16e799dd
Thu, 17 Feb 2022 20:50:04 +0000 status: fix hg status race against file deletion stable 6.0.3
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 17 Feb 2022 20:50:04 +0000] rev 48774
status: fix hg status race against file deletion Differential Revision: https://phab.mercurial-scm.org/D12202
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 48773
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 48772
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 48771
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 48770
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 48769
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 48768
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 48767
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 48766
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 48765
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 48764
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 48763
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 48762
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 48761
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 48760
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 48759
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 48758
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 48757
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 48756
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 48755
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 48754
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 48753
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 48752
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 48751
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 48750
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 48749
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
Wed, 25 Aug 2021 19:55:20 -0700 automation: use gp3 volume type stable
Gregory Szorc <gregory.szorc@gmail.com> [Wed, 25 Aug 2021 19:55:20 -0700] rev 48748
automation: use gp3 volume type This is a newer volume type. It offers a better baseline of performance by default and is ~10% cheaper. It doesn't offer burst credits. But its performance is guaranteed, unlike gp2, which had wonky performance behavior. Differential Revision: https://phab.mercurial-scm.org/D12132
Thu, 26 Aug 2021 17:47:50 -0700 automation: use m6i instances stable
Gregory Szorc <gregory.szorc@gmail.com> [Thu, 26 Aug 2021 17:47:50 -0700] rev 48747
automation: use m6i instances This instance type is much, much faster than t3 and can perform tasks much quicker. Differential Revision: https://phab.mercurial-scm.org/D12131
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 48746
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 48745
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 48744
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
Tue, 15 Feb 2022 15:52:44 +0100 copyright: it's 2022 stable
Raphaël Gomès <rgomes@octobus.net> [Tue, 15 Feb 2022 15:52:44 +0100] rev 48743
copyright: it's 2022 Differential Revision: https://phab.mercurial-scm.org/D12183
Mon, 14 Feb 2022 19:03:22 +0100 hghave: update rustfmt criterion stable
Raphaël Gomès <rgomes@octobus.net> [Mon, 14 Feb 2022 19:03:22 +0100] rev 48742
hghave: update rustfmt criterion In 9ebc10ad4a04 I updated `rustfmt` without touching hghave, which means that the CI has been skipping the format test ever since. Thankfully, only one offending line exists in the code that's been introduced since. Differential Revision: https://phab.mercurial-scm.org/D12180
Fri, 11 Feb 2022 23:43:17 +0100 dirstate-v2: fix infinite loop in pure packer stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 11 Feb 2022 23:43:17 +0100] rev 48741
dirstate-v2: fix infinite loop in pure packer Due to the naive approach to path relative-ness, some tree shapes like the one introduced in the associated test could result in the packer going into an endless loop which allocated new `Node` objects endlessly until the process was killed by Linux's OOM killer. Differential Revision: https://phab.mercurial-scm.org/D12170
Tue, 15 Feb 2022 15:33:33 +0100 contrib: refer to RHEL and derivatives instead of CentOS specifically stable
Mathias De Mare <mathias.de_mare@nokia.com> [Tue, 15 Feb 2022 15:33:33 +0100] rev 48740
contrib: refer to RHEL and derivatives instead of CentOS specifically Differential Revision: https://phab.mercurial-scm.org/D12182
Mon, 14 Feb 2022 11:32:03 +0100 packaging: replace centos8 by rockylinux 8 stable
Mathias De Mare <mathias.de_mare@nokia.com> [Mon, 14 Feb 2022 11:32:03 +0100] rev 48739
packaging: replace centos8 by rockylinux 8 Differential Revision: https://phab.mercurial-scm.org/D12172
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 48738
rust: fix code formatting Differential Revision: https://phab.mercurial-scm.org/D12173
Mon, 07 Feb 2022 00:33:22 -0500 sparse: rework debugsparse's interface
Valentin Gatien-Baron <valentin.gatienbaron@gmail.com> [Mon, 07 Feb 2022 00:33:22 -0500] rev 48737
sparse: rework debugsparse's interface hg debugsparse supports arguments like --include, similar to `hg tracked --addinclude` or `hg log --include`. But in `hg debugsparse`, the pattern is not an argument of the flag, instead the patterns are the anonymous command line arguments. Not only is this surprising, it makes it impossible to use --include and --exclude in the same invocation, or --reset --exclude. So I propose making debugsparse making --include, --exclude take an argument, and rejecting anonymous command line arguments, as well as allowing mixing several of these flags in one invocations. Differential Revision: https://phab.mercurial-scm.org/D12155
Wed, 09 Feb 2022 13:04:37 -0500 color: don't infer vt status from TERM on Windows
Mitchell Hentges <mhentges@mozilla.com> [Wed, 09 Feb 2022 13:04:37 -0500] rev 48736
color: don't infer vt status from TERM on Windows Previously, it was assumed that Windows environments with "xterm" in the TERM environment variable meant that either "virtual terminal mode" was already enabled, or that we are running in an environment that didn't need a "virtual terminal mode" (such as mintty, that interprets ANSI sequences itself). However, modern Cygwin and MSYS2 set TERM=xterm when using the Command Prompt as the terminal, which needs "virtual terminal mode" to be manually enabled. However, due to (issue6640), the vtmode wasn't being enabled. This patch ensures that we always try to enable vtmode on Windows regardless of the state of TERM, so that: * ANSI-based colors work in modern Cygwin/MSYS2 (with Command Prompt), and * The vtmode is unnecessarily set when running in a different terminal such as mintty, but it is simply redundant and doesn't appear to have ill effects. Differential Revision: https://phab.mercurial-scm.org/D12158
Thu, 10 Feb 2022 19:26:10 +0100 rhg: enable `rhg status` by default, without config or env opt-in
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 19:26:10 +0100] rev 48735
rhg: enable `rhg status` by default, without config or env opt-in The full test suite now passes with `hg` pointing to rhg. Differential Revision: https://phab.mercurial-scm.org/D12162
Tue, 08 Feb 2022 14:20:58 +0100 rhg: Colorize `rhg status` output when appropriate
Simon Sapin <simon.sapin@octobus.net> [Tue, 08 Feb 2022 14:20:58 +0100] rev 48734
rhg: Colorize `rhg status` output when appropriate Differential Revision: https://phab.mercurial-scm.org/D12168
Thu, 10 Feb 2022 12:59:32 +0100 rhg: Add support for colored output
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 12:59:32 +0100] rev 48733
rhg: Add support for colored output The same "label" system is used as in Python code Differential Revision: https://phab.mercurial-scm.org/D12167
Thu, 10 Feb 2022 13:56:43 +0100 rhg: Add parsing for the --color global CLI argument
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 13:56:43 +0100] rev 48732
rhg: Add parsing for the --color global CLI argument Differential Revision: https://phab.mercurial-scm.org/D12166
Thu, 10 Feb 2022 12:52:25 +0100 rhg: Make Ui::new falliable, add Ui::new_infallible
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 12:52:25 +0100] rev 48731
rhg: Make Ui::new falliable, add Ui::new_infallible This allows propagating color configuration errors Differential Revision: https://phab.mercurial-scm.org/D12165
Thu, 10 Feb 2022 12:12:56 +0100 rhg: Pass a &Config to Ui::new
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 12:12:56 +0100] rev 48730
rhg: Pass a &Config to Ui::new When a Ui object is needed to print errors about configuration-loading errors, an empty (default) configuration is used. Differential Revision: https://phab.mercurial-scm.org/D12164
Thu, 10 Feb 2022 11:58:04 +0100 rhg: Add support for HGPLAINEXPECT
Simon Sapin <simon.sapin@octobus.net> [Thu, 10 Feb 2022 11:58:04 +0100] rev 48729
rhg: Add support for HGPLAINEXPECT Differential Revision: https://phab.mercurial-scm.org/D12163
Thu, 10 Feb 2022 13:24:38 -0500 merge: with stable
Augie Fackler <augie@google.com> [Thu, 10 Feb 2022 13:24:38 -0500] rev 48728
merge: with stable
Wed, 09 Feb 2022 16:07:50 +0100 help: make the help for `safe-mismatch` real section stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Feb 2022 16:07:50 +0100] rev 48727
help: make the help for `safe-mismatch` real section The extra new lines mean the minirst engine were not seeing them as section… meaning they could not be addressed directly. Differential Revision: https://phab.mercurial-scm.org/D12161
Wed, 09 Feb 2022 15:44:21 +0100 help: avoid repeated value in the safe-mistmatch help stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Feb 2022 15:44:21 +0100] rev 48726
help: avoid repeated value in the safe-mistmatch help This was copy pasted and overlooked when it got in. Differential Revision: https://phab.mercurial-scm.org/D12160
Wed, 09 Feb 2022 15:43:01 +0100 help: add missing `.` in config reference stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 09 Feb 2022 15:43:01 +0100] rev 48725
help: add missing `.` in config reference The `hg help` command is still confused at the number of dots, but at least the reference is correct. Differential Revision: https://phab.mercurial-scm.org/D12159
Mon, 07 Feb 2022 12:29:43 +0300 scmutil: obsrevs is already a frozenset
Anton Shestakov <av6@dwimlabs.net> [Mon, 07 Feb 2022 12:29:43 +0300] rev 48724
scmutil: obsrevs is already a frozenset Differential Revision: https://phab.mercurial-scm.org/D12157
Mon, 07 Feb 2022 12:25:46 +0300 obsolete: always return frozensets from obsolete.getrevs()
Anton Shestakov <av6@dwimlabs.net> [Mon, 07 Feb 2022 12:25:46 +0300] rev 48723
obsolete: always return frozensets from obsolete.getrevs() getrevs function already returns an empty frozenset when there is no obsstore, but let's make sure to return a frozenset in any case. This makes it possible to use the result of this function as a dict key or provide it to hash() built-in function without any conversions. Differential Revision: https://phab.mercurial-scm.org/D12156
Wed, 26 Jan 2022 13:18:48 +0100 revlog: split revlog v1 and revlog v2 handling
pacien <pacien.trangirard@pacien.net> [Wed, 26 Jan 2022 13:18:48 +0100] rev 48722
revlog: split revlog v1 and revlog v2 handling Explicitly splitting their fields packing and unpacking makes it easier to extend the existing C implemenation to handle the new changelog format, whose fields and offsets are not simply a superset of the revlog. Differential Revision: https://phab.mercurial-scm.org/D12137
Wed, 26 Jan 2022 13:08:36 +0100 revlog: extract entry byte offsets into named constants
pacien <pacien.trangirard@pacien.net> [Wed, 26 Jan 2022 13:08:36 +0100] rev 48721
revlog: extract entry byte offsets into named constants Labelling the fields pointed by the given offsets shared by revlog v1 and v2. Differential Revision: https://phab.mercurial-scm.org/D12136
Mon, 07 Feb 2022 15:45:53 +0100 doc: inspect.getargspec has been removed in Python 3.11 stable
Mads Kiilerich <mads@kiilerich.com> [Mon, 07 Feb 2022 15:45:53 +0100] rev 48720
doc: inspect.getargspec has been removed in Python 3.11 Fixed by dropping the inspection introduced in cdda48c93676. The 2nd "reporter" parameter to docutils.languages.get_language has been available since 0.8 more than 10 years ago. Reported for Fedora on https://bugzilla.redhat.com/show_bug.cgi?id=2022252#c2 .
Mon, 07 Feb 2022 13:24:30 +0300 branchmap: split a long condition in branchcache.validfor(), add comments
Anton Shestakov <av6@dwimlabs.net> [Mon, 07 Feb 2022 13:24:30 +0300] rev 48719
branchmap: split a long condition in branchcache.validfor(), add comments Differential Revision: https://phab.mercurial-scm.org/D12138
Sun, 06 Feb 2022 19:31:39 +0300 branchmap: don't add branch entries if there are no heads
Anton Shestakov <av6@dwimlabs.net> [Sun, 06 Feb 2022 19:31:39 +0300] rev 48718
branchmap: don't add branch entries if there are no heads We definitely don't want any empty entries to be present in repo.branchmap() just for the sake of not breaking test-notify.t. No test changes required because the previous patch made notify extension to not raise any tracebacks in case of RepoLookupErrors. Differential Revision: https://phab.mercurial-scm.org/D12135
Sun, 06 Feb 2022 19:14:51 +0300 notify: don't produce errors if a revision is not found
Anton Shestakov <av6@dwimlabs.net> [Sun, 06 Feb 2022 19:14:51 +0300] rev 48717
notify: don't produce errors if a revision is not found Notify extension has a way to only subscribe to a specific revset, such as "branch(foo)". Before this patch, when there was no branch with that name, it would produce a traceback saying "unknown revision: foo". With this patch it would no longer do that, and instead it'll assume there are no revisions that match this revset. I think this patch is an improvement in general, but there's a reason I'm sending it now. test-notify.t has a test case where it obsoletes the only revision on a branch, and previously that wouldn't produce any complications, because head computation wasn't obsolescence-aware. Now if the only revision on a branch is obsolete, repo should not see that branch at all. That branch will still be present in branchcache (with an empty list of revisions) until the next patch. Differential Revision: https://phab.mercurial-scm.org/D12134
Thu, 03 Feb 2022 18:14:11 +0100 narrow: allow merging non-conflicting change outside of the narrow spec
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 03 Feb 2022 18:14:11 +0100] rev 48716
narrow: allow merging non-conflicting change outside of the narrow spec We use the mergestate to carry information about these merge action and reprocess them at commit time to apply the necessary update. The dirstate itself is never affected and remains "pure", with content only in the narrow-spec. This file involved in such merge are therefor not listed in `hg status`. The current testing is based on a modification of the previous testing, that refused to do such merges. As a result it is a bit simple and more extensive code and testing testing will have to be introduced later. I am planning to do this extra testing, soon. In addition, this only works for flat manifest. Support for tree manifest will need more work. I am not currently planning to do this work. Differential Revision: https://phab.mercurial-scm.org/D12119
Sun, 30 Jan 2022 06:01:42 +0100 merge-actions: add some information about the "changes" the action do
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 30 Jan 2022 06:01:42 +0100] rev 48715
merge-actions: add some information about the "changes" the action do This will be useful when processing merges action outside of the narrow-spec. "support" outside of narrow file on commit Differential Revision: https://phab.mercurial-scm.org/D12118
Sat, 29 Jan 2022 06:21:32 +0100 merge-actions: have an attribute for narrow safetiness
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 29 Jan 2022 06:21:32 +0100] rev 48714
merge-actions: have an attribute for narrow safetiness This allow the core doing narrow filtering to process action without explicitely listing all possible actions. This is important to make the actions system more flexible in the future. Differential Revision: https://phab.mercurial-scm.org/D12117
Fri, 28 Jan 2022 15:19:58 +0100 merge-actions: add an explicite "no_op" attribute
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 15:19:58 +0100] rev 48713
merge-actions: add an explicite "no_op" attribute This make the MergeAction smarter and able to describe themself. This is useful to help introducing more MergeAction object that better the complexity of the situation. Differential Revision: https://phab.mercurial-scm.org/D12116
Fri, 28 Jan 2022 19:46:37 +0100 merge-actions: gather all created action into a set
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 19:46:37 +0100] rev 48712
merge-actions: gather all created action into a set This is mostly to demonstrate we can do this before we start adding more specialized set. Differential Revision: https://phab.mercurial-scm.org/D12115
Fri, 28 Jan 2022 17:08:30 +0100 merge-actions: make merge action a full featured object
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 17:08:30 +0100] rev 48711
merge-actions: make merge action a full featured object This open the way for having "smarter" value as action, making the usage code simpler and more flexible. We have to explicitly use __bytes__ call in a couple of place because Python2… Differential Revision: https://phab.mercurial-scm.org/D12114
Fri, 28 Jan 2022 16:25:41 +0100 convert: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 16:25:41 +0100] rev 48710
convert: use the merge action constant The constant exists, lets use them. Otherwise we cannot make these constant more powerful. Differential Revision: https://phab.mercurial-scm.org/D12113
Fri, 28 Jan 2022 16:11:42 +0100 large-file: use the merge action constant
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 16:11:42 +0100] rev 48709
large-file: use the merge action constant The constant exists, lets use them. Otherwise we cannot make these constant more powerful. Differential Revision: https://phab.mercurial-scm.org/D12112
Fri, 28 Jan 2022 16:41:45 +0100 merge: stop using merge action for pathconflict option
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 16:41:45 +0100] rev 48708
merge: stop using merge action for pathconflict option This is not the b'r' you are looking for. Differential Revision: https://phab.mercurial-scm.org/D12111
Fri, 28 Jan 2022 14:25:51 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:51 +0100] rev 48707
merge: break up a not-so-one-liner for readability Differential Revision: https://phab.mercurial-scm.org/D12110
Fri, 28 Jan 2022 14:25:45 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:45 +0100] rev 48706
merge: break up a not-so-one-liner for readability Differential Revision: https://phab.mercurial-scm.org/D12109
Fri, 28 Jan 2022 14:25:39 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:39 +0100] rev 48705
merge: break up a not-so-one-liner for readability Differential Revision: https://phab.mercurial-scm.org/D12108
Fri, 28 Jan 2022 14:25:32 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:32 +0100] rev 48704
merge: break up a not-so-one-liner for readability Differential Revision: https://phab.mercurial-scm.org/D12107
Fri, 28 Jan 2022 14:25:05 +0100 merge: break up two not-so-one-liner for extra readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:25:05 +0100] rev 48703
merge: break up two not-so-one-liner for extra readability Differential Revision: https://phab.mercurial-scm.org/D12106
Fri, 28 Jan 2022 14:24:41 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:24:41 +0100] rev 48702
merge: break up a not-so-one-liner for readability Differential Revision: https://phab.mercurial-scm.org/D12105
Fri, 28 Jan 2022 14:24:30 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:24:30 +0100] rev 48701
merge: break up a not-so-one-liner for readability (even if not fully satisfied this time) Differential Revision: https://phab.mercurial-scm.org/D12104
Fri, 28 Jan 2022 14:23:56 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:23:56 +0100] rev 48700
merge: break up a not-so-one-liner for readability Differential Revision: https://phab.mercurial-scm.org/D12103
Fri, 28 Jan 2022 14:23:49 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:23:49 +0100] rev 48699
merge: break up a not-so-one-liner for readability Differential Revision: https://phab.mercurial-scm.org/D12102
Fri, 28 Jan 2022 14:23:37 +0100 merge: break up a not-so-one-liner for readability
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 28 Jan 2022 14:23:37 +0100] rev 48698
merge: break up a not-so-one-liner for readability Differential Revision: https://phab.mercurial-scm.org/D12101
Thu, 03 Feb 2022 06:49:48 +0100 phabricator-refresh: add a magic value to skip it in the CI
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 03 Feb 2022 06:49:48 +0100] rev 48697
phabricator-refresh: add a magic value to skip it in the CI When maintaining (light) fork, it is useful to be able to disable this. Differential Revision: https://phab.mercurial-scm.org/D12133
Thu, 27 Jan 2022 20:04:56 +0300 interfaces: add missing caches kwarg of localrepo.updatecaches()
Anton Shestakov <av6@dwimlabs.net> [Thu, 27 Jan 2022 20:04:56 +0300] rev 48696
interfaces: add missing caches kwarg of localrepo.updatecaches() Added to localrepo: in 1337bfaa88ca, added to the interface: now. Differential Revision: https://phab.mercurial-scm.org/D12092
Mon, 31 Jan 2022 18:05:36 +0300 obsolete: don't import from .node twice
Anton Shestakov <av6@dwimlabs.net> [Mon, 31 Jan 2022 18:05:36 +0300] rev 48695
obsolete: don't import from .node twice See d55b71393907. Differential Revision: https://phab.mercurial-scm.org/D12121
Mon, 31 Jan 2022 18:04:11 +0300 dagop: don't import nullrev from .node twice
Anton Shestakov <av6@dwimlabs.net> [Mon, 31 Jan 2022 18:04:11 +0300] rev 48694
dagop: don't import nullrev from .node twice See 59fa3890d40a. Differential Revision: https://phab.mercurial-scm.org/D12120
Thu, 27 Jan 2022 22:24:11 +0100 stream-clone: allow to change persistent-nodemap format during stream clone
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Jan 2022 22:24:11 +0100] rev 48693
stream-clone: allow to change persistent-nodemap format during stream clone Persistent nodemap affect the store format. However it is fairly isolated and fast to generate locally. So not making it a fixed part of the stream clone is useful. This allow clients without persistent-nodemap support (default for client without Rust enabled, or simply older client). So it make it possible to enable persistent nodemap on client, where it can provide a massive boost. without too much consequence. To do so, we stop using it in the advertisement requirements for streaming and let the client add/remove the necessary file depending of its configuration. We still send the files as it seems like a small save to not regenerate them. In addition, the way we match them will overlap with the changelog-v2/revlog-v2 so we can't simply skip the associated patterns. Differential Revision: https://phab.mercurial-scm.org/D12096
Thu, 27 Jan 2022 15:22:09 +0100 stream-clone: add 5000 changesets to test-clone-stream-format
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Jan 2022 15:22:09 +0100] rev 48692
stream-clone: add 5000 changesets to test-clone-stream-format This make sure the changelog is not inlined. We needs this to test coming behavior change around persistent-nodemap. Differential Revision: https://phab.mercurial-scm.org/D12095
Thu, 27 Jan 2022 15:22:04 +0100 debugbuilddag: add a flag to allow running it from a non-empty repository
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Jan 2022 15:22:04 +0100] rev 48691
debugbuilddag: add a flag to allow running it from a non-empty repository Allow that by default seems "dangerous", but having a flag to make it possible will be useful to help building some repository incrementally. The newly introduced support is basic, but already useful. Differential Revision: https://phab.mercurial-scm.org/D12094
Thu, 27 Jan 2022 17:04:40 +0100 persistent-nodemap: properly delete all nodemap files on downgrade
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 27 Jan 2022 17:04:40 +0100] rev 48690
persistent-nodemap: properly delete all nodemap files on downgrade Previously, we were only deleting the docket file… Differential Revision: https://phab.mercurial-scm.org/D12093
Sat, 15 Jan 2022 09:08:41 +0300 destutil: if wdp is obsolete, update to the closest non-obsolete ancestor
Anton Shestakov <av6@dwimlabs.net> [Sat, 15 Jan 2022 09:08:41 +0300] rev 48689
destutil: if wdp is obsolete, update to the closest non-obsolete ancestor As the original comments suggest, using prune as a model here was an existing idea, and now this patch implements it. I think it would be even better to do what solveobswdp() from evolve does (in short, it allows to update to a successor of the closest ancestor even if that ancestor is obsolete), but that is outside of this series' scope. Differential Revision: https://phab.mercurial-scm.org/D12099
Tue, 04 Jan 2022 23:38:39 +0300 discovery: port _postprocessobsolete() changes from evolve, add tests
Anton Shestakov <av6@dwimlabs.net> [Tue, 04 Jan 2022 23:38:39 +0300] rev 48688
discovery: port _postprocessobsolete() changes from evolve, add tests Let's make this function obsolescence-aware as well. Now we check that revisions are not obsolete first, and only then check that they are going to be common after exchange. The tests make sure that rewriting changesets doesn't confuse head computation. They rely on experimental.single-head-per-branch feature to show that remote correctly sees the expected result (i.e. either aborts the push or allows it to succeed). They are ported from evolve as well. Differential Revision: https://phab.mercurial-scm.org/D12098
Fri, 07 Jan 2022 11:53:23 +0300 branchmap: skip obsolete revisions while computing heads
Anton Shestakov <av6@dwimlabs.net> [Fri, 07 Jan 2022 11:53:23 +0300] rev 48687
branchmap: skip obsolete revisions while computing heads It's time to make this part of core Mercurial obsolescence-aware. Not considering obsolete revisions when computing heads is clearly what Mercurial should do. But there are a couple of small issues: - Let's say tip of the repo is obsolete. There are two ways of finding tiprev for branchcache (both are in use): looking at input data for update() and looking at computed heads after update(). Previously, repo tip would be tiprev of the branchcache. With this patch, an obsolete revision can no longer be tiprev. And depending on what way we use for finding tiprev (input data vs computed heads) we'll get a different result. This is relevant when recomputing cache key from cache contents, and may lead to updating cache for obsolete revisions multiple times (not from scratch, because it still would be considered valid for a subset of revisions in the repo). - If all commits on a branch are obsolete, the branchcache will include that branch, but the list of heads will be empty (that's why there's now `if not heads` when recomputing tiprev/tipnode from cache contents). Having an entry for every branch is currently required for notify extension (and test-notify.t to pass), because notify doesn't handle revsets in its subscription config very well and will throw an error if e.g. a branch doesn't exist. - Cloning static HTTP repos may try to stat() a non-existent obsstore file. The issue is that we now care about obsolescence during clone, but statichttpvfs doesn't implement a stat method, so a regular vfs.stat() is used, and it assumes that file is local and calls os.stat(). During a clone, we're trying to stat() .hg/store/obsstore, but in static HTTP case we provide a literal URL to the obsstore file on the remote as if it were a local file path. On windows it actually results in a failure in test-static-http.t. The first issue is going to be addressed in a series dedicated to making sure branchcache is properly and timely written on disk (it wasn't perfect even before this patch, but there aren't enough tests to demonstrate that). The second issue will be addressed in a future patch for notify extension that will make it not raise an exception if a branch doesn't exist. And the third one was partially addressed in the previous patch in this series and will be properly fixed in a future patch when this series is accepted. filteredhash() grows a keyword argument to make sure that branchcache is also invalidated when there are new obsolete revisions in its repo view. This way the on-disk cache format is unchanged and compatible between versions (although it will obviously be recomputed when switching versions before/after this patch and the repo has obsolete revisions). There's one test that uses plain `hg up` without arguments while updated to a pruned commit. To make this test pass, simply return current working directory parent. Later in this series this code will be replaced by what prune command does: updating to the closest non-obsolete ancestor. Test changes: test-branch-change.t: update branch head and cache update message. The head of default listed in hg heads is changed because revision 2 was rewritten as 7, and 1 is the closest ancestor on the same branch, so it's the head of default now. The cache invalidation message appears now because of the cache hash change, since we're now accounting for obsolete revisions. Here's some context: "served.hidden" repo filter means everything is visible (no filtered revisions), so before this series branch2-served.hidden file would not contain any cache hash, only revnum and node. Now it also has a hash when there are obsolete changesets in the repo. The command that the message appears for is changing branch of 5 and 6, which are now obsolete, so the cache hash changes. In general, when cache is simply out-of-date, it can be updated using the old version as a base. But if cache hash differs, then the cache for that particular repo filter is recomputed (at least with the current implementation). This is what happens here. test-obsmarker-template.t: the pull reports 2 heads changed, but after that the repo correctly sees only 1. The new message could be better, but it's still an improvement over the previous one where hg pull suggested merging with an obsolete revision. test-obsolete.t: we can see these revisions in hg log --hidden, but they shouldn't be considered heads even with --hidden. test-rebase-obsolete{,2}.t: there were new heads created previously after making new orphan changesets, but they weren't detected. Now we are properly detecting and reporting them. test-rebase-obsolete4.t: there's only one head now because the other head is pruned and was falsely reported before. test-static-http.t: add obsstore to the list of requested files. This file doesn't exist on the remotes, but clients want it anyway (they get 404). This is fine, because there are other nonexistent files that clients request, like .hg/bookmarks or .hg/cache/tags2-served. Differential Revision: https://phab.mercurial-scm.org/D12097
Fri, 28 Jan 2022 19:07:52 +0300 obsolete: make sure windows tests pass when stat() is given a URL
Anton Shestakov <av6@dwimlabs.net> [Fri, 28 Jan 2022 19:07:52 +0300] rev 48686
obsolete: make sure windows tests pass when stat() is given a URL This is a temporary fix for an issue that's only visible on windows, but exists on other platforms as well. The issue is if we're trying to use obsstore from a remote peer and that peer is a static HTTP repo, vfs tries to os.stat() a remote file using a URL to that file (e.g. http://localhost/repo/.hg/store/obsstore). The next patch in this series makes branchcache obsolescence-aware, so in certain situations exchange process will try os.stat()ing a URL. On windows this will produce an OSError that is not ENOENT, but EINVAL instead (because of `:` symbol, for example). Differential Revision: https://phab.mercurial-scm.org/D12100
(0) -30000 -10000 -3000 -1000 -120 +120 +1000 tip