diff mercurial/upgrade_utils/engine.py @ 48790:5ba24e886cec

tracked-key: make it possible to upgrade to and downgrade from the feature This seems rather important if we want people to start using it. Differential Revision: https://phab.mercurial-scm.org/D12198
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 17 Feb 2022 06:32:03 +0100
parents 6e4999cb085e
children 6e559391f96e
line wrap: on
line diff
--- 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)