Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Dec 2022 02:54:06 +0100] rev 50054
dirstate: use `dirstate.change_files` to scope the change in `shelve`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Dec 2022 03:04:58 +0100] rev 50053
dirstate: use `dirstate.change_files` to scope the change in `unshelve`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Dec 2022 06:22:23 +0100] rev 50052
shelve: adjust what happens in some `changing_parents` context
It seems like the rest is more about changing tracked_files, so we let start
with moving them out of the `changing_parents` contexts.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 23:29:30 +0100] rev 50051
dirstate: use `dirstate.change_files` to scope the change in `lfconvert`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 12:09:52 +0100] rev 50050
largefiles: rely on main scoping for writing dirstate in `markcommitted`
Yeah, cleaner code.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 12:05:23 +0100] rev 50049
largefiles: rely on main scoping for writing dirstate in `mergeupdate`
Yeah, cleaner code.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 04 Feb 2023 16:54:46 +0100] rev 50048
largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Now that context open on the main dirstate also affect the underlying one, we
can skip opening our own in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Dec 2022 00:46:58 +0100] rev 50047
dirstate: use wlock and `dirstate.change_files` to scope the change in `mq`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:51:26 +0100] rev 50046
subrepo: use `changing_files` context in subrepository code
This is better, not ideal, but better.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 04 Feb 2023 12:14:19 +0100] rev 50045
subrepo: let black expand some call on multiple lines early
newer version of black are righfully doing this, so I apply it before more
semantic change to reduce noise in the next changeset.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Dec 2022 00:43:24 +0100] rev 50044
dirstate: use `dirstate.change_files` to scope the change in `import`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Dec 2022 00:52:06 +0100] rev 50043
dirstate: use `dirstate.change_files` to scope the change in `automv`
This is... mostly... the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Dec 2022 00:47:22 +0100] rev 50042
dirstate: use `dirstate.change_files` to scope the change in `amend`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:46:46 +0100] rev 50041
dirstate: use the `changing_files` context in the `keyword` demo
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:56:26 +0100] rev 50040
dirstate: wrap repository change in appropriate context in `test-context`
We need the `wlock` (to add files), the `lock` (to commit), a `transaction` (to
commit) and a `changing_files` context (to add files).
Strictly speaking, we could let the commit take the `lock` and create a
`transaction`, but it seems more consistent that way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:57:52 +0100] rev 50039
dirstate: use wlock and changing_files context in `test-revlog-ancestry`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 15:01:59 +0100] rev 50038
dirstate: use `dirstate.change_files` to scope the change in `revert`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:46:22 +0100] rev 50037
dirstate: use `dirstate.change_files` to scope the change in `gpg`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 16:57:41 +0100] rev 50036
dirstate: use `dirstate.change_files` to scope the change in `tag`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 31 Jan 2023 00:05:12 +0100] rev 50035
dirstate: use `dirstate.change_files` to scope the change in `rename`
This is the way, unless we are not actually touching the working copy.
In such cases we don't need to do something.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 31 Jan 2023 00:08:53 +0100] rev 50034
dirstate: use `dirstate.change_files` to scope the change in `copy`
This is the way, unless we are not actually touching the working copy.
In such cases we don't need to do something.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 16:29:30 +0100] rev 50033
dirstate: use `dirstate.change_files` to scope the change in `remove`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 16:27:57 +0100] rev 50032
dirstate: use `dirstate.change_files` to scope the change in `forget`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 15:07:32 +0100] rev 50031
dirstate: use `dirstate.change_files` to scope the change in `addremove`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 12:57:38 +0100] rev 50030
dirstate: use `dirstate.change_files` to scope the change in `add`
This is the way.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 11:51:58 +0100] rev 50029
commit: use `dirstate.change_files` to scope the associated `addremove`
This was significantly more complicated than I expected, because multiple
extensions get in the way.
I introduced a context that lazily open the transaction and associated context
to work around these complication. See the inline documentation for details.
Introducing the wrapping transaction remove the need for dirstate-guard (one of
the ultimate goal of all this), and slightly affect the result of a `hg
rollback` after a `hg commit --addremove`. That last part is deemed fine. It
aligns the behavior with what happens after a failed `hg commit --addremove` and
nobody should be using `hg rollback` anyway.
The small output change in the test come from the different transaction timing
and fact the transaction now backup the dirstate before the addremove, which
might mean "no file to backup" when the repository starts from an empty state.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 15:38:23 +0100] rev 50028
commit: move the addremove logic around to make the next changeset clearer
Lets do the noise now, without changing any thing. So the new changeset can
focus on the actual semantic changes.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 10:46:46 +0100] rev 50027
largefiles: link the core dirstate._changing context to the lfdirstate one
This will be much cleaner and safer to make sure the two dirstates are in sync.
This way, the large-files dirstate will simply inherit the state of the main
dirstate, so if the core code does the right thing, the large-files code should
be right too.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 17:44:27 +0100] rev 50026
dirstate: add a context for tracking files change
Let us start to use it. We will enforce it later.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 21:51:45 +0100] rev 50025
dirstate: invalidate the dirstate change on transaction failure
If the change context lives inside a transaction, the change are not flushed to
disk on exit as this is delegated to the transaction. As a result we should
also delegate the part that do cleanup on failure.
The issue was caught by tests with other change, but it seems useful to fix this
as soon as possible.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 17:16:24 +0100] rev 50024
dirstate: factor the "changing" context logic out
This makes it reusable for other types of changes.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 15:50:45 +0100] rev 50023
dirstate: introduce a `is_changing_any` property
This will embrace other cases than changing parents.
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 30 Jan 2023 19:21:34 +0100] rev 50022
dirstate: rename `pendingparentchange` to `is_changing_parents`
This is clearer and more inline witht he other change we did.
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 15:50:36 +0100] rev 50021
dirstate: rename _parentwriters to _changing_level
We will have context for changing more than parents, so lets be prepared.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 12:14:45 +0100] rev 50020
largefiles: remove the `changing_parents` context in `openlfdirstate`
This code might run in any kind of change context, we should rely on the higher
level context instead of opening our own.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 00:57:16 +0100] rev 50019
largefiles: remove the second `changing_parents` in `updatelfiles`
Now that the `update_file` call have been migrated, we can drop the
semantically-wrong `changing_parents` context.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 00:55:44 +0100] rev 50018
largefiles: remove the first `changing_parents` in `updatelfiles`
Now that the `update_file` call have been migrated, we can drop the
semantically-wrong `changing_parents` context.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 09:25:23 +0100] rev 50017
largefiles: use `hacky_extension_update_file` in `updatelfiles`
This is what the function is meant for.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 08:38:43 +0100] rev 50016
largefiles: use `hacky_extension_update_file` in `synclfdirstate`
This is what the function is meant for.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 08:37:33 +0100] rev 50015
largefiles: use `hacky_extension_update_file` in `openlfdirstate`
This is what the function is meant for.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 04 Feb 2023 09:08:26 +0100] rev 50014
win32text: make the hacky call cover more cases
Now that I understand what this is doing, It seems like the case for
`p1_tracked` were covered by neither the code nor the test.
Now the code cover it at least.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:47:55 +0100] rev 50013
win32text: drop the `changing_parents` context in revert upgrade
We are not changing parents here, so let us not pretend we do.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 00:29:39 +0100] rev 50012
win32text: clean up and clarify the post-revert hack of dirstate
The change is unrelated to changing parents and should not be a in a
"changing_parents" context. This call is quite hacky, but now it is at least
explicitly hacky.
We will drop the `changing_parents` context in the next changesets, but we kept
this change simple to help readability.
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 00:26:08 +0100] rev 50011
dirstate: introduce a `hacky_extension_update_file` method
See inline documentation for details.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Feb 2023 09:36:35 +0100] rev 50010
mq: properly take the wlock during the full qfold operation
Otherwise the operation could be raced… for unknown result.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 04 Feb 2023 11:46:57 +0100] rev 50009
locking: hold the wlock for the full duration of the "keyword demo"
The risk of racing the demo is low, since it seems to create its own repository
on the fly. However it is clearer and more consistent.
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 16:54:26 +0100] rev 50008
locking: grab the wlock before touching the dirstate in `perfdirstatewrite`
If we touch the dirstate, we should hold the `wlock`.
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 04:22:19 +0100] rev 50007
locking: take the `wlock` for the full `hg addremove` duration
Otherwise, there is a race condition window between the time we resolve the
file to addremove with the matcher and the time we lock the repo and modify the
dirstate.
For example, the working copy might have been updated away, or purged, and the
matched files would no longer be correct.