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.
Sun, 05 Feb 2023 15:38:23 +0100 commit: move the addremove logic around to make the next changeset clearer
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 15:38:23 +0100] rev 50084
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.
Wed, 15 Feb 2023 10:46:46 +0100 largefiles: link the core dirstate._changing context to the lfdirstate one
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 10:46:46 +0100] rev 50083
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.
Thu, 26 Jan 2023 17:44:27 +0100 dirstate: add a context for tracking files change
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 17:44:27 +0100] rev 50082
dirstate: add a context for tracking files change Let us start to use it. We will enforce it later.
Mon, 13 Feb 2023 21:51:45 +0100 dirstate: invalidate the dirstate change on transaction failure
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 21:51:45 +0100] rev 50081
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.
Thu, 26 Jan 2023 17:16:24 +0100 dirstate: factor the "changing" context logic out
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 17:16:24 +0100] rev 50080
dirstate: factor the "changing" context logic out This makes it reusable for other types of changes.
Thu, 26 Jan 2023 15:50:45 +0100 dirstate: introduce a `is_changing_any` property
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 15:50:45 +0100] rev 50079
dirstate: introduce a `is_changing_any` property This will embrace other cases than changing parents.
Mon, 30 Jan 2023 19:21:34 +0100 dirstate: rename `pendingparentchange` to `is_changing_parents`
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 30 Jan 2023 19:21:34 +0100] rev 50078
dirstate: rename `pendingparentchange` to `is_changing_parents` This is clearer and more inline witht he other change we did.
Thu, 26 Jan 2023 15:50:36 +0100 dirstate: rename _parentwriters to _changing_level
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 15:50:36 +0100] rev 50077
dirstate: rename _parentwriters to _changing_level We will have context for changing more than parents, so lets be prepared.
Sun, 05 Feb 2023 12:14:45 +0100 largefiles: remove the `changing_parents` context in `openlfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 12:14:45 +0100] rev 50076
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.
Wed, 15 Feb 2023 00:57:16 +0100 largefiles: remove the second `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 00:57:16 +0100] rev 50075
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.
Wed, 15 Feb 2023 00:55:44 +0100 largefiles: remove the first `changing_parents` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 00:55:44 +0100] rev 50074
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.
Sun, 05 Feb 2023 09:25:23 +0100 largefiles: use `hacky_extension_update_file` in `updatelfiles`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 09:25:23 +0100] rev 50073
largefiles: use `hacky_extension_update_file` in `updatelfiles` This is what the function is meant for.
Sun, 05 Feb 2023 08:38:43 +0100 largefiles: use `hacky_extension_update_file` in `synclfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 08:38:43 +0100] rev 50072
largefiles: use `hacky_extension_update_file` in `synclfdirstate` This is what the function is meant for.
Sun, 05 Feb 2023 08:37:33 +0100 largefiles: use `hacky_extension_update_file` in `openlfdirstate`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 08:37:33 +0100] rev 50071
largefiles: use `hacky_extension_update_file` in `openlfdirstate` This is what the function is meant for.
Sat, 04 Feb 2023 09:08:26 +0100 win32text: make the hacky call cover more cases
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 04 Feb 2023 09:08:26 +0100] rev 50070
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.
Wed, 25 Jan 2023 12:47:55 +0100 win32text: drop the `changing_parents` context in revert upgrade
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 12:47:55 +0100] rev 50069
win32text: drop the `changing_parents` context in revert upgrade We are not changing parents here, so let us not pretend we do.
Wed, 15 Feb 2023 00:29:39 +0100 win32text: clean up and clarify the post-revert hack of dirstate
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 00:29:39 +0100] rev 50068
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.
Wed, 15 Feb 2023 00:26:08 +0100 dirstate: introduce a `hacky_extension_update_file` method
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 15 Feb 2023 00:26:08 +0100] rev 50067
dirstate: introduce a `hacky_extension_update_file` method See inline documentation for details.
Tue, 07 Feb 2023 09:36:35 +0100 mq: properly take the wlock during the full qfold operation
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Feb 2023 09:36:35 +0100] rev 50066
mq: properly take the wlock during the full qfold operation Otherwise the operation could be raced… for unknown result.
Sat, 04 Feb 2023 11:46:57 +0100 locking: hold the wlock for the full duration of the "keyword demo"
Pierre-Yves David <pierre-yves.david@octobus.net> [Sat, 04 Feb 2023 11:46:57 +0100] rev 50065
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.
Sun, 05 Feb 2023 16:54:26 +0100 locking: grab the wlock before touching the dirstate in `perfdirstatewrite`
Pierre-Yves David <pierre-yves.david@octobus.net> [Sun, 05 Feb 2023 16:54:26 +0100] rev 50064
locking: grab the wlock before touching the dirstate in `perfdirstatewrite` If we touch the dirstate, we should hold the `wlock`.
Tue, 13 Dec 2022 04:22:19 +0100 locking: take the `wlock` for the full `hg addremove` duration
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 04:22:19 +0100] rev 50063
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.
Tue, 13 Dec 2022 16:26:13 +0100 locking: take the `wlock` for the full `hg forget` duration
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 16:26:13 +0100] rev 50062
locking: take the `wlock` for the full `hg forget` duration Otherwise, there is a race condition window between the time we resolve the file to forget 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.
Tue, 13 Dec 2022 04:22:46 +0100 locking: take the `wlock` for the full `hg remove` duration
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 04:22:46 +0100] rev 50061
locking: take the `wlock` for the full `hg remove` duration Otherwise, there is a race condition window between the time we resolve the file to remove 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.
Tue, 13 Dec 2022 04:21:27 +0100 locking: take the `wlock` for the full `hg add` duration
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 04:21:27 +0100] rev 50060
locking: take the `wlock` for the full `hg add` duration Otherwise, there is a race condition window between the time we resolve the file to add 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.
Mon, 06 Feb 2023 01:22:01 +0100 dirstate: drop some very fishy looking piece of code
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 06 Feb 2023 01:22:01 +0100] rev 50059
dirstate: drop some very fishy looking piece of code This piece of code is marking the **real** dirstate file as a temporary transaction file. This means it get deleted on transaction rollback. This this quite wrong, especially as the comment points out some `dirstate.pending` motivation and the `.pending` file should already be fully managed by the transaction. The only ready I can think of this behavior not having awful results right now is because other transaction logic restore backed up content above the one that got wrongfully deleted. Let us stop doing this anyway, All tests seems happy.
Tue, 14 Feb 2023 23:05:18 +0100 dirstate: do not write an empty dirstate just for backup
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 23:05:18 +0100] rev 50058
dirstate: do not write an empty dirstate just for backup This will get in the way when we get more strict about holding the lock when writing the dirstate. Instead, we simply don't copy dirstate files around if there are None at backup time. A couple of tests are impacted they no longer need to backup such "empty" dirstate.
Tue, 14 Feb 2023 22:46:26 +0100 dirstate: pre-indent some of the backup code
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 22:46:26 +0100] rev 50057
dirstate: pre-indent some of the backup code This will make the next changeset clearer.
Tue, 14 Feb 2023 22:27:24 +0100 debugrebuilddirstate: double check that no transaction is open
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 22:27:24 +0100] rev 50056
debugrebuilddirstate: double check that no transaction is open Since transaction impact dirstate write, we make sure nobody is trying anything strange with this internal command.
Tue, 14 Feb 2023 22:26:23 +0100 dirstate: explicitly write the dirstate after `debugrebuilddirstate`
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 22:26:23 +0100] rev 50055
dirstate: explicitly write the dirstate after `debugrebuilddirstate` I am working on making the dirstate write patterns more predictable. This patch is part of a small series of similar patches that adds a explicit dirstate write in a handful of location where the dirstate is updated "a bit in a strange way". With this explicit write, we are no longer relying on implicite write of the dirstate on `wlock` release. This make the world a better place.
Mon, 13 Feb 2023 22:53:54 +0100 dirstate: explicitly write the dirstate after `keyword` "overwrite"
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 22:53:54 +0100] rev 50054
dirstate: explicitly write the dirstate after `keyword` "overwrite" I am working on making the dirstate write patterns more predictable. This patch is part of a small series of similar patches that adds a explicit dirstate write in a handful of location where the dirstate is updated "a bit in a strange way". With this explicit write, we are no longer relying on implicite write of the dirstate on `wlock` release. This make the world a better place.
Mon, 13 Feb 2023 23:33:27 +0100 dirstate: explicitly write the dirstate after `eol` dirstate manipulation
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 23:33:27 +0100] rev 50053
dirstate: explicitly write the dirstate after `eol` dirstate manipulation I am working on making the dirstate write patterns more predictable. This patch is part of a small series of similar patches that adds a explicit dirstate write in a handful of location where the dirstate is updated "a bit in a strange way". With this explicit write, we are no longer relying on implicite write of the dirstate on `wlock` release. This make the world a better place.
Mon, 13 Feb 2023 23:49:52 +0100 dirstate: explicitly write the dirstate after mq dirstate rebuild
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 23:49:52 +0100] rev 50052
dirstate: explicitly write the dirstate after mq dirstate rebuild I am working on making the dirstate write patterns more predictable. This patch is part of a small series of similar patches that adds a explicit dirstate write in a handful of location where the dirstate is updated "a bit in a strange way". With this explicit write, we are no longer relying on implicite write of the dirstate on `wlock` release. This make the world a better place.
Tue, 14 Feb 2023 20:09:39 +0100 transaction: quietly rollback if no other changes than temporary files
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 20:09:39 +0100] rev 50051
transaction: quietly rollback if no other changes than temporary files If no actual change have been made, we don't really need to roll them back. We only have to cleanup some temporary files and it seems reasonable to do that quietly. This will help us to use the transaction in wider context¹ without impacting the user experience. [1] as in Python context managers that lives longer.
Tue, 14 Feb 2023 20:04:17 +0100 transaction: run abort callback in all cases
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 20:04:17 +0100] rev 50050
transaction: run abort callback in all cases Previously, these possibly important callback were "forgotten" when running a quick rollback. This is now fixed, as the tests shown.
Tue, 14 Feb 2023 18:59:04 +0100 transaction: clarify the "quick abort" scenario
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 14 Feb 2023 18:59:04 +0100] rev 50049
transaction: clarify the "quick abort" scenario Right now, the transaction has a code-pass to do a "quick abort" that skip most¹ (too much) of the logic when the right condition are detected² We are about to improve this logic in multiple aspect. We clarify the code first. The conditional return in `_can_quick_abort` looks a bit weird because we are about to make them more complex very soon. [1] actually too much [2] actually not often enough
Tue, 07 Feb 2023 15:27:37 +0100 test: use a more direct form of interruption in fncache "recover" testing
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Feb 2023 15:27:37 +0100] rev 50048
test: use a more direct form of interruption in fncache "recover" testing The previous test was relying on implementation details and harder to maintain. The new version is closer to the initial intend : "What happens if the process die without cleanup". This change is motivated by further changes around the transaction and dirstate logic that would break the fragile equilibrium that existed before this patch. Making this change early make it easier to review on its own and remove noise in future larger changes.
Tue, 07 Feb 2023 13:14:59 +0100 test: use a more direct approach to test racy mutation
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Feb 2023 13:14:59 +0100] rev 50047
test: use a more direct approach to test racy mutation The previous test was relying on implementation details and harder to maintain. The new version is closer to the initial intend : "What happens the file get overwritten from under the current process" This change is motivated by further changes around the transaction and dirstate logic that would break the fragile equilibrium that existed before this patch. Making this change early make it easier to review on its own and remove noise in future larger changes.
Mon, 13 Feb 2023 23:56:13 +0100 test: create some history in test-dirstate-backup
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 23:56:13 +0100] rev 50046
test: create some history in test-dirstate-backup An empty repository, based on `null` is quite a corner cases. We create a more "natural" setup for this tests to make sure it can keep testing what it intend to test in the future.
Tue, 07 Feb 2023 12:42:45 +0100 test: explicitly "add" file before some commit in test-keyword.t
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 07 Feb 2023 12:42:45 +0100] rev 50045
test: explicitly "add" file before some commit in test-keyword.t `hg commit -A` will revert the `hg addremove` step if the commit fails. However `hg rollback` currently does not. We are about to improve internal consistency around transaction and dirstate and the behavior of `hg rollback` will align on the other behavior in the process. Before doing so, we make sure the test is using a separate call to `hg add` to avoid the test scenario to be affected by that future change. note: the behavior change for `hg rollback` seems fine as it affect a niche usecase and `hg rollback` usage have been strongly discouraged for a while.
Mon, 13 Feb 2023 19:46:39 +0100 test: explicitly "add" file before some commit in test-filecache.py
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 19:46:39 +0100] rev 50044
test: explicitly "add" file before some commit in test-filecache.py `hg commit -A` will revert the `hg addremove` step if the commit fails. However `hg rollback` currently does not. We are about to improve internal consistency around transaction and dirstate and the behavior of `hg rollback` will align on the other behavior in the process. Before doing so, we make sure the test is using a separate call to `hg add` to avoid the test scenario to be affected by that future change. note: the behavior change for `hg rollback` seems fine as it affect a niche usecase and `hg rollback` usage have been strongly discouraged for a while.
Mon, 13 Feb 2023 17:42:10 +0100 test: explicitly "add" file before some commit in test-bookmark.t
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 17:42:10 +0100] rev 50043
test: explicitly "add" file before some commit in test-bookmark.t `hg commit -A` will revert the `hg addremove` step if the commit fails. However `hg rollback` currently does not. We are about to improve internal consistency around transaction and dirstate and the behavior of `hg rollback` will align on the other behavior in the process. Before doing so, we make sure the test is using a separate call to `hg add` to avoid the test scenario to be affected by that future change. note: the behavior change for `hg rollback` seems fine as it affect a niche usecase and `hg rollback` usage have been strongly discouraged for a while.
Mon, 13 Feb 2023 17:42:32 +0100 test: explicitly "add" file before some commit in test-rollback.t
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 13 Feb 2023 17:42:32 +0100] rev 50042
test: explicitly "add" file before some commit in test-rollback.t `hg commit -A` will revert the `hg addremove` step if the commit fails. However `hg rollback` currently does not. We are about to improve internal consistency around transaction and dirstate and the behavior of `hg rollback` will align on the other behavior in the process. Before doing so, we make sure the test is using a separate call to `hg add` to avoid the test scenario to be affected by that future change. note: the behavior change for `hg rollback` seems fine as it affect a niche usecase and `hg rollback` usage have been strongly discouraged for a while.
Wed, 11 Jan 2023 17:30:55 +0100 rhg-files: add support for narrow when specifying a revision
Raphaël Gomès <rgomes@octobus.net> [Wed, 11 Jan 2023 17:30:55 +0100] rev 50041
rhg-files: add support for narrow when specifying a revision This makes it so that `rhg files -r NODE` works properly when using narrow.
Wed, 11 Jan 2023 17:08:23 +0100 rust-narrow: enable narrow support for plain `rhg files`
Raphaël Gomès <rgomes@octobus.net> [Wed, 11 Jan 2023 17:08:23 +0100] rev 50040
rust-narrow: enable narrow support for plain `rhg files` Support for `rhg files -r NODE` in a future changeset.
Wed, 11 Jan 2023 17:28:48 +0100 rhg-files: make signature of `display_files` more flexible
Raphaël Gomès <rgomes@octobus.net> [Wed, 11 Jan 2023 17:28:48 +0100] rev 50039
rhg-files: make signature of `display_files` more flexible This allows the callers to use any error type that converts to `CommandError` instead of a particular concrete type.
Thu, 12 Jan 2023 10:28:56 +0100 rhg: fix user-facing error message so it matches Python implementation
Raphaël Gomès <rgomes@octobus.net> [Thu, 12 Jan 2023 10:28:56 +0100] rev 50038
rhg: fix user-facing error message so it matches Python implementation
Wed, 11 Jan 2023 16:42:29 +0100 rust-ui: refactor ui code for printing narrow/sparse warnings
Raphaël Gomès <rgomes@octobus.net> [Wed, 11 Jan 2023 16:42:29 +0100] rev 50037
rust-ui: refactor ui code for printing narrow/sparse warnings This will be used elsewhere in the code, starting from the next commit.
Wed, 11 Jan 2023 16:29:29 +0100 rhg-files: reuse centralized dirstate logic
Raphaël Gomès <rgomes@octobus.net> [Wed, 11 Jan 2023 16:29:29 +0100] rev 50036
rhg-files: reuse centralized dirstate logic The `files` logic predates the centralized dirstate logic. It was duplicated, an didn't receive bugfixes along the way.
Wed, 11 Jan 2023 17:27:19 +0100 rust: move `filter_map_results` to public util
Raphaël Gomès <rgomes@octobus.net> [Wed, 11 Jan 2023 17:27:19 +0100] rev 50035
rust: move `filter_map_results` to public util This is a useful general-purpose function. It will be used in the next changesets.
Wed, 11 Jan 2023 15:44:21 +0100 rhg: fix typo
Raphaël Gomès <rgomes@octobus.net> [Wed, 11 Jan 2023 15:44:21 +0100] rev 50034
rhg: fix typo
Fri, 03 Feb 2023 17:31:54 -0500 run-tests: stop ignoring venv-installed packages
Matt Harbison <matt_harbison@yahoo.com> [Fri, 03 Feb 2023 17:31:54 -0500] rev 50033
run-tests: stop ignoring venv-installed packages This will allow test dependencies to be installed within a venv, instead of tampering with sys/user sites. One thing to note here is that the `VIRTUAL_ENV` path takes precedence over system-site, unlike when run directly with an activated `venv`. For example, `sys.path` as viewed from a feature test in `hghave.py`, when running `hghave vcr` directly with an activated `venv`: sys.path: [ '/home/jenkins/hg-committed/tests', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/jenkins/test_venv/lib/python3.8/site-packages' ] vs `sys.path` from the same feature test, when run by `run-tests.py` with this change: sys.path: [ '/home/jenkins/hg-committed/tests', '/home/jenkins/hg-committed', '/home/jenkins/hg-committed/tests', '/home/jenkins/test_venv/lib/python3.8/site-packages', '/usr/lib/python38.zip', '/usr/lib/python3.8', '/usr/lib/python3.8/lib-dynload', '/home/jenkins/.local/lib/python3.8/site-packages', '/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages' ]
Mon, 30 Jan 2023 16:59:15 -0500 bundlerepo: raise `error.LookupError` instead of `LookupError`
Matt Harbison <matt_harbison@yahoo.com> [Mon, 30 Jan 2023 16:59:15 -0500] rev 50032
bundlerepo: raise `error.LookupError` instead of `LookupError` I'm pretty sure that this was the intention, given `error.LookupError` is raised a few lines above with the same arguments. Note that PyCharm complains about `self.display_id` (and the use above this too) being `() -> Any` instead of `bytes`, but it may be confused about the `util.propertycache` annotation on it.
Mon, 30 Jan 2023 16:49:41 -0500 unionrepo: resync several methods to actually override superclass methods
Matt Harbison <matt_harbison@yahoo.com> [Mon, 30 Jan 2023 16:49:41 -0500] rev 50031
unionrepo: resync several methods to actually override superclass methods Not sure how/when these skewed, but these were flagged by PyCharm as having different signatures.
Tue, 31 Jan 2023 11:41:59 +0100 branching: merge with stable
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 31 Jan 2023 11:41:59 +0100] rev 50030
branching: merge with stable
Thu, 29 Apr 2021 22:01:04 +0200 storageutil: match node length with repository
Joerg Sonnenberger <joerg@bec.de> [Thu, 29 Apr 2021 22:01:04 +0200] rev 50029
storageutil: match node length with repository
Tue, 13 Dec 2022 12:50:52 +0100 dirstate: enforce holding the lock while doing any changes
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 12:50:52 +0100] rev 50028
dirstate: enforce holding the lock while doing any changes This seems like a sensible sanity check. This already caught the issue in largefile. This will catch more issue when we start using similar context manager for operation other than the parent changes.
Fri, 27 Jan 2023 00:45:07 +0100 largefile: make sure we hold the lock when updating the second dirstate
Pierre-Yves David <pierre-yves.david@octobus.net> [Fri, 27 Jan 2023 00:45:07 +0100] rev 50027
largefile: make sure we hold the lock when updating the second dirstate The largefile extension uses a second dirstate file (and object) to track some states. In some situations, it is lazily updated when needed. These operations might not have the lock taken. This means they might conflict and race with other ongoing operations. So we now take the lock to do these operations. This was caught by the next commit.
Thu, 26 Jan 2023 15:19:39 +0100 dirstate: rename `@requires_no_parents_change` too
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 15:19:39 +0100] rev 50026
dirstate: rename `@requires_no_parents_change` too This match the rename of the context manager.
Thu, 26 Jan 2023 15:17:29 +0100 dirstate: rename `@requires_parents_change` to `@requires_changing_parents`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 26 Jan 2023 15:17:29 +0100] rev 50025
dirstate: rename `@requires_parents_change` to `@requires_changing_parents` This match the rename of the context manager.
Tue, 13 Dec 2022 12:10:37 +0100 dirstate: write dirstate on successful exit of changing_parents context
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 12:10:37 +0100] rev 50024
dirstate: write dirstate on successful exit of changing_parents context This is the first step toward having more sensible and predicatable write patterns for the dirstate. Having better write/rollback patterns will greatly reduce and clarify the needs to backup the dirstate.
Wed, 25 Jan 2023 19:12:31 +0100 dirstate: rename parentchange to changing_parents
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 19:12:31 +0100] rev 50023
dirstate: rename parentchange to changing_parents Since the new argument breaks the API anyway, we can rename it to a better name. The previous name `parentchange` might be seen as something active, a function that would directly change the parents, however this is just a context manager to frame the operation that will change the parents and adjust the dirstate content accordingly. In addition, the future sister method that will be about changes to tracking and files would have a hard time fitting in the same naming scheme in a clear way. The new naming uses a clear prefix will make it more distinct from other dirstate methods and easier to extend with other similar contexts.
Wed, 25 Jan 2023 18:46:20 +0100 dirstate: pass the repo to the `changeparent` method
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 25 Jan 2023 18:46:20 +0100] rev 50022
dirstate: pass the repo to the `changeparent` method If we want the context to be responsible for writing (and we want it), we need to have access to a localrepository object. So we now requires a localrepository object as an argument to this context manager.
Tue, 13 Dec 2022 10:00:04 +0100 dirstate: warn about non-explicitly rolledback parent-change
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 10:00:04 +0100] rev 50021
dirstate: warn about non-explicitly rolledback parent-change Now that the invalidation is dealt with by the context manager itself, we should no longer need this in the unlocking code. We start with issuing a warning if this is the case before actually dropping this code later.
Tue, 13 Dec 2022 11:39:44 +0100 dirstate: invalidate changes when parent-change fails
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Dec 2022 11:39:44 +0100] rev 50020
dirstate: invalidate changes when parent-change fails When an error occurs during changing parents, we should invalidate all dirstate modifications and reload the dirstate. This is currently done by a `unlock` callback on the `wlock`. To fix this anomaly, we start dealing with the error directly in the context manager and its potential nesting. The "hard" part is to make sure that, when the parent-change context are nested, we and higher level nesting do not continue to use the invalidated dirstate. We introduce dedicated code to enforce that.
Sat, 28 Jan 2023 20:08:57 +0100 setup: Ensure target directory exists with building rust extension
Cédric Krier <ced@b2ck.com> [Sat, 28 Jan 2023 20:08:57 +0100] rev 50019
setup: Ensure target directory exists with building rust extension When the rust extension is the first to be build, the target directory may not exist so the copy fails.
Thu, 26 Jan 2023 00:23:07 +0100 filemerge: add union-other-first as internal merge tool
Cédric Krier <ced@b2ck.com> [Thu, 26 Jan 2023 00:23:07 +0100] rev 50018
filemerge: add union-other-first as internal merge tool See inline documentation for details.
Fri, 13 Jan 2023 00:07:07 +0100 rust: use `peek_mut` from the standard lib now that it's stable
Raphaël Gomès <rgomes@octobus.net> [Fri, 13 Jan 2023 00:07:07 +0100] rev 50017
rust: use `peek_mut` from the standard lib now that it's stable Just a little cleanup of a TODO found along the way.
Wed, 25 Jan 2023 18:45:38 +0100 clippy: actually fail if there are any warnings
Raphaël Gomès <rgomes@octobus.net> [Wed, 25 Jan 2023 18:45:38 +0100] rev 50016
clippy: actually fail if there are any warnings So far, only errors would trip the CI, this makes it so all warnings are elevated to errors, making it a CI fail if any warnings are present. This was the intended behavior, I just missed this when adding clippy.
Wed, 25 Jan 2023 18:44:09 +0100 rust-clippy: fix warning about nested ifs
Raphaël Gomès <rgomes@octobus.net> [Wed, 25 Jan 2023 18:44:09 +0100] rev 50015
rust-clippy: fix warning about nested ifs
Thu, 19 Jan 2023 11:12:20 -0500 debugshell: allow commands to be specified as a CLI argument
Arun Kulshreshtha <akulshreshtha@janestreet.com> [Thu, 19 Jan 2023 11:12:20 -0500] rev 50014
debugshell: allow commands to be specified as a CLI argument Add a `--command` option to `hg debugshell` that allows the user to pass in Python code to evaluate directly from the command line. This was inspired by the `--command` option present in Facebook's Sapling fork of Mercurial, which in turn was inspired by the `-c` option of the Python interpreter itself. It is particularly useful for writing tests, especially for getting visibility into things that otherwise aren't exposed via debug commands.
Tue, 10 Jan 2023 11:40:19 +0100 heptapod-ci: add `clippy` to the CI
Raphaël Gomès <rgomes@octobus.net> [Tue, 10 Jan 2023 11:40:19 +0100] rev 50013
heptapod-ci: add `clippy` to the CI This linter mostly makes our code more idiomatic, less surprising, has good suggestions and catches bugs. It's widely used in the Rust community and now part of the default toolchain when using `rustup`.
Tue, 10 Jan 2023 11:39:53 +0100 makefile: add `cargo clippy` to tests if cargo is available
Raphaël Gomès <rgomes@octobus.net> [Tue, 10 Jan 2023 11:39:53 +0100] rev 50012
makefile: add `cargo clippy` to tests if cargo is available This linter mostly makes our code more idiomatic, less surprising, has good suggestions and catches bugs. It's widely used in the Rust community and now part of the default toolchain when using `rustup`.
Tue, 10 Jan 2023 11:25:24 +0100 rust-tests: run `cargo` tests inside the `rust` folder
Raphaël Gomès <rgomes@octobus.net> [Tue, 10 Jan 2023 11:25:24 +0100] rev 50011
rust-tests: run `cargo` tests inside the `rust` folder There is no reason to only run inside the `rust/hg-cpython` folder, even if the `cargo test --all` behavior ends up being the same.
Tue, 10 Jan 2023 11:20:54 +0100 rust-clippy: merge "revlog" module definition and struct implementation
Raphaël Gomès <rgomes@octobus.net> [Tue, 10 Jan 2023 11:20:54 +0100] rev 50010
rust-clippy: merge "revlog" module definition and struct implementation Module inception is confusing when looking for code and almost never the right choice.
Tue, 10 Jan 2023 10:57:15 +0100 rust-clippy: merge "config" module definition and struct implementation
Raphaël Gomès <rgomes@octobus.net> [Tue, 10 Jan 2023 10:57:15 +0100] rev 50009
rust-clippy: merge "config" module definition and struct implementation Module inception is confusing when looking for code and almost never the right choice.
Tue, 10 Jan 2023 10:45:38 +0100 rust-clippy: upgrade `bytes-cast` dependency
Raphaël Gomès <rgomes@octobus.net> [Tue, 10 Jan 2023 10:45:38 +0100] rev 50008
rust-clippy: upgrade `bytes-cast` dependency I released a new version of `bytes-cast` to get rid of the clippy warning, and bump to edition 2021, so let's use it.
Tue, 10 Jan 2023 10:41:52 +0100 rust-clippy: remove redundant suffix from enum
Raphaël Gomès <rgomes@octobus.net> [Tue, 10 Jan 2023 10:41:52 +0100] rev 50007
rust-clippy: remove redundant suffix from enum Same as last time, this makes the code clearer in this instance.
Mon, 09 Jan 2023 19:37:05 +0100 rust-clippy: fix remaining warnings in `hg-cpython`
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 19:37:05 +0100] rev 50006
rust-clippy: fix remaining warnings in `hg-cpython`
Mon, 09 Jan 2023 19:36:41 +0100 rust-clippy: disable some lints crate-wide for `hg-cpython`
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 19:36:41 +0100] rev 50005
rust-clippy: disable some lints crate-wide for `hg-cpython` `rust-cpython` creates some pretty funky code that also needs to be compatible with pretty old Rust. This makes clippy quite useless in `hg-cpython` unless you disable the lints that are always triggered by `py_class!` and related. Maybe `clippy` will allow one day to exclude a dependency from its linting, but this seems quite unlikely, so this is the best we've got at the moment.
Mon, 09 Jan 2023 19:32:35 +0100 rust-clippy: fix remaining warnings in `rhg`
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 19:32:35 +0100] rev 50004
rust-clippy: fix remaining warnings in `rhg` All of these are simple changes that for the most part are clear improvements and the rest are at most equivalent.
Mon, 09 Jan 2023 19:18:43 +0100 rust-clippy: fix most warnings in `hg-core`
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 19:18:43 +0100] rev 50003
rust-clippy: fix most warnings in `hg-core` All of these are simple changes that for the most part are clear improvements and the rest are at most equivalent. The remaining warnings have to be fixed either with a bigger refactor like for the nested "revlog" module, or in the dependency `bytes-cast`, which we own. This will be done sometime in the future.
Mon, 09 Jan 2023 19:14:14 +0100 rust-utils: strip redundant prefix from enum
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 19:14:14 +0100] rev 50002
rust-utils: strip redundant prefix from enum This was highlighted by `clippy`, I think this makes the code cleaner.
Mon, 09 Jan 2023 19:07:44 +0100 rust-filepatterns: don't `Box` subincludes unnecessarily
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 19:07:44 +0100] rev 50001
rust-filepatterns: don't `Box` subincludes unnecessarily This was caught by `clippy`.
Mon, 09 Jan 2023 18:58:18 +0100 rust-nodemap: implement `PartialEq` without allocation
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:58:18 +0100] rev 50000
rust-nodemap: implement `PartialEq` without allocation This was caught by `clippy`. It's probable that this ends up optimized out by the compiler, but let's not rely on that.
Mon, 09 Jan 2023 18:54:57 +0100 rust-clippy: tell `clippy` we don't need to declare a default here
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:54:57 +0100] rev 49999
rust-clippy: tell `clippy` we don't need to declare a default here This is a struct only useful for tests.
Mon, 09 Jan 2023 18:50:29 +0100 rust-clippy: refactor complex type
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:50:29 +0100] rev 49998
rust-clippy: refactor complex type This makes reading the signature a bit less tiring.
Mon, 09 Jan 2023 18:30:42 +0100 rust-clippy: simplify return type of debug function
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:30:42 +0100] rev 49997
rust-clippy: simplify return type of debug function This makes the type a little bit more readable.
Mon, 09 Jan 2023 18:27:53 +0100 rust-clippy: add `is_empty` method to please the `clippy` gods
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:27:53 +0100] rev 49996
rust-clippy: add `is_empty` method to please the `clippy` gods I can see it being useful anyway.
Mon, 09 Jan 2023 18:25:24 +0100 rust: don't use a reference to a `Cow`
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:25:24 +0100] rev 49995
rust: don't use a reference to a `Cow` This was caught by `clippy`.
Mon, 09 Jan 2023 18:22:46 +0100 rust-clippy: reassure `clippy` that 8 arguments is expected
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:22:46 +0100] rev 49994
rust-clippy: reassure `clippy` that 8 arguments is expected This API is a bit verbose, but refactoring it into a struct isn't better in this particular case IMO, and there is a lot of info to pass.
Mon, 09 Jan 2023 18:15:29 +0100 rust-clippy: use `write_all` since we're not expecting a partial write
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:15:29 +0100] rev 49993
rust-clippy: use `write_all` since we're not expecting a partial write Clippy caught this. This is a good lint in general, but here this was not really a bug in this example code.
Mon, 09 Jan 2023 18:09:26 +0100 rust-clippy: tell clippy we want to keep those clauses separate
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:09:26 +0100] rev 49992
rust-clippy: tell clippy we want to keep those clauses separate This makes the cases more explicit, which is wanted in this specific instance.
Mon, 09 Jan 2023 18:04:29 +0100 rust-clippy: tell clippy we care about keeping those `if` clauses separate
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:04:29 +0100] rev 49991
rust-clippy: tell clippy we care about keeping those `if` clauses separate Thses were written this way because it spells out the logic in a more explicit manner.
Mon, 09 Jan 2023 18:03:24 +0100 rust-clippy: factor an `if` with the same duplicated clause
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:03:24 +0100] rev 49990
rust-clippy: factor an `if` with the same duplicated clause Unlike the next changeset, this if is not really made clearer by keeping the cases separate.
Mon, 09 Jan 2023 18:00:56 +0100 rust: fix broken debug assertions
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 18:00:56 +0100] rev 49989
rust: fix broken debug assertions These were caught by `clippy`. It appears no one uses the debug builds, which is how this wasn't caught before.
Mon, 09 Jan 2023 17:48:54 +0100 rust-narrow: fix loop that never loops
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 17:48:54 +0100] rev 49988
rust-narrow: fix loop that never loops This was caught by `clippy`. I guess the narrow tests leave something to be desired, since this previously only checked the first valid pattern.
Mon, 09 Jan 2023 17:40:03 +0100 rust: run `cargo clippy`
Raphaël Gomès <rgomes@octobus.net> [Mon, 09 Jan 2023 17:40:03 +0100] rev 49987
rust: run `cargo clippy` These automatic fixes are good to have because they make the code more idiomatic and less surprising. The transform from `sort` -> `sort_unstable` is questionable, but this is only in a test, so it doesn't matter in our case.
Fri, 06 Jan 2023 18:52:04 +0100 rust: use `logging_timer` instead of `micro_timer`
Raphaël Gomès <rgomes@octobus.net> [Fri, 06 Jan 2023 18:52:04 +0100] rev 49986
rust: use `logging_timer` instead of `micro_timer` I am the author of `micro_timer`. I built it at the time because I couldn't find a crate that was simple to use and flexible to do function timing with. Turns out I just couldn't find it because crates.io's search isn't all that great, or maybe I didn't look hard enough. `logging_timer` is better in every way: - supports changing the logging level - supports start and end logging - supports intermediary messages - supports inline macros - supports formatting the output - better IDE/tree-sitter integration thanks to a more robust proc macro I also changed all uses to one-liners, so it's easier to copy-paste.
Thu, 12 Jan 2023 16:15:51 +0000 pathauditor: make _checkfs_exists a static method
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 12 Jan 2023 16:15:51 +0000] rev 49985
pathauditor: make _checkfs_exists a static method This fixes the bug detected by pytype where the auditor used in vfs.py may be a no-op auditor (vfs.py, line 398), which doesn't have the _checkfs_exists method.
Thu, 12 Jan 2023 13:14:00 +0000 merge: add mergeresult.mapaction to improve speed
Arseniy Alekseyev <aalekseyev@janestreet.com> [Thu, 12 Jan 2023 13:14:00 +0000] rev 49984
merge: add mergeresult.mapaction to improve speed As a part of [hg update] we convert all [ACTION_CREATED] merge results into [ACTION_GET] actions, and that's slightly inefficient because every insertion pays the full cost of maintaining the [mergeresult] data structure up to date. This commit adds a function [mapaction], which is faster. (saves around 0.3s on a large update involving ~400k files)
Wed, 04 Jan 2023 19:30:47 +0000 merge: avoid dereferencing repo fields repeatedly
Arseniy Alekseyev <aalekseyev@janestreet.com> [Wed, 04 Jan 2023 19:30:47 +0000] rev 49983
merge: avoid dereferencing repo fields repeatedly
Fri, 06 Jan 2023 18:09:19 +0000 merge: skip syntactic path checks in [_checkunknownfile]
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 06 Jan 2023 18:09:19 +0000] rev 49982
merge: skip syntactic path checks in [_checkunknownfile] We don't need to check the paths syntactically, since they are coming from diffing the revisions, so hopefully already checked on the way in. We still need to check what's on the filesystem, to avoid traversing the symlinks or subdirs, which we can't know about statically. Also, we use the directory audit to elide [isfileorlink], this removing ~all lstat calls from hg updates from-empty.
Fri, 06 Jan 2023 16:42:24 +0000 pathutil: use `finddirs_rev_noroot` instead of `parts`
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 06 Jan 2023 16:42:24 +0000] rev 49981
pathutil: use `finddirs_rev_noroot` instead of `parts` The benefit this brings is very tiny, if it's even there, since we still didn't get rid of the [parts] computation. It probably won't be worth it without the subsequent patch that adds one more use of [finddirs_rev_noroot]
Fri, 06 Jan 2023 17:29:42 +0000 pathutil: add the more efficient finddir iterator
Arseniy Alekseyev <aalekseyev@janestreet.com> [Fri, 06 Jan 2023 17:29:42 +0000] rev 49980
pathutil: add the more efficient finddir iterator (to be used in subsequent commits)
Mon, 16 Jan 2023 12:10:20 +0000 typing: import unconditionally
Arseniy Alekseyev <aalekseyev@janestreet.com> [Mon, 16 Jan 2023 12:10:20 +0000] rev 49979
typing: import unconditionally This is needed if we're writing python3 signatures.
Wed, 11 Jan 2023 17:51:04 +0400 tests: check how hgweb handles HEAD requests
Anton Shestakov <av6@dwimlabs.net> [Wed, 11 Jan 2023 17:51:04 +0400] rev 49978
tests: check how hgweb handles HEAD requests This test file is loosely based on test-hgweb.t. HEAD support originally implemented in fda5a4b853ab.
(0) -30000 -10000 -3000 -1000 -120 +120 +1000 tip