Martin von Zweigbergk <martinvonz@google.com> [Mon, 18 Apr 2022 20:45:38 -0700] rev 48841
amend: don't remove unselected removals from memctx
When there are removed files in the working copy and they are not
selected to be amended into the parent, the `filectxfn` we create for
the `memctx` would still return `None` before this patch. That's
clearly incorrect; we should return the `filectx` from the unamended
commit. Somehow it seems to not matter much except for the case with
copies stored in changesets.
Thanks to Kyle Lippincott for doing all the debugging and identifying
the fix for this issue.
Differential Revision: https://phab.mercurial-scm.org/D12573
Martin von Zweigbergk <martinvonz@google.com> [Mon, 18 Apr 2022 20:39:31 -0700] rev 48840
tests: demonstrate crash on partial amend with copies in changesets
See the fix in the next patch for explanation.
Differential Revision: https://phab.mercurial-scm.org/D12572
Kyle Lippincott <spectral@google.com> [Wed, 13 Apr 2022 12:14:17 -0700] rev 48839
rebase: while rewriting desc hashes, ignore ambiguous prefix "hashes"
If a repo is sufficiently large, a six digit number "hash prefix" can somewhat
easily reference an ambiguous hash prefix.
Differential Revision: https://phab.mercurial-scm.org/D12552
Kyle Lippincott <spectral@google.com> [Wed, 13 Apr 2022 13:15:33 -0700] rev 48838
tests: add test demonstrating issue with ambiguous has prefixes during rebase
Differential Revision: https://phab.mercurial-scm.org/D12551
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 07 Apr 2022 15:53:48 +0200] rev 48837
help: set the large-file-limit to 10MB
This is a minor increase (5%) and makes the doc much clearer.
Differential Revision: https://phab.mercurial-scm.org/D12484
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 07 Apr 2022 15:46:07 +0200] rev 48836
help: clarify the unit of `ui.large-file-limit` config
Its might be a bit confusing, especially since `large-file.min-size` uses MB.
Differential Revision: https://phab.mercurial-scm.org/D12483
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:39:15 +0200] rev 48835
debuglock: ignore ENOENT error when unlocking
This is consistent with the main `lock.release` code.
Differential Revision: https://phab.mercurial-scm.org/D12481
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:50:20 +0200] rev 48834
run-tests: introduce "forward-slash" version of everything on windows
This should be useful for some shell invocation.
Differential Revision: https://phab.mercurial-scm.org/D12480
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 06 Apr 2022 18:44:21 +0200] rev 48833
tests-racy-mutation: pass the editor through config instead of env variable
On Windows msys seems to do awful mangling of the environment variable content
that confuses everything to the death. Going through the config works fine, so
we do that instead.
Differential Revision: https://phab.mercurial-scm.org/D12479
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 17:19:29 +0200] rev 48832
Added signature for changeset 5bd6bcd31dd1
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 17:19:22 +0200] rev 48831
Added tag 6.1.1 for changeset 5bd6bcd31dd1
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 17:11:36 +0200] rev 48830
relnotes: add notes for 6.1.1
This also fixes the header for 6.1 from 6.1rc0
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48829
rust-hgpath: add `repr(transparent)` to `HgPath`
It's been stabilized a long time ago, so let's not rely on an implementation
detail now.
Differential Revision: https://phab.mercurial-scm.org/D12433
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48828
rust-dirstatemap: correctly decrement the copies counter
This was caught when writing unit tests for the `DirstateMap`. We were always
setting `had_copy_source` to `false` since we erased the value just before.
Differential Revision: https://phab.mercurial-scm.org/D12432
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48827
rust-dirstatemap: properly decrement counter for tracked descendants
I found this bug when writing unit tests after the fact for the `DirstateMap`.
We never decremented the tracked descendants counter since we were always
resetting the node data before reading it. This also drops the use of `state`,
in favor of the new API to get that information.
Differential Revision: https://phab.mercurial-scm.org/D12431
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48826
rust-dirstate: panic if the DirstateMap counters go below 0
When modifying the API I hit some... interesting errors (trying to allocate
178GB of RAM, for example) because I failed to keep the counters correctly
updated.
This counter underflow is likely to happen when code is changed around
and can have up to eat-your-dirstate level of consequences, which is not nice.
The very small runtime cost of checking these counters should really not be an
issue and will help us uncover bugs when/if they do appear in the future.
Differential Revision: https://phab.mercurial-scm.org/D12430
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:28 +0200] rev 48825
rust: fix unsound `OwningDirstateMap`
As per the previous patch, `OwningDirstateMap` is unsound. Self-referential
structs are difficult to implement correctly in Rust since the compiler is
free to move structs around as much as it wants to. They are also very rarely
needed in practice, so the state-of-the-art on how they should be done within
the Rust rules is still a bit new.
The crate `ouroboros` is an attempt at providing a safe way (in the Rust sense)
of declaring self-referential structs. It is getting a lot attention and was
improved very quickly when soundness issues were found in the past: rather than
relying on our own (limited) review circle, we might as well use the de-facto
common crate to fix this problem. This will give us a much better chance of
finding issues should any new ones be discovered as well as the benefit of
fewer `unsafe` APIs of our own.
I was starting to think about how I would present a safe API to the old struct
but soon realized that the callback-based approach was already done in
`ouroboros`, along with a lot more care towards refusing incorrect structs.
In short: we don't return a mutable reference to the `DirstateMap` anymore, we
expect users of its API to pass a `FnOnce` that takes the map as an argument.
This allows our `OwningDirstateMap` to control the input and output lifetimes
of the code that modifies it to prevent such issues.
Changing to `ouroboros` meant changing every API with it, but it is relatively
low churn in the end. It correctly identified the example buggy modification of
`copy_map_insert` outlined in the previous patch as violating the borrow rules.
Differential Revision: https://phab.mercurial-scm.org/D12429
Raphaël Gomès <rgomes@octobus.net> [Tue, 05 Apr 2022 10:55:27 +0200] rev 48824
rust: explain why the current `OwningDirstateMap` is unsound
See inline comments.
Differential Revision: https://phab.mercurial-scm.org/D12428
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Fri, 01 Apr 2022 12:46:58 -0400] rev 48823
dispatch: fix silly blackbox entries when hg is interrupted
When hg is interrupted, it creates ui.log like this:
1970/01/01 00:00:00 user @0000000000000000000000000000000000000000 (62488)> killed!
exited 255 after 1.78 seconds
This is due to a scoping problem: two different uses of the name "msg"
collide. So rename one of them.
Differential Revision: https://phab.mercurial-scm.org/D12427
Sushil khanchi <sushilkhanchi97@gmail.com> [Fri, 23 Jul 2021 13:42:12 +0530] rev 48822
precheck: fix false warning about content-divergence creation
Before this patch, if we try to `hg prune` (without any successors) an
already obsoleted cset which has at least one successor, it would false
warn about new content-divergence. As we know, pruning cset without any
successors can not create any divergence.
Differential Revision: https://phab.mercurial-scm.org/D12002
Valentin Gatien-Baron <vgatien-baron@janestreet.com> [Thu, 24 Mar 2022 12:27:21 -0400] rev 48821
streamclone: avoid some obscure error in a corner case
I don't really know how, but I ran into this error:
$ hg clone --stream ssh://user@dummy/empty-repo local-empty-repo
streaming all changes
abort: unable to apply stream clone: unsupported format:
[255]
I think you need an empty list of requirements for this to happen,
which is weird, but an obscure error like this is not exactly helpful
either. Since this is the result of an encoding bug anyway, just fix
it.
Differential Revision: https://phab.mercurial-scm.org/D12402
Yuya Nishihara <yuya@tcha.org> [Tue, 29 Mar 2022 18:15:49 +0900] rev 48820
tags: fix typo in fast path detection of fnode resolution (issue6673)
If I understand it, mctx.readfast() is unreliable here if p1/p2 .hgtags
nodes differ, and tags on that branch would be randomly discarded
depending on which parent were picked.
The test case added by this patch would fail only on zstd-compressed
repository. I didn't try hard to stabilize the failure case.
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Mar 2022 17:24:41 +0200] rev 48819
dirstate-cext: properly invalidate mtime and data in `set_untracked`
This was forgotten about in the initial implementation and was revealed while
adding the `dirstate-v2` variant of `test-issue660.t`. Neither the existing
Python implementation nor the upcoming Rust implementation suffer from this
bug since they respectively have `None` and `Option<T>` to represent the lack
of information.
Differential Revision: https://phab.mercurial-scm.org/D12414
Joerg Sonnenberger <joerg@bec.de> [Tue, 22 Mar 2022 03:19:01 +0100] rev 48818
pullbundle: fix file name in the help text
It is pullbundles.manifest and not pullbundle.manifest.
Differential Revision: https://phab.mercurial-scm.org/D12391
Martin von Zweigbergk <martinvonz@google.com> [Mon, 21 Mar 2022 14:21:10 -0700] rev 48817
unamend: abort if commit was not created by `hg [un]amend`
`hg unamend` can currently undo any kind of rewrite, as long as it has
an obsmarker. However, that has quite unexpected results if you run it
after e.g. `hg rebase` (expecting it to behave like a generic `hg
undo` command), because it updates to the predecessor and leaves the
old changes in the working copy. I think it's better to allow `hg
unamend` only after `hg amend` (and after `hg unamend` because that's
documented as being supported).
Differential Revision: https://phab.mercurial-scm.org/D12390
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 17 Mar 2022 14:58:46 +0100] rev 48816
test: use `wait-on-file` in `test-racy-mutations.t`
The official utility scale its timeout with the run-tests.py one. So lets use
it.
Differential Revision: https://phab.mercurial-scm.org/D12382
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Mar 2022 21:15:54 -0700] rev 48815
amend: fix amend with copies in extras
If copy information is stored only in the commit extras and not in
filelogs, then they get lost on amend if the file wasn't also modified
in the working copy. That's because we create `filectx` object from
the old commit in those cases, and the `.copysource()` of such objects
read only from the filelog. This patch fixes it by always creating a
new `memfilectx` in these cases, passing the calculated copy
information to it.
Differential Revision: https://phab.mercurial-scm.org/D12387
Martin von Zweigbergk <martinvonz@google.com> [Fri, 18 Mar 2022 21:37:22 -0700] rev 48814
tests: demonstrate that copy info in changeset gets lost on amend
When copy information is stored in changesets, it gets lost on
amend. We didn't notice that until now because our users at Google
have the config set to `compatibility`, which means copy information
is stored in both changeset and filelogs.
Differential Revision: https://phab.mercurial-scm.org/D12386
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 18 Mar 2022 18:09:46 +0100] rev 48813
ci: use the `v1.0` flavor of the docker images in the CI
This new versioning will help us to maintain backward compatibility in the
docker image. This will be useful to deal with mismatch between default/stable
in version and the re-run CI on older changesets in the future.
Once this changeset land on stable, we will have to merge it in default. Then
we can start make backward incompatible changes in a new image version.
Differential Revision: https://phab.mercurial-scm.org/D12388
Raphaël Gomès <rgomes@octobus.net> [Fri, 18 Mar 2022 16:15:44 +0100] rev 48812
rust-status: cap the number of concurrent threads to 16
During benchmarking it was determined that the use of more threads is very
advantageous... until we use more than 16. This is most likely due to some
resource contention (thrashing, etc.). Until we have time to figure out and
fix the underlying cause, let's just cap at 16 threads.
Differential Revision: https://phab.mercurial-scm.org/D12384
Julien Cristau <jcristau@debian.org> [Tue, 15 Mar 2022 14:45:47 +0100] rev 48811
test: update test-clone-stream.t to pass on bigendian
Fixes: a3cf460a6b1b ("stream-clone: also filter the requirement we put in the bundle 2")
Differential Revision: https://phab.mercurial-scm.org/D12377
Martin von Zweigbergk <martinvonz@google.com> [Tue, 15 Mar 2022 13:31:39 -0700] rev 48810
filemerge: when merge tool uses $output, don't leave markers in $local
As explained in the previous patch, we incorrectly leave conflict
markers in both `$local` and `$output` since D12190. I don't
understand why it broke but the fix is simple and clear after all the
recent refactoring.
Differential Revision: https://phab.mercurial-scm.org/D12379