changeset 47688:b37ab6b5c438

dirstate-map: factor out the change to _dirs and _alldirs on dropping 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/D11130
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Thu, 15 Jul 2021 01:58:50 +0200
parents e59bd6723f2f
children f2aef39abc14
files mercurial/dirstatemap.py
diffstat 1 files changed, 13 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/mercurial/dirstatemap.py	Thu Jul 15 01:58:31 2021 +0200
+++ b/mercurial/dirstatemap.py	Thu Jul 15 01:58:50 2021 +0200
@@ -155,6 +155,17 @@
         if old_entry is None and "_alldirs" in self.__dict__:
             self._alldirs.addpath(filename)
 
+    def _dirs_decr(self, filename, old_entry=None):
+        """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__:
+                self._alldirs.delpath(filename)
+        if "filefoldmap" in self.__dict__:
+            normed = util.normcase(filename)
+            self.filefoldmap.pop(normed, None)
+
     def addfile(
         self,
         f,
@@ -247,21 +258,9 @@
         previously recorded.
         """
         old_entry = self._map.pop(f, None)
-        exists = False
-        oldstate = b'?'
-        if old_entry is not None:
-            exists = True
-            oldstate = old_entry.state
-        if exists:
-            if oldstate != b"r" and "_dirs" in self.__dict__:
-                self._dirs.delpath(f)
-            if "_alldirs" in self.__dict__:
-                self._alldirs.delpath(f)
-        if "filefoldmap" in self.__dict__:
-            normed = util.normcase(f)
-            self.filefoldmap.pop(normed, None)
+        self._dirs_decr(f, old_entry=old_entry)
         self.nonnormalset.discard(f)
-        return exists
+        return old_entry is not None
 
     def clearambiguoustimes(self, files, now):
         for f in files: