diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -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""" diff --git a/mercurial/dirstatemap.py b/mercurial/dirstatemap.py --- a/mercurial/dirstatemap.py +++ b/mercurial/dirstatemap.py @@ -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,