diff -r ef50a62eec40 -r 5ba24e886cec mercurial/upgrade_utils/engine.py --- a/mercurial/upgrade_utils/engine.py Mon Jan 31 18:13:00 2022 +0300 +++ b/mercurial/upgrade_utils/engine.py Thu Feb 17 06:32:03 2022 +0100 @@ -486,6 +486,15 @@ upgrade_dirstate(ui, srcrepo, upgrade_op, b'v2', b'v1') upgrade_op.removed_actions.remove(upgrade_actions.dirstatev2) + if upgrade_actions.dirstatetrackedkey in upgrade_op.upgrade_actions: + ui.status(_(b'create dirstate-tracked-key file\n')) + upgrade_tracked_key(ui, srcrepo, upgrade_op, add=True) + upgrade_op.upgrade_actions.remove(upgrade_actions.dirstatetrackedkey) + elif upgrade_actions.dirstatetrackedkey in upgrade_op.removed_actions: + ui.status(_(b'remove dirstate-tracked-key file\n')) + upgrade_tracked_key(ui, srcrepo, upgrade_op, add=False) + upgrade_op.removed_actions.remove(upgrade_actions.dirstatetrackedkey) + if not (upgrade_op.upgrade_actions or upgrade_op.removed_actions): return @@ -660,3 +669,15 @@ srcrepo.dirstate.write(None) scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements) + + +def upgrade_tracked_key(ui, srcrepo, upgrade_op, add): + if add: + srcrepo.dirstate._use_tracked_key = True + srcrepo.dirstate._dirty = True + srcrepo.dirstate._dirty_tracked_set = True + srcrepo.dirstate.write(None) + if not add: + srcrepo.dirstate.delete_tracked_key() + + scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements)