diff -r 111f5a0cbcaa -r 568f63b5a30f mercurial/localrepo.py --- a/mercurial/localrepo.py Mon Jan 31 14:26:35 2022 +0100 +++ b/mercurial/localrepo.py Mon Jan 31 08:44:48 2022 +0100 @@ -1278,6 +1278,7 @@ requirementsmod.BOOKMARKS_IN_STORE_REQUIREMENT, requirementsmod.CHANGELOGV2_REQUIREMENT, requirementsmod.COPIESSDC_REQUIREMENT, + requirementsmod.DIRSTATE_TRACKED_KEY_V1, requirementsmod.DIRSTATE_V2_REQUIREMENT, requirementsmod.DOTENCODE_REQUIREMENT, requirementsmod.FNCACHE_REQUIREMENT, @@ -1742,7 +1743,9 @@ """Extension point for wrapping the dirstate per-repo.""" sparsematchfn = lambda: sparse.matcher(self) v2_req = requirementsmod.DIRSTATE_V2_REQUIREMENT + tk = requirementsmod.DIRSTATE_TRACKED_KEY_V1 use_dirstate_v2 = v2_req in self.requirements + use_tracked_key = tk in self.requirements return dirstate.dirstate( self.vfs, @@ -1752,6 +1755,7 @@ sparsematchfn, self.nodeconstants, use_dirstate_v2, + use_tracked_key=use_tracked_key, ) def _dirstatevalidate(self, node): @@ -3691,6 +3695,17 @@ else: requirements.add(requirementsmod.SHARED_REQUIREMENT) + tracked_key = ui.configint(b'format', b'exp-dirstate-tracked-key-version') + if tracked_key: + if tracked_key != 1: + msg = _("ignoring unknown tracked key version: %d\n") + hint = _( + "see `hg help config.format.exp-dirstate-tracked-key-version" + ) + ui.warn(msg % tracked_key, hint=hint) + else: + requirements.add(requirementsmod.DIRSTATE_TRACKED_KEY_V1) + return requirements