diff mercurial/copies.py @ 45670:a8fb29b05f92

salvaged: properly deal with salvaged file during copy tracing When salvaged files are encountered, the removal have been reverted and we should keep the rename information from the other side. The conditional was starting to be quite hairy, so we spell it out in multiple elif case for readability. This fixes the associated test cases introduced a while back. The changeset centric copy tracing is now (known) bug free. Differential Revision: https://phab.mercurial-scm.org/D9130
author Pierre-Yves David <pierre-yves.david@octobus.net>
date Wed, 16 Sep 2020 21:00:02 +0200
parents 2693659c2b34
children f877b3628015
line wrap: on
line diff
--- a/mercurial/copies.py	Tue Sep 15 10:55:17 2020 +0200
+++ b/mercurial/copies.py	Wed Sep 16 21:00:02 2020 +0200
@@ -371,11 +371,15 @@
                 continue
             # content from "major" wins, unless it is older
             # than the branch point or there is a merge
-            if (
-                new_tt == other_tt
-                or not isancestor(new_tt, other_tt)
-                or dest in changes.merged
-            ):
+            if new_tt == other_tt:
+                minor[dest] = value
+            elif value[1] is None and dest in changes.salvaged:
+                pass
+            elif other[1] is None and dest in changes.salvaged:
+                minor[dest] = value
+            elif not isancestor(new_tt, other_tt):
+                minor[dest] = value
+            elif dest in changes.merged:
                 minor[dest] = value