mercurial/upgrade_utils/engine.py
changeset 48790 5ba24e886cec
parent 48437 6e4999cb085e
child 48793 6e559391f96e
--- 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)