Tue, 14 Feb 2023 15:45:26 -0500 tag: move the prohibition of tagging the `null` rev up to the `wdir()` check
Matt Harbison <matt_harbison@yahoo.com> [Tue, 14 Feb 2023 15:45:26 -0500] rev 50144
tag: move the prohibition of tagging the `null` rev up to the `wdir()` check It makes sense to do these together, and avoid another revision lookup.
Fri, 17 Feb 2023 17:04:41 +0100 branching: merge with default
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 17 Feb 2023 17:04:41 +0100] rev 50143
branching: merge with default the first part of the fix is there
Fri, 27 Jan 2023 17:30:51 +0100 tests: remove unnecessary --traceback argument
Dan Villiom Podlaski Christiansen <dan.villiom.podlaski.christiansen@sallinggroup.com> [Fri, 27 Jan 2023 17:30:51 +0100] rev 50142
tests: remove unnecessary --traceback argument
Thu, 16 Feb 2023 04:49:35 +0100 dirstate: remove the dedicated backup logic
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 04:49:35 +0100] rev 50141
dirstate: remove the dedicated backup logic When alone, the dirstate can now take care of its commit/rollback pattern itself. When in a transaction, the transaction deal with commit/rollback pattern quite fine. Why did you have a dedicated backup logic?
Thu, 16 Feb 2023 04:02:36 +0100 localrepo: stop doing special dirstate backup at transaction open
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 04:02:36 +0100] rev 50140
localrepo: stop doing special dirstate backup at transaction open Since the dirstate writes are already managed by the transaction, we already do a backup of the dirstate when necessary (and even trigger one to keep `hg rollback` happy). We needs some special code to deal with the initial empty checkout, but it is not too complicated. Managing variable filename (as dirstate-v2 uses) at the "journalfile" level, is complex and fragile (which is consistent with the fact these files are not journal…). If we no longer do it, our life is significantly simpler. In some sense, we apply the xkcd-1134¹ solution to our savebackup/restorebackup problem. [1] https://xkcd.com/1134/ (the change to test-hardlink are expect as decreasing the number of duplicated backup drive the hardlink count down)
Thu, 16 Feb 2023 11:42:43 +0100 localrepo: "blindly" do a dirstate backup at the end of the transaction
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 11:42:43 +0100] rev 50139
localrepo: "blindly" do a dirstate backup at the end of the transaction Having the file backup mechanism dealing with file backup as benefit. So lets move closer to that. The fact `hg rollback` even needs this is sad. I hope to have the time to implement one of the alternative soon.
Thu, 16 Feb 2023 17:12:21 +0100 test-hardlink: stop explicitly listing `undo.dirstate`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 17:12:21 +0100] rev 50138
test-hardlink: stop explicitly listing `undo.dirstate` The files is on its way out.
Thu, 16 Feb 2023 04:04:40 +0100 localrepo: enforce a clean dirstate when the transaction open
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 04:04:40 +0100] rev 50137
localrepo: enforce a clean dirstate when the transaction open This is important to simplify the backup process. This also seems like a quite reasonable expectation. See inline documentation for details.
Thu, 16 Feb 2023 10:43:22 +0100 dirstate: explicitly backup the datafile
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 10:43:22 +0100] rev 50136
dirstate: explicitly backup the datafile Since the transaction does not know about this file, we need to explicitly mark it for backup before touching it.
Thu, 16 Feb 2023 04:41:38 +0100 mq: write the dirstate before stripping
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 04:41:38 +0100] rev 50135
mq: write the dirstate before stripping I am not certain why it is dirty (probably the `repo.setparent` call a right before. However I know we need it flushed before the repository starts to be stripped.
Thu, 16 Feb 2023 03:08:00 +0100 dirstate: simplify the shelve hack to not go through the disk
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 03:08:00 +0100] rev 50134
dirstate: simplify the shelve hack to not go through the disk We already have the data in memory, so why not simply keep the data in memory? This avoid abusing the `savebackup/restorebackup` logic and will make our life easier.
Thu, 16 Feb 2023 02:44:07 +0100 dirstate: detect potential fishy transaction patterns while changing
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 02:44:07 +0100] rev 50133
dirstate: detect potential fishy transaction patterns while changing If we rely on the transaction more, we should be more careful about the transaction. Adding extra security seems reasonable.
Thu, 16 Feb 2023 02:34:54 +0100 dirstate: generalize the dirstate's invalidation on transaction abort
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 02:34:54 +0100] rev 50132
dirstate: generalize the dirstate's invalidation on transaction abort The previous code was too specific, we should add the invalidation at next to the `addfilegenerator` in the `write` call.
Thu, 16 Feb 2023 02:22:13 +0100 dirstate: simplify some methods' decorator
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 02:22:13 +0100] rev 50131
dirstate: simplify some methods' decorator Since `changing_parents` and `changing_files` are mutually exclusive, having both `@requires_changing_files` and `@requires_not_changing_parents` on a method is redundant.
Thu, 16 Feb 2023 02:19:56 +0100 dirstate: document the functions that need consolidation
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 02:19:56 +0100] rev 50130
dirstate: document the functions that need consolidation They are more functions that make the dirstate dirty but does not currently enforce a clean change scoping, we add comments in front of each of them so clarify this. There is no urgency to it, but the world will be a better place when all of them have proper scoping in place.
Thu, 16 Feb 2023 05:03:28 +0100 dirstate: make `restorebackup` more robust when it is a noop
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 05:03:28 +0100] rev 50129
dirstate: make `restorebackup` more robust when it is a noop If there are no data_file, we might not be able to determine its filename. Which can be safely ignored. (all this code is on the way out anyway)
Thu, 16 Feb 2023 00:33:15 +0100 dirstate-guard: remove the feature
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 00:33:15 +0100] rev 50128
dirstate-guard: remove the feature The dirstate guard duplicated some of the logic already implemented in the transaction (and now the changing_* context). However the feature was incomplete, for example, living only in memory meant we could not recover from the hardest crash. In addition this duplicated with the transaction logic meant things could go out of sync or step on each other. Removing the feature now that we no longer needs it seems the safest.
Thu, 16 Feb 2023 00:14:21 +0100 rollback: remove the dirstateguard usage
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 00:14:21 +0100] rev 50127
rollback: remove the dirstateguard usage Thanks to the previous changeset, we no longer needs it. begone !
Thu, 16 Feb 2023 10:00:59 +0100 rollback: explicitly skip dirstate rollback when applicable
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 10:00:59 +0100] rev 50126
rollback: explicitly skip dirstate rollback when applicable instead of letting the transaction logic overwrite the dirstate and then overwrite that overwrite with a backup. We simply do not restore the dirstate related file during the _playback call. This open the way to removing the last dirstate guard usage.
Thu, 16 Feb 2023 00:26:24 +0100 rollback: detect "parentgone" case earlier
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 16 Feb 2023 00:26:24 +0100] rev 50125
rollback: detect "parentgone" case earlier Detecting this earlier will help us to affect the rollback process sooner, which will help the next changesets. To keep things simple, we degrade the behavior a bit when the `undo.desc` is missing. However since `hg rollback` is not supposed to be used and the `undo.desc` file have been introduced in mercurial 1.6 (2010). I think this is an acceptable evil.
Wed, 15 Feb 2023 23:39:10 +0100 rollback: avoid a `hg commit --addremove` at a critical point
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 23:39:10 +0100] rev 50124
rollback: avoid a `hg commit --addremove` at a critical point The rollback behavior around `hg commit --addremove` has changed slightly. It does not really matters here but keeping that variant out of the way cannot hurt.
Wed, 15 Feb 2023 20:48:51 +0100 rollback: display some graphlog before/after a test piece
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 20:48:51 +0100] rev 50123
rollback: display some graphlog before/after a test piece This make the situation clearer.
Wed, 15 Feb 2023 20:47:08 +0100 rollback: show that the safety works in a associated test
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 20:47:08 +0100] rev 50122
rollback: show that the safety works in a associated test That test section is checking that --force is overcoming the safety check, however we did not check that the safety properly detect the situation. We now do for clarity.
Tue, 14 Feb 2023 00:40:27 +0100 dirstate-guard: remove its usage in `backout`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 00:40:27 +0100] rev 50121
dirstate-guard: remove its usage in `backout` We can simply replace it with a transaction.
Tue, 14 Feb 2023 00:42:00 +0100 dirstate-guard: remove the usage in `import`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 00:42:00 +0100] rev 50120
dirstate-guard: remove the usage in `import` It is now redundant with the transaction spawning the same scope.
Tue, 14 Feb 2023 00:39:49 +0100 dirstate-guard: replace a usage in `rebase` with a transaction
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 00:39:49 +0100] rev 50119
dirstate-guard: replace a usage in `rebase` with a transaction Opening the transaction sooner will provide us with the same benefit.
Tue, 14 Feb 2023 00:31:41 +0100 dirstate-guard: remove usage in `rebase`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 00:31:41 +0100] rev 50118
dirstate-guard: remove usage in `rebase` Now that the dirstate change and write are clearer, it does not seems we need to use a dirstate-guard here anymore. The transaction already wrap the full operation.
Tue, 14 Feb 2023 00:31:23 +0100 dirstate-guard: remove it usage in `mq`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 00:31:23 +0100] rev 50117
dirstate-guard: remove it usage in `mq` The code it covered is also covered by a `changing_parents` context.
Thu, 26 Jan 2023 17:46:54 +0100 dirstate: enforce the use of `changing_files` context to change tracking
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 17:46:54 +0100] rev 50116
dirstate: enforce the use of `changing_files` context to change tracking Now that everything is using the new context, we can start enforcing its usage.
Tue, 13 Dec 2022 03:55:14 +0100 dirstate: warn if we write to the dirstate without holding the wlock
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 03:55:14 +0100] rev 50115
dirstate: warn if we write to the dirstate without holding the wlock Writing the dirstate without holding the wlock can race with other update and overwrite important change. The comment questionning the current state of things was right, we should the `wlock` should always cover the dirstate. (Yes, this is me, agreeing with myself, half a decade later).
Wed, 15 Feb 2023 21:31:37 +0100 dirstate: avoid transaction backup/restore if we do not hold the lock
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 21:31:37 +0100] rev 50114
dirstate: avoid transaction backup/restore if we do not hold the lock Doing overwriting the dirstate content without holding the lock is a recipe for disaster.
Tue, 13 Dec 2022 09:59:22 +0100 dirstate: issue a developer warning on implicit write on wlock release
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 09:59:22 +0100] rev 50113
dirstate: issue a developer warning on implicit write on wlock release Our goal is to get rid of all these to clarify the writing pattern, so it is time to warn about this (and later, forbid it).
Wed, 15 Feb 2023 23:29:04 +0100 status: fix post status invalidation
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 23:29:04 +0100] rev 50112
status: fix post status invalidation If the dirstate changed under us, we should throw away what we have a reload it, should we not ?
Wed, 15 Feb 2023 23:28:20 +0100 status: fix post status writing
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 23:28:20 +0100] rev 50111
status: fix post status writing With dirstate-v2, the status process itself might update internal states. So we make sure this get written on disk
Thu, 15 Dec 2022 02:54:06 +0100 dirstate: use `dirstate.change_files` to scope the change in `shelve`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Dec 2022 02:54:06 +0100] rev 50110
dirstate: use `dirstate.change_files` to scope the change in `shelve` This is the way.
Thu, 15 Dec 2022 03:04:58 +0100 dirstate: use `dirstate.change_files` to scope the change in `unshelve`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Dec 2022 03:04:58 +0100] rev 50109
dirstate: use `dirstate.change_files` to scope the change in `unshelve` This is the way.
Thu, 15 Dec 2022 06:22:23 +0100 shelve: adjust what happens in some `changing_parents` context
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Dec 2022 06:22:23 +0100] rev 50108
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.
Mon, 13 Feb 2023 23:29:30 +0100 dirstate: use `dirstate.change_files` to scope the change in `lfconvert`
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 23:29:30 +0100] rev 50107
dirstate: use `dirstate.change_files` to scope the change in `lfconvert` This is the way.
Sun, 05 Feb 2023 12:09:52 +0100 largefiles: rely on main scoping for writing dirstate in `markcommitted`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 12:09:52 +0100] rev 50106
largefiles: rely on main scoping for writing dirstate in `markcommitted` Yeah, cleaner code.
Sun, 05 Feb 2023 12:05:23 +0100 largefiles: rely on main scoping for writing dirstate in `mergeupdate`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 12:05:23 +0100] rev 50105
largefiles: rely on main scoping for writing dirstate in `mergeupdate` Yeah, cleaner code.
Sat, 04 Feb 2023 16:54:46 +0100 largefiles: rely on the higher level `changing_giles` in `mergerecordupdates`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 04 Feb 2023 16:54:46 +0100] rev 50104
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`
Wed, 14 Dec 2022 00:46:58 +0100 dirstate: use wlock and `dirstate.change_files` to scope the change in `mq`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Dec 2022 00:46:58 +0100] rev 50103
dirstate: use wlock and `dirstate.change_files` to scope the change in `mq` This is the way.
Wed, 25 Jan 2023 12:51:26 +0100 subrepo: use `changing_files` context in subrepository code
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:51:26 +0100] rev 50102
subrepo: use `changing_files` context in subrepository code This is better, not ideal, but better.
Sat, 04 Feb 2023 12:14:19 +0100 subrepo: let black expand some call on multiple lines early
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 04 Feb 2023 12:14:19 +0100] rev 50101
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.
Wed, 14 Dec 2022 00:43:24 +0100 dirstate: use `dirstate.change_files` to scope the change in `import`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Dec 2022 00:43:24 +0100] rev 50100
dirstate: use `dirstate.change_files` to scope the change in `import` This is the way.
Wed, 14 Dec 2022 00:52:06 +0100 dirstate: use `dirstate.change_files` to scope the change in `automv`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Dec 2022 00:52:06 +0100] rev 50099
dirstate: use `dirstate.change_files` to scope the change in `automv` This is... mostly... the way.
Wed, 14 Dec 2022 00:47:22 +0100 dirstate: use `dirstate.change_files` to scope the change in `amend`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Dec 2022 00:47:22 +0100] rev 50098
dirstate: use `dirstate.change_files` to scope the change in `amend` This is the way.
Wed, 25 Jan 2023 12:46:46 +0100 dirstate: use the `changing_files` context in the `keyword` demo
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:46:46 +0100] rev 50097
dirstate: use the `changing_files` context in the `keyword` demo This is the way.
Wed, 25 Jan 2023 12:56:26 +0100 dirstate: wrap repository change in appropriate context in `test-context`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:56:26 +0100] rev 50096
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.
Wed, 25 Jan 2023 12:57:52 +0100 dirstate: use wlock and changing_files context in `test-revlog-ancestry`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:57:52 +0100] rev 50095
dirstate: use wlock and changing_files context in `test-revlog-ancestry` This is the way.
Tue, 13 Dec 2022 15:01:59 +0100 dirstate: use `dirstate.change_files` to scope the change in `revert`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 15:01:59 +0100] rev 50094
dirstate: use `dirstate.change_files` to scope the change in `revert` This is the way.
Wed, 25 Jan 2023 12:46:22 +0100 dirstate: use `dirstate.change_files` to scope the change in `gpg`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:46:22 +0100] rev 50093
dirstate: use `dirstate.change_files` to scope the change in `gpg` This is the way.
Tue, 13 Dec 2022 16:57:41 +0100 dirstate: use `dirstate.change_files` to scope the change in `tag`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 16:57:41 +0100] rev 50092
dirstate: use `dirstate.change_files` to scope the change in `tag` This is the way.
Tue, 31 Jan 2023 00:05:12 +0100 dirstate: use `dirstate.change_files` to scope the change in `rename`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 31 Jan 2023 00:05:12 +0100] rev 50091
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.
Tue, 31 Jan 2023 00:08:53 +0100 dirstate: use `dirstate.change_files` to scope the change in `copy`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 31 Jan 2023 00:08:53 +0100] rev 50090
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.
Tue, 13 Dec 2022 16:29:30 +0100 dirstate: use `dirstate.change_files` to scope the change in `remove`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 16:29:30 +0100] rev 50089
dirstate: use `dirstate.change_files` to scope the change in `remove` This is the way.
Tue, 13 Dec 2022 16:27:57 +0100 dirstate: use `dirstate.change_files` to scope the change in `forget`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 16:27:57 +0100] rev 50088
dirstate: use `dirstate.change_files` to scope the change in `forget` This is the way.
Tue, 13 Dec 2022 15:07:32 +0100 dirstate: use `dirstate.change_files` to scope the change in `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 15:07:32 +0100] rev 50087
dirstate: use `dirstate.change_files` to scope the change in `addremove` This is the way.
Tue, 13 Dec 2022 12:57:38 +0100 dirstate: use `dirstate.change_files` to scope the change in `add`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 12:57:38 +0100] rev 50086
dirstate: use `dirstate.change_files` to scope the change in `add` This is the way.
Wed, 15 Feb 2023 11:51:58 +0100 commit: use `dirstate.change_files` to scope the associated `addremove`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 11:51:58 +0100] rev 50085
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.
(0) -30000 -10000 -3000 -1000 -300 -100 -60 +60 +100 +300 +1000 tip