# HG changeset patch # User Pierre-Yves David # Date 2021-09-15 09:13:46 # Node ID 87b3010c08e04f0f9da3d460549cbaca5c1ee578 # Parent d459c6b84961146ab48774711b3ce69bda572111 dirstate: fix restoration of "merged" state after a remove Before this change, "merged" file that get removed and re-added later were recorded as "from_p2" instead. This came from 8fe74328f700, a 2014 changeset that start explicitly doing so for reason I have not been able to fully grasp. The graft test mentioned in the description are still happy after this changeset. So this changeset restore what seems to be the intended behavior. Restoring information as it was before the removal. Differential Revision: https://phab.mercurial-scm.org/D11429 diff --git a/mercurial/dirstate.py b/mercurial/dirstate.py --- a/mercurial/dirstate.py +++ b/mercurial/dirstate.py @@ -734,7 +734,10 @@ class dirstate(object): # (see `merged_removed` and `from_p2_removed`) if entry.merged_removed or entry.from_p2_removed: source = self._map.copymap.get(f) - self._addpath(f, from_p2=True) + if entry.merged_removed: + self._addpath(f, merged=True) + else: + self._addpath(f, from_p2=True) self._map.copymap.pop(f, None) if source is not None: self.copy(source, f) diff --git a/tests/test-merge-remove.t b/tests/test-merge-remove.t --- a/tests/test-merge-remove.t +++ b/tests/test-merge-remove.t @@ -55,8 +55,8 @@ Re-adding foo1 and bar: adding foo1 $ hg debugstate --no-dates - n 0 -2 unset bar - n 0 -2 unset foo1 + m 0 -2 unset bar + m 0 -2 unset foo1 copy: foo -> foo1 $ hg st -qC @@ -74,8 +74,8 @@ Reverting foo1 and bar: reverting foo1 $ hg debugstate --no-dates - n 0 -2 unset bar - n 0 -2 unset foo1 + m 0 -2 unset bar + m 0 -2 unset foo1 copy: foo -> foo1 $ hg st -qC