Patchwork D11417: dirstate: move the copymap drop inside dropfile

login
register
mail settings
Submitter phabricator
Date Sept. 14, 2021, 9:20 p.m.
Message ID <differential-rev-PHID-DREV-5mofys6b7xqjpey4ojq6-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/49726/
State Superseded
Headers show

Comments

phabricator - Sept. 14, 2021, 9:20 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  Since the copymap is part of the dirstatemap it make more sense for the
  dirstatemap to manage it directly.
  
  This is part of a generic effort to move unified logic at lower level and to
  clean up higher level API.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D11417

AFFECTED FILES
  mercurial/dirstate.py
  mercurial/dirstatemap.py

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

diff --git a/mercurial/dirstatemap.py b/mercurial/dirstatemap.py
--- a/mercurial/dirstatemap.py
+++ b/mercurial/dirstatemap.py
@@ -316,6 +316,7 @@ 
         old_entry = self._map.pop(f, None)
         self._dirs_decr(f, old_entry=old_entry)
         self.nonnormalset.discard(f)
+        self.copymap.pop(f, None)
         return old_entry is not None
 
     def clearambiguoustimes(self, files, now):
@@ -652,8 +653,9 @@ 
         def removefile(self, *args, **kwargs):
             return self._rustmap.removefile(*args, **kwargs)
 
-        def dropfile(self, *args, **kwargs):
-            return self._rustmap.dropfile(*args, **kwargs)
+        def dropfile(self, f, *args, **kwargs):
+            self._rustmap.copymap().pop(f, None)
+            return self._rustmap.dropfile(f, *args, **kwargs)
 
         def clearambiguoustimes(self, *args, **kwargs):
             return self._rustmap.clearambiguoustimes(*args, **kwargs)
diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py
--- a/mercurial/dirstate.py
+++ b/mercurial/dirstate.py
@@ -749,7 +749,6 @@ 
         if self._map.dropfile(filename):
             self._dirty = True
             self._updatedfiles.add(filename)
-            self._map.copymap.pop(filename, None)
 
     def _discoverpath(self, path, normed, ignoremissing, exists, storemap):
         if exists is None: