[Updated] D9159: [RFC] merge: stop caring about whether files are related (issue6163)

martinvonz (Martin von Zweigbergk) phabricator at mercurial-scm.org
Thu Oct 8 17:24:13 UTC 2020


martinvonz updated this revision to Diff 23113.

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D9159?vs=23111&id=23113

BRANCH
  default

CHANGES SINCE LAST ACTION
  https://phab.mercurial-scm.org/D9159/new/

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

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

CHANGE DETAILS

diff --git a/tests/test-copies-unrelated.t b/tests/test-copies-unrelated.t
--- a/tests/test-copies-unrelated.t
+++ b/tests/test-copies-unrelated.t
@@ -100,6 +100,13 @@
   |/   x
   o  0 add x
      x
+#if no-filelog
+  $ hg debugpathcopies 0 4
+  x -> y
+  $ hg graft -r 1
+  grafting 1:* "modify x" (glob)
+  merging y and x to y
+#else
   $ hg debugpathcopies 0 4
 BROKEN: This should succeed and merge the changes from x into y
   $ hg graft -r 1
@@ -110,6 +117,7 @@
   abort: unresolved conflicts, can't continue
   (use 'hg resolve' and 'hg graft --continue')
   [1]
+#endif
 
 Add x, remove it, then add it back, then rename x to y. Similar to the case
 above, but here the break in history is before the rename.
@@ -196,15 +204,9 @@
   [1]
 #endif
   $ hg co -qC 2
-BROKEN: This should succeed and merge the changes from x into y
   $ hg graft -r 5
   grafting 5:* "rename x to y"* (glob)
-  file 'x' was deleted in other [graft] but was modified in local [local].
-  You can use (c)hanged version, (d)elete, or leave (u)nresolved.
-  What do you want to do? u
-  abort: unresolved conflicts, can't continue
-  (use 'hg resolve' and 'hg graft --continue')
-  [1]
+  merging x and y to y
 
 Add x, remove it, then add it back, rename x to y from the first commit.
 Similar to the case above, but here the break in history is parallel to the
@@ -270,15 +272,9 @@
   $ hg graft -r 2
   grafting 2:* "add x again with different content" (glob)
   $ hg co -qC 2
-BROKEN: This should succeed and merge the changes from x into y
   $ hg graft -r 3
   grafting 3:* "rename x to y" (glob)
-  file 'x' was deleted in other [graft] but was modified in local [local].
-  You can use (c)hanged version, (d)elete, or leave (u)nresolved.
-  What do you want to do? u
-  abort: unresolved conflicts, can't continue
-  (use 'hg resolve' and 'hg graft --continue')
-  [1]
+  merging x and y to y
 
 Add x on two branches, then rename x to y on one side. Similar to the case
 above, but here the break in history is via the base commit.
@@ -364,15 +360,9 @@
   [1]
 #endif
   $ hg co -qC 2
-BROKEN: This should succeed and merge the changes from x into y
   $ hg graft -r 5
   grafting 5:* "rename x to y"* (glob)
-  file 'x' was deleted in other [graft] but was modified in local [local].
-  You can use (c)hanged version, (d)elete, or leave (u)nresolved.
-  What do you want to do? u
-  abort: unresolved conflicts, can't continue
-  (use 'hg resolve' and 'hg graft --continue')
-  [1]
+  merging x and y to y
 
 Copies via null revision (there shouldn't be any)
   $ newrepo
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
@@ -324,10 +324,12 @@
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBCm-1")'
   M b
   A d
+    a (no-filelog !)
   R a
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCBm-1")'
   M b
   A d
+    a (no-filelog !)
   R a
 
 Comparing with a merge re-adding the file afterward
@@ -429,10 +431,12 @@
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBDm-0")'
   M b
   A d
+    a (no-filelog !)
   R a
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDBm-0")'
   M b
   A d
+    a (no-filelog !)
   R a
 
 
@@ -743,7 +747,7 @@
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mDGm-0")'
   A d
-    a (filelog !)
+    a
   R a
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGDm-0")'
   A d
@@ -1010,11 +1014,11 @@
 
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCGm-0")'
   A d
-    a (no-compatibility no-changeset !)
+    a
   R a
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mGCm-0")'
   A d
-    a (no-compatibility no-changeset !)
+    a
   R a
   $ hg status --copies --rev 'desc("c-1")' --rev 'desc("mCGm-0")'
   A d
@@ -1074,12 +1078,12 @@
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mCB-revert-m-0")'
   M b
   A d
-    a (no-compatibility no-changeset !)
+    a
   R a
   $ hg status --copies --rev 'desc("i-0")' --rev 'desc("mBC-revert-m-0")'
   M b
   A d
-    a (no-compatibility no-changeset !)
+    a
   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
@@ -313,14 +313,6 @@
                         source = prev[1]
                     newcopies[dest] = (c, source)
                 assert newcopies is not copies
-            for f in changes.removed:
-                if f in newcopies:
-                    if newcopies is copies:
-                        # copy on write to avoid affecting potential other
-                        # branches.  when there are no other branches, this
-                        # could be avoided.
-                        newcopies = copies.copy()
-                    newcopies[f] = (c, None)
             othercopies = all_copies.get(c)
             if othercopies is None:
                 all_copies[c] = newcopies
@@ -390,7 +382,6 @@
     * p2: revision number of first parent
     * p1copies: mapping of copies from p1
     * p2copies: mapping of copies from p2
-    * removed: a list of removed files
     * ismerged: a callback to know if file was merged in that revision
     """
     cl = repo.changelog
@@ -416,8 +407,7 @@
         p1, p2 = parents(rev)
         ctx = repo[rev]
         p1copies, p2copies = ctx._copies
-        removed = ctx.filesremoved()
-        return p1, p2, p1copies, p2copies, removed, get_ismerged(rev)
+        return p1, p2, p1copies, p2copies, get_ismerged(rev)
 
     return revinfo
 
@@ -435,7 +425,7 @@
             # this is a root
             copies = {}
         for i, c in enumerate(children[r]):
-            p1, p2, p1copies, p2copies, removed, ismerged = revinfo(c)
+            p1, p2, p1copies, p2copies, ismerged = revinfo(c)
             if r == p1:
                 parent = 1
                 childcopies = p1copies
@@ -456,14 +446,6 @@
                         source = prev[1]
                     newcopies[dest] = (c, source)
                 assert newcopies is not copies
-            for f in removed:
-                if f in newcopies:
-                    if newcopies is copies:
-                        # copy on write to avoid affecting potential other
-                        # branches.  when there are no other branches, this
-                        # could be avoided.
-                        newcopies = copies.copy()
-                    newcopies[f] = (c, None)
             othercopies = all_copies.get(c)
             if othercopies is None:
                 all_copies[c] = newcopies
@@ -693,8 +675,6 @@
         # thing in pathcopies(): pathcopies(x, y) can return a copy where the
         # destination doesn't exist in y.
         pass
-    elif mb[src] != m2[src] and not _related(c2[src], base[src]):
-        return
     elif mb[src] != m2[src] or mb.flags(src) != m2.flags(src):
         # modified on side 2
         for dst in dsts1:



To: martinvonz, #hg-reviewers, marmoute
Cc: marmoute, mercurial-patches
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mercurial-scm.org/pipermail/mercurial-patches/attachments/20201008/8ef721d8/attachment-0002.html>


More information about the Mercurial-patches mailing list