changeset 47689:f2aef39abc14

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
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 15 Jul 2021 02:19:41 +0200
parents b37ab6b5c438
children a685c29ebf54
files mercurial/dirstatemap.py
diffstat 1 files changed, 5 insertions(+), 10 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dirstatemap.py	Thu Jul 15 01:58:50 2021 +0200
+++ b/mercurial/dirstatemap.py	Thu Jul 15 02:19:41 2021 +0200
@@ -155,13 +155,15 @@
         if old_entry is None and "_alldirs" in self.__dict__:
             self._alldirs.addpath(filename)
 
-    def _dirs_decr(self, filename, old_entry=None):
+    def _dirs_decr(self, filename, old_entry=None, remove_variant=False):
         """decremente the dirstate counter if applicable"""
         if old_entry is not None:
             if "_dirs" in self.__dict__ and not old_entry.removed:
                 self._dirs.delpath(filename)
-            if "_alldirs" in self.__dict__:
+            if "_alldirs" in self.__dict__ and not remove_variant:
                 self._alldirs.delpath(filename)
+        elif remove_variant and "_alldirs" in self.__dict__:
+            self._alldirs.addpath(filename)
         if "filefoldmap" in self.__dict__:
             normed = util.normcase(filename)
             self.filefoldmap.pop(normed, None)
@@ -241,14 +243,7 @@
                     self.otherparentset.add(f)
         if entry is not None and not (entry.merged or entry.from_p2):
             self.copymap.pop(f, None)
-
-        if entry is not None and not entry.removed and "_dirs" in self.__dict__:
-            self._dirs.delpath(f)
-        if entry is None and "_alldirs" in self.__dict__:
-            self._alldirs.addpath(f)
-        if "filefoldmap" in self.__dict__:
-            normed = util.normcase(f)
-            self.filefoldmap.pop(normed, None)
+        self._dirs_decr(f, old_entry=entry, remove_variant=True)
         self._map[f] = DirstateItem(b'r', 0, size, 0)
         self.nonnormalset.add(f)