Thu, 15 Jul 2021 02:19:41 +0200 dirstate-map: factor out the change to _dirs and _alldirs on removing
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Jul 2021 02:19:41 +0200] rev 47689
dirstate-map: factor out the change to _dirs and _alldirs on removing This logic is complicated enough to deserves its own function. So it now does. This will make it easier to reuse that logic in later changeset. Differential Revision: https://phab.mercurial-scm.org/D11131
Thu, 15 Jul 2021 01:58:50 +0200 dirstate-map: factor out the change to _dirs and _alldirs on dropping
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Jul 2021 01:58:50 +0200] rev 47688
dirstate-map: factor out the change to _dirs and _alldirs on dropping This logic is complicated enough to deserves its own function. So it now does. This will make it easier to reuse that logic in later changeset. Differential Revision: https://phab.mercurial-scm.org/D11130
Thu, 15 Jul 2021 01:58:31 +0200 dirstate-map: factor out the change to _dirs and _alldirs on adding
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Jul 2021 01:58:31 +0200] rev 47687
dirstate-map: factor out the change to _dirs and _alldirs on adding This logic is complicated enough to deserves its own function. So it now does. This will make it easier to reuse that logic in later changeset. Differential Revision: https://phab.mercurial-scm.org/D11129
Wed, 14 Jul 2021 22:06:13 +0200 dirstate-item: introduce a `dm_otherparent` property
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Jul 2021 22:06:13 +0200] rev 47686
dirstate-item: introduce a `dm_otherparent` property See inline documentation for details. Differential Revision: https://phab.mercurial-scm.org/D11124
Wed, 14 Jul 2021 21:59:18 +0200 dirstate-item: introduce a `dm_nonnormal` property
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Jul 2021 21:59:18 +0200] rev 47685
dirstate-item: introduce a `dm_nonnormal` property See inline documentation for details. Differential Revision: https://phab.mercurial-scm.org/D11123
Fri, 16 Jul 2021 16:19:31 +0200 dirstate-v2: Reserve a few bytes of space for future extensions
Simon Sapin <simon.sapin@octobus.net> [Fri, 16 Jul 2021 16:19:31 +0200] rev 47684
dirstate-v2: Reserve a few bytes of space for future extensions See doc-comment Differential Revision: https://phab.mercurial-scm.org/D11101
Fri, 16 Jul 2021 14:08:26 +0200 dirstate-v2: Separate iterators for dirfoldmap and debugdirstate
Simon Sapin <simon.sapin@octobus.net> [Fri, 16 Jul 2021 14:08:26 +0200] rev 47683
dirstate-v2: Separate iterators for dirfoldmap and debugdirstate `dirstatemap.dirfoldmap` was recently changed to re-use a Rust iterator that was added for the `hg debugdirstate` command. That iterator was based on all nodes in the tree dirstate without an entry only existing to hold child nodes, and therefore being directories. However to optimize status further we may want to store additional nodes for unknown or ignored files and directories. At that point the two users of this iterator will want different things, so let’s make two iterators instead. See doc-comments in `dispatch.rs`. Differential Revision: https://phab.mercurial-scm.org/D11099
Thu, 15 Jul 2021 23:02:17 +0200 dirstate-v2: Move fixed-size tree metadata into the docket file
Simon Sapin <simon.sapin@octobus.net> [Thu, 15 Jul 2021 23:02:17 +0200] rev 47682
dirstate-v2: Move fixed-size tree metadata into the docket file Before this changeset, the dirstate-v2 data file contained not only nodes and paths that may be reused when appending to an existing file, but also some fixed-size metadata that applies to the entire tree and was added at the end of the data file for every append. This moves that metadata into the docket file, so that repeated "append" operations without meaningful changes don’t actually need to grow any file. Differential Revision: https://phab.mercurial-scm.org/D11098
Thu, 08 Jul 2021 19:23:44 +0200 dirstate-v2: Add heuristic for when to create a new data file
Simon Sapin <simon.sapin@octobus.net> [Thu, 08 Jul 2021 19:23:44 +0200] rev 47681
dirstate-v2: Add heuristic for when to create a new data file … instead of appending to the existing one. This is based on keeping track of how much of the existing data is not used anymore. Differential Revision: https://phab.mercurial-scm.org/D11097
Thu, 15 Jul 2021 10:31:43 +0200 dirstate-v2: Reuse existing paths when appending to a data file
Simon Sapin <simon.sapin@octobus.net> [Thu, 15 Jul 2021 10:31:43 +0200] rev 47680
dirstate-v2: Reuse existing paths when appending to a data file When writing a dirstate in v2 format by appending to an existing data file, filenames / paths that are borrowed from the previous on-disk representation can be reused. Differential Revision: https://phab.mercurial-scm.org/D11096
Thu, 15 Jul 2021 08:53:03 +0200 dirstate-v2: Reuse existing nodes when appending to a data file
Simon Sapin <simon.sapin@octobus.net> [Thu, 15 Jul 2021 08:53:03 +0200] rev 47679
dirstate-v2: Reuse existing nodes when appending to a data file When writing a dirstate in v2 format by appending to an existing data file, nodes that are still "unparsed" from the previous on-disk representation have been unchanged and can therefore be reused. This makes the new data point to previously-existing data for tree nodes. Differential Revision: https://phab.mercurial-scm.org/D11095
Tue, 13 Jul 2021 17:18:23 +0200 dirstate-v2: Support appending to the same data file
Simon Sapin <simon.sapin@octobus.net> [Tue, 13 Jul 2021 17:18:23 +0200] rev 47678
dirstate-v2: Support appending to the same data file For now we’re still writing the entire data every time, so appending is not useful yet. Later we’ll have new nodes pointing to some existing data for nodes and paths that haven’t changed. The decision whether to append is pseudo-random in order to make tests exercise both code paths. This will be replaced by a heuristic based on the amount of unused existing data. Differential Revision: https://phab.mercurial-scm.org/D11094
Tue, 13 Jul 2021 09:44:44 +0200 dirstate-v2: shrink on-disk path lengths to 16-bits
Simon Sapin <simon.sapin@octobus.net> [Tue, 13 Jul 2021 09:44:44 +0200] rev 47677
dirstate-v2: shrink on-disk path lengths to 16-bits Differential Revision: https://phab.mercurial-scm.org/D11091
Mon, 12 Jul 2021 23:05:56 +0200 dirstate-v2: Rename Header to Root, move it to the end of the data file
Simon Sapin <simon.sapin@octobus.net> [Mon, 12 Jul 2021 23:05:56 +0200] rev 47676
dirstate-v2: Rename Header to Root, move it to the end of the data file Now that they don’t have to be at the start, a given data file may contain multiple "roots". A docket only points to one of them, and previous ones are left unused to allow allow append-only in-place writing to an existing data file. Differential Revision: https://phab.mercurial-scm.org/D11090
Mon, 12 Jul 2021 22:46:52 +0200 dirstate-v2: Enforce data size read from the docket file
Simon Sapin <simon.sapin@octobus.net> [Mon, 12 Jul 2021 22:46:52 +0200] rev 47675
dirstate-v2: Enforce data size read from the docket file The data file may not be shorter than its size given by the docket. It may be longer, but additional data is ignored. Differential Revision: https://phab.mercurial-scm.org/D11089
Thu, 08 Jul 2021 12:18:21 +0200 dirstate-v2: Introduce a docket file
Simon Sapin <simon.sapin@octobus.net> [Thu, 08 Jul 2021 12:18:21 +0200] rev 47674
dirstate-v2: Introduce a docket file .hg/dirstate now only contains some metadata to point to a separate data file named .hg/dirstate.{}.d with a random hexadecimal identifier. For now every update creates a new data file and removes the old one, but later we’ll (usually) append to an existing file. Separating into two files allows doing the "write to a temporary file then atomically rename into destination" dance with only a small docket file, without always rewriting a lot of data. Differential Revision: https://phab.mercurial-scm.org/D11088
Thu, 15 Jul 2021 17:24:09 +0200 dirstate: replace a dead conditional branch with an assert in `update_file`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Jul 2021 17:24:09 +0200] rev 47673
dirstate: replace a dead conditional branch with an assert in `update_file` This is a case we never meet, so lets trim it away to simplify the code before more changes. Differential Revision: https://phab.mercurial-scm.org/D11128
Wed, 14 Jul 2021 23:32:35 +0200 dirstate-map: do not use `size` to gate copy dropping during remove_file
Pierre-Yves David <pierre-yves.david@octobus.net> [Wed, 14 Jul 2021 23:32:35 +0200] rev 47672
dirstate-map: do not use `size` to gate copy dropping during remove_file This get us close to moving the block right above withing the DirstateItem object. Doing so will help us getting rid of magic constant at the dirstatemap level. Differential Revision: https://phab.mercurial-scm.org/D11127
Thu, 15 Jul 2021 00:27:29 +0200 dirstate: drop a duplicated assert
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Jul 2021 00:27:29 +0200] rev 47671
dirstate: drop a duplicated assert This very case is checked in 3 line above that one. Differential Revision: https://phab.mercurial-scm.org/D11126
Thu, 15 Jul 2021 00:22:49 +0200 dirstate: drop duplicated check
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 15 Jul 2021 00:22:49 +0200] rev 47670
dirstate: drop duplicated check This is covered by the `@requires_parents_change` decorator that this function use. Differential Revision: https://phab.mercurial-scm.org/D11125
Mon, 19 Jul 2021 06:21:04 +0200 dirstate: add a `set_possibly_dirty` in `fakedirstatewritetime`
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 19 Jul 2021 06:21:04 +0200] rev 47669
dirstate: add a `set_possibly_dirty` in `fakedirstatewritetime` Differential Revision: https://phab.mercurial-scm.org/D11122
Mon, 19 Jul 2021 06:20:00 +0200 dirstatemap: use `set_possibly_dirty` in `clearambiguoustimes`
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 19 Jul 2021 06:20:00 +0200] rev 47668
dirstatemap: use `set_possibly_dirty` in `clearambiguoustimes` lets put this new method to use Differential Revision: https://phab.mercurial-scm.org/D11121
Mon, 19 Jul 2021 06:30:04 +0200 dirstate-item: use `set_possibly_dirty` in `pure.pack_dirstate`
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 19 Jul 2021 06:30:04 +0200] rev 47667
dirstate-item: use `set_possibly_dirty` in `pure.pack_dirstate` Lets make use of the new function. Differential Revision: https://phab.mercurial-scm.org/D11120
Mon, 19 Jul 2021 06:29:30 +0200 dirstate-item: add a `set_possibly_dirty` method
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 19 Jul 2021 06:29:30 +0200] rev 47666
dirstate-item: add a `set_possibly_dirty` method See inline documentation for details. The pushes the AMBIGUOUS_TIME implementation further down the line within the DirstateItem only. When this cleanup is done we will be able to stop using this representation internally. Differential Revision: https://phab.mercurial-scm.org/D11119
Tue, 13 Jul 2021 13:06:50 +0200 dirstate-item: add a `from_v1_data` constructor
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Jul 2021 13:06:50 +0200] rev 47665
dirstate-item: add a `from_v1_data` constructor This class method is dedicated to building a DirstateItem from the data available in the "dirstate-v1" format. Since that format is frozen, this constructor will never change (unlike the `__init__` one). Differential Revision: https://phab.mercurial-scm.org/D11118
Tue, 13 Jul 2021 13:04:49 +0200 dirstate-item: use an explicit __init__ function instead of the attrs one
Pierre-Yves David <pierre-yves.david@octobus.net> [Tue, 13 Jul 2021 13:04:49 +0200] rev 47664
dirstate-item: use an explicit __init__ function instead of the attrs one For now, this is not doing anything special, however we plan to make it different in the future. So we start simple. Differential Revision: https://phab.mercurial-scm.org/D11117
Thu, 08 Jul 2021 10:28:20 +0200 dirstate: deprecated `drop` outside of `update/merge`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jul 2021 10:28:20 +0200] rev 47663
dirstate: deprecated `drop` outside of `update/merge` All core users have been migrated. Differential Revision: https://phab.mercurial-scm.org/D11116
Thu, 08 Jul 2021 03:30:11 +0200 dirstate: deprecated `remove` outside of `update/merge`
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jul 2021 03:30:11 +0200] rev 47662
dirstate: deprecated `remove` outside of `update/merge` All core users have been migrated. Differential Revision: https://phab.mercurial-scm.org/D11115
Thu, 08 Jul 2021 00:35:06 +0200 dirstate: deprecate the `add` method outside of update/merge context
Pierre-Yves David <pierre-yves.david@octobus.net> [Thu, 08 Jul 2021 00:35:06 +0200] rev 47661
dirstate: deprecate the `add` method outside of update/merge context All core users have been updated. Differential Revision: https://phab.mercurial-scm.org/D11114
Mon, 19 Jul 2021 22:19:36 +0200 upgrade: avoid a traceback in case of unrecognized revlog
Pierre-Yves David <pierre-yves.david@octobus.net> [Mon, 19 Jul 2021 22:19:36 +0200] rev 47660
upgrade: avoid a traceback in case of unrecognized revlog Without this, in case of revlog name not matching any know pattern we would get a traceback. Raising a clear error seems simpler. Differential Revision: https://phab.mercurial-scm.org/D11202
(0) -30000 -10000 -3000 -1000 -300 -100 -50 -30 +30 +50 +100 +300 +1000 +3000 tip