Patchwork D9130: salvaged: properly deal with salvaged file during copy tracing

login
register
mail settings
Submitter phabricator
Date Sept. 30, 2020, 1:11 p.m.
Message ID <differential-rev-PHID-DREV-anifyqm6b2auoi2tguiq-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/47346/
State Superseded
Headers show

Comments

phabricator - Sept. 30, 2020, 1:11 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  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.

REPOSITORY
  rHG Mercurial

BRANCH
  default

REVISION DETAIL
  https://phab.mercurial-scm.org/D9130

AFFECTED FILES
  mercurial/copies.py
  tests/test-copies-chain-merge.t

CHANGE DETAILS




To: marmoute, #hg-reviewers
Cc: mercurial-patches, mercurial-devel

Patch

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
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