dirstate: same logic as what we did for `_drop`
authorPierre-Yves David <pierre-yves.david@octobus.net>
Wed, 15 Sep 2021 10:05:25 +0200
changeset 47983 ffde999a3ea9
parent 47982 36c0d738c330
child 47984 6255a0d33c45
dirstate: same logic as what we did for `_drop` This is part of the dirstatemap so let the dirstatemap deal with it. Differential Revision: https://phab.mercurial-scm.org/D11423
mercurial/dirstate.py
mercurial/dirstatemap.py
--- a/mercurial/dirstate.py	Wed Sep 15 09:28:17 2021 +0200
+++ b/mercurial/dirstate.py	Wed Sep 15 10:05:25 2021 +0200
@@ -738,7 +738,6 @@
     def _add(self, filename):
         """internal function to mark a file as added"""
         self._addpath(filename, added=True)
-        self._map.copymap.pop(filename, None)
 
     def _drop(self, filename):
         """internal function to drop a file from the dirstate"""
--- a/mercurial/dirstatemap.py	Wed Sep 15 09:28:17 2021 +0200
+++ b/mercurial/dirstatemap.py	Wed Sep 15 10:05:25 2021 +0200
@@ -188,6 +188,7 @@
             assert not possibly_dirty
             assert not from_p2
             new_entry = DirstateItem.new_added()
+            self.copymap.pop(f, None)
         elif merged:
             assert not possibly_dirty
             assert not from_p2
@@ -567,7 +568,7 @@
             from_p2=False,
             possibly_dirty=False,
         ):
-            return self._rustmap.addfile(
+            ret = self._rustmap.addfile(
                 f,
                 mode,
                 size,
@@ -577,6 +578,9 @@
                 from_p2,
                 possibly_dirty,
             )
+            if added:
+                self.copymap.pop(f, None)
+            return ret
 
         def reset_state(
             self,