Raphaël Gomès <rgomes@octobus.net> [Mon, 27 Feb 2023 15:18:50 +0100] rev 50225
rhg: fix race when a fixup file is deleted on disk
See next changeset for the other race in the same kind of logic and why
there are two different places.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 25 Feb 2023 06:11:14 +0100] rev 50224
dirstate: test a `hg status` raced by a `hg remove`
This shows that `rhg` is misbehaving here.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Feb 2023 01:19:37 +0100] rev 50223
dirstate: tests racing status with both dirstate-v2 append and rewrite
The way the racing process touches the dirstate results in different challenges
for the raced process.
We now test each variant in the `test-dirstate-status-race.t` tests.
Raphaël Gomès <rgomes@octobus.net> [Tue, 28 Feb 2023 15:49:53 +0100] rev 50222
dirstate-v2: add devel config option to control write behavior
This will help us to write predictable tests checking behavior in each case.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Feb 2023 18:21:54 +0100] rev 50221
dirstate: use more than a bool to control append behavior
When writing dirstate-v2, we might either append to the existing file, or
create a new file.
We are about to introduce some configuration to control this behavior.
As a prelude, we change the current way the behavior was automatically
controlled to make the change smaller/clearer.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Feb 2023 01:15:45 +0100] rev 50220
dirstate: cover each dirstate version when testing for status race
Previously we were only testing it with the default (dirstate-v1 currently).
Now we explicitly test each variant.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Feb 2023 01:09:11 +0100] rev 50219
dirstate: test a `hg status` raced by another `hg status`
This shows that `rhg` is misbehaving here.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Feb 2023 01:01:04 +0100] rev 50218
dirstate: test a `hg status` raced by a `hg update`
This shows that `rhg` is misbehaving here.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Feb 2023 00:55:13 +0100] rev 50217
dirstate: test a `hg status` raced by a `hg commit`
This shows that `rhg` is misbehaving here.
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Feb 2023 16:12:01 +0100] rev 50216
dirstate: test a `hg status` raced by a `hg add`
This shows that `rhg` is misbehaving here.
Raphaël Gomès <rgomes@octobus.net>, Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 28 Feb 2023 15:25:47 +0100] rev 50215
dirstate: add a way to test races happening during status
We add the `devel.sync.status.pre-dirstate-write-file` config option to easily
test what happens when other operations happen during the window where
`hg status` is done working but has not updated the cache on disk yet.
We introduce the framework for testing such races too, actual tests will be
added in the next changesets. For now the test is only checking dirstate-v1. We
will extend the test coverage later too.
Check test documentation for details.
Code change from Raphaël Gomès <rgomes@octobus.net>
Test change from Pierre-Yves David <pierre-yves.david@octobus.net>
Raphaël Gomès <rgomes@octobus.net> [Tue, 28 Feb 2023 00:01:41 +0100] rev 50214
testing: introduce util function to synchronize concurrent commands on files
This is an extension of mechanisms that the tests have been using for a while.
To be able to also control the execution in Rust, we introduce utility to
perform such `wait_on_file` logic based on some configuration value.
This will be used in the tests introduced in the next changesets.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 28 Feb 2023 11:44:52 -0500] rev 50213
hghave: drop py27 and py35 support
These versions of python are no longer supported by Mercurial.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 28 Feb 2023 11:41:50 -0500] rev 50212
hghave: byteify a path passed to a core API
It looks like this predicate isn't used at all(?)
Raphaël Gomès <rgomes@octobus.net> [Tue, 28 Feb 2023 00:04:32 +0100] rev 50211
dirstate: add some debug output when writing the dirstate
This helps debugging Mercurial behavior in the dirstate-v2 case.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 31 Jan 2023 13:16:39 +0100] rev 50210
run-tests: make it possible to nest conditionals
This is not that hard to implement and makes our life easier on a regular basis.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 27 Feb 2023 18:24:29 +0000] rev 50209
rust: box ConfigValueParseError to avoid large result types
clippy emits a warning that all the Result types are way too large
because of HgError includes ConfigValueParseError as one of the variants,
so its size is 136 bytes.
By boxing ConfigValueParseError we're hopefully making everything faster
"for free".
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Feb 2023 02:08:11 +0100] rev 50208
dirstate: drop `identity` from the public API
We no longer needs it.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 15:32:27 +0100] rev 50207
delta-find: rename `delta-reuse-policy` to `pulled-delta-reuse-policy`
This make it clearer which type of delta we are talking about.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 15:27:42 +0100] rev 50206
config-item: declare undeclared path suboption
This should prevent issue like the previous commit.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 15:26:43 +0100] rev 50205
delta-find: declare the "paths..*:delta-reuse-policy option
While looking into renaming the option I realized it was not declared.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 15:16:40 +0100] rev 50204
delta-find: adjust the default candidate group chunk size
We move from 10 to 20 as the default as some usage in the wild saw a small
degradation in storage quality when using `10`.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Feb 2023 10:27:21 +0100] rev 50203
record: extract a closure to the module level
This clean up is almost as gratuituous as this closure was.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Feb 2023 10:16:25 +0100] rev 50202
record: drop a now useless overlay that grab the lock
Since
28dfb2df4ab9, commit grab the wlock and the extra layer grabing the lock
in record is no longer needed.
We clean up the code to make this simpler (and add a small assert for extra
security against future change).
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 24 Feb 2023 03:03:54 +0100] rev 50201
bundlerepo: fix string interpolation
Matt Harbison is saying we cannot `%s` a type into a byte string and that seems
reasonable.
Matt Harbison <matt_harbison@yahoo.com>, Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 23:05:51 +0100] rev 50200
bundlerepo: apply phase data stored in the bundle instead of assuming `draft`
The phase information contained in the changegroup part and the explicit
`phase-heads` part are now taken in account.
Initial changes and test by Matt Harbison, code rework by Pierre-Yves David.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 19:07:58 +0100] rev 50199
bundlerepo: handle changegroup induced phase movement in the associated method
These movement comes from handling the changegroup part, so we keeps the code
grouped. This will be important when handling more part (and more changegroup
part in the future)
This induce a small code duplication, but it does not looks terrible.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 19:06:24 +0100] rev 50198
bundlerepo: move most attribute declaration earlier in __init__
The expected attribute are clearer this way. The bundle handling code is responsible for setting most of it.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 19:04:44 +0100] rev 50197
bundlerepo: move the handling of bundl1 in its own method
This should make the overall flow simpler to follow.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 19:02:01 +0100] rev 50196
bundlerepo: expliclty handing cg part from bundle2
We will handle other types of parts soon (phase-heads) so we need some cleanup
first.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 15:37:46 +0100] rev 50195
transaction: use the standard transaction mechanism to backup branch
Branch is a bit special :
- It currently does not collaborate with the transaction (or any scoping) for
writing (this is bad)
- It can change without the lock being taken (it is protected by `wlock`)
So we rely on the same mechanism as for the backup of the other dirstate file:
- we only do a backup if we hold the wlock
- we force a backup though the transaction
Since "branch" write does not collaborate with the transaction, we cannot back
it up "at the last minute" as we do for the dirstate. We have to back it up
"upfront". Since we have a backup, the transaction is no longer doing its
"quick_abort" and get noisy. Which is quite annoying. To work around this, and
to avoid jumping in yet-another-rabbit-hole of "getting branch written
properly", I am doing horrible things to the transaction in the meantime.
We should be able to get this code go away during the next cycle.
In the meantime, I prefer to take this small stop so that we stop abusing the
"journal" and "undo" mechanism instead of the proper backup mechanism of the
transaction.
Also note that this change regress the warning message for the legacy fallback
introduced in 2008 when
issue902 got fixed in
dd5a501cb97f (Mercurial 1.0).
I feel like this is fine as issue 902 remains fixed, and this would only affect
people deploying a mix of 15 year old Mercurial and modern mercurial, and using
branch and rollback extensively.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 04:53:34 +0100] rev 50194
transaction: no longer explicitly cache bookmarks
The transaction file generation is already dealing with the backup for this.
So, no need to duplicate such backup.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Feb 2023 18:58:02 +0100] rev 50193
transaction: no longer explicitly cache phaseroots
The transaction file generation is already dealing with the backup for this.
So, no need to duplicate such backup.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 04:28:24 +0100] rev 50192
narrow: enforce that narrow spec is written within a transaction
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 04:42:17 +0100] rev 50191
narrow: write the narrow spec in a transaction during share
It will be simpler if all write happens within transaction.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 04:36:19 +0100] rev 50190
narrow: open the transaction sooner when unbundling
That way, the narrow spec changes will be done within a transaction.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 04:35:16 +0100] rev 50189
narrow: write the narrow spec in a transaction during clone
It will be simpler if all write happens within transaction.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 03:28:44 +0100] rev 50188
narrow: drop the dedicated backup code
Now that the transaction manage the writes, we can simply use the transaction for backup.
Some extra cleanup to ensure all changes happens within a transaction will be
made in the next changesets.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 03:25:44 +0100] rev 50187
narrow: delegate the dirstate's narrow spec writing to the transaction
This make it more transactional and will help us to simplify their backup.
The implementation is not great, but it keep the patch simple as this is not the
time for a larger refactoring yet.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 04:15:16 +0100] rev 50186
narrow: delegate the narrow spec writing to the transaction
This make it more transactional and will help us to simplify their backup.
The implementation is not great, but it keep the patch simple as this is not the
time for a larger refactoring yet.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 04:02:38 +0100] rev 50185
narrow: get the narrow patterns from the repository object instead of disk
Relying on disk data make the transactionally of this change complicated, so
let us start reading data from other API instead.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 00:12:53 +0100] rev 50184
narrow: widden the lock context in `tracking`
The tracking configuration we modify must be read under lock. So we grab the
lock sooner.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 23 Feb 2023 03:49:29 +0100] rev 50183
narrow: move `only_show` handling sooner in `tracked`
This will help us to improve the locking scope in the `tracked` command.
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 24 Feb 2023 13:23:15 +0000] rev 50182
tests: in test-fncache.t, be more tolerant to the "Killed" message format
For example, on my box I'm seeing:
$TESTTMP.sh: line 250: $pid Killed hg ci -qAm z
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 23 Feb 2023 23:25:28 +0100] rev 50181
convert: use a priority queue for sorting commits, to make sorting faster
To achieve this, we turn commit sorters into classes so they can
encapsulate state.
This reduces the sorting time from ~30s to ~10s on a 500k-commit
prefix of a repo I tried to convert. (and probably reduces the time
to sort the whole repo from many tens of minutes to minutes, but I
didn't try that again)
The date caching gets removed because priority queue already
caches the key.
Raphaël Gomès <rgomes@octobus.net> [Mon, 28 Nov 2022 12:33:20 +0100] rev 50180
dirstate-v2: don't mmap the data file when on NFS
`mmap` on NFS will trigger a SIGBUS when the mmap'ed file is deleted, which
wouldn't work in our case. Also, the performance advantage of using mmap on
NFS is debatable at best.
Raphaël Gomès <rgomes@octobus.net> [Thu, 08 Dec 2022 16:38:39 +0100] rev 50179
rust-dirstate: trace append/no append to help debugging
Raphaël Gomès <rgomes@octobus.net> [Mon, 12 Dec 2022 16:38:05 +0100] rev 50178
rust: add debug log about skipping dirstate update
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 15:17:48 +0100] rev 50177
test-dirstate: use more robust method to trigger a data-file append
The previous method was fragile and somewhat flaky on fast machines.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 21 Feb 2023 13:26:07 -0500] rev 50176
typing: add the return type hint to pycompat.rangelist()
Not bothering with the args, because there are a few overloads and only 2
callers in the codebase, one of which is a test.
Matt Harbison <matt_harbison@yahoo.com> [Tue, 21 Feb 2023 13:24:12 -0500] rev 50175
typing: add type hints to pycompat.maplist()
The typeshed hints define 5 overloads with an increasing number of parameters on
the passed function, and then a catchall that ignores the argument list on the
passed function and allows an `*iterators` arg. All of our uses are fulfilled
by the 1 function + 1 iterable overload, but add the second overload as a hint
in case it's needed in the future.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Feb 2023 18:42:09 +0100] rev 50174
branching: merge stable into default
This show that the recent changes on default fixed the issue with transaction
overwriting content in `test-transaction-wc-rollback-race.t`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Feb 2023 18:10:26 +0100] rev 50173
transaction: tests we don't overwrite bookmark activation on abort
We actually do not! Great.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Feb 2023 18:09:12 +0100] rev 50172
transaction: tests we don't overwrite updates on abort
spoiler: we do… /o\
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Feb 2023 18:07:34 +0100] rev 50171
transaction: tests we don't overwrite branch changes on abort
We actually do not! Great.
…Why are doing a backup of the `branch` files at transaction creation then‽
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 22 Feb 2023 18:05:36 +0100] rev 50170
transaction: tests we don't overwrite tracking to changed file on abort
spoiler: we do…