diff --git a/mercurial/copies.py b/mercurial/copies.py
--- a/mercurial/copies.py
+++ b/mercurial/copies.py
@@ -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
 
 
diff --git a/tests/test-copies-chain-merge.t b/tests/test-copies-chain-merge.t
--- a/tests/test-copies-chain-merge.t
+++ b/tests/test-copies-chain-merge.t
@@ -910,15 +910,15 @@
   o  0 i-0 initial commit: a b h
   
 
-BROKEN: 'a' should be the the source of 'd' in the changeset centric algorithm too
+'a' is the copy source of 'd'
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
   A d
-    a (filelog !)
+    a (no-compatibility !)
   R a
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
   A d
-    a (filelog !)
+    a (no-compatibility !)
   R a
   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
   A d
@@ -973,17 +973,17 @@
   o  0 i-0 initial commit: a b h
   
 
-BROKEN: 'a' should be the the source of 'd' in the changeset centric algorithm too
+'a' is the the copy source of 'd'
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
   M b
   A d
-    a (filelog !)
+    a (no-compatibility !)
   R a
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
   M b
   A d
-    a (filelog !)
+    a (no-compatibility !)
   R a
   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCB-revert-m-0")'
   M b