Patchwork D9795: copies: simplify the conditional for _filter's case 3

login
register
mail settings
Submitter phabricator
Date Jan. 15, 2021, 11:10 p.m.
Message ID <differential-rev-PHID-DREV-v4sci6e62fsg34rfazh5-req@mercurial-scm.org>
Download mbox | patch
Permalink /patch/48106/
State Superseded
Headers show

Comments

phabricator - Jan. 15, 2021, 11:10 p.m.
marmoute created this revision.
Herald added a reviewer: hg-reviewers.
Herald added a subscriber: mercurial-patches.

REVISION SUMMARY
  The conditional is much simpler and the test are actually happier. This
  clarification of the conditional will also be necessary to properly support tracing
  more renames in a coming changeset.

REPOSITORY
  rHG Mercurial

BRANCH
  default

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

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

CHANGE DETAILS




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

Patch

diff --git a/tests/test-copies.t b/tests/test-copies.t
--- a/tests/test-copies.t
+++ b/tests/test-copies.t
@@ -93,8 +93,8 @@ 
      x y
   $ hg debugp1copies -r 1
   x -> y
-Incorrectly doesn't show the rename
   $ hg debugpathcopies 0 1
+  x -> y (no-filelog !)
 
 Copy a file onto another file with same content. If metadata is stored in changeset, this does not
 produce a new filelog entry. The changeset's "files" entry should still list the file.
@@ -111,8 +111,8 @@ 
      x x2
   $ hg debugp1copies -r 1
   x -> x2
-Incorrectly doesn't show the rename
   $ hg debugpathcopies 0 1
+  x -> x2 (no-filelog !)
 
 Rename file in a loop: x->y->z->x
   $ newrepo
diff --git a/mercurial/copies.py b/mercurial/copies.py
--- a/mercurial/copies.py
+++ b/mercurial/copies.py
@@ -59,14 +59,13 @@ 
     # Cases 1, 3, and 5 are then removed by _filter().
 
     for k, v in list(t.items()):
-        # remove copies from files that didn't exist
-        if v not in src:  # case 5
+        if k == v:  # case 3
             del t[k]
-        # remove criss-crossed copies
-        elif k in src and v in dst:
+        elif v not in src:  # case 5
+            # remove copies from files that didn't exist
             del t[k]
-        # remove copies to files that were then removed
         elif k not in dst:  # case 1
+            # remove copies to files that were then removed
             del t[k]