Patchwork D8127: graft: always allow hg graft --base . (issue6248)

login
register
mail settings
Submitter phabricator
Date Feb. 26, 2020, 3:33 p.m.
Message ID <8032a427f8d0adaa5ea11405d9ad72e9@localhost.localdomain>
Download mbox | patch
Permalink /patch/45325/
State Not Applicable
Headers show

Comments

phabricator - Feb. 26, 2020, 3:33 p.m.
Closed by commit rHG2e534a710b15: graft: always allow hg graft --base . (issue6248) (authored by valentin.gatienbaron).
This revision was automatically updated to reflect the committed changes.
This revision was not accepted when it landed; it landed in state "Needs Review".

REPOSITORY
  rHG Mercurial

CHANGES SINCE LAST UPDATE
  https://phab.mercurial-scm.org/D8127?vs=20251&id=20308

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

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

AFFECTED FILES
  mercurial/merge.py
  tests/test-graft.t

CHANGE DETAILS




To: valentin.gatienbaron, #hg-reviewers, marmoute
Cc: marmoute, mercurial-devel

Patch

diff --git a/tests/test-graft.t b/tests/test-graft.t
--- a/tests/test-graft.t
+++ b/tests/test-graft.t
@@ -813,13 +813,14 @@ 
   note: graft of 19:9627f653b421 created no changes to commit
   grafting 0:68795b066622 "0"
 
-graft --force after backout
+graft --force after backout. Do the backout with graft too, to make
+sure we support issue6248.
 
   $ echo abc > a
   $ hg ci -m 24
-  $ hg backout 24
-  reverting a
-  changeset 25:71c4e63d4f98 backs out changeset 24:2e7ea477be26
+  $ hg graft --base . -r ".^" --no-commit
+  grafting 23:b1cac6de36a9 "0"
+  $ hg commit -m 'Backed out changeset 2e7ea477be26'
   $ hg graft 24
   skipping ancestor revision 24:2e7ea477be26
   [255]
diff --git a/mercurial/merge.py b/mercurial/merge.py
--- a/mercurial/merge.py
+++ b/mercurial/merge.py
@@ -2654,10 +2654,15 @@ 
     # to copy commits), and 2) informs update that the incoming changes are
     # newer than the destination so it doesn't prompt about "remote changed foo
     # which local deleted".
+    # We also pass mergeancestor=True when base is the same revision as p1. 2)
+    # doesn't matter as there can't possibly be conflicts, but 1) is necessary.
     wctx = wctx or repo[None]
     pctx = wctx.p1()
     base = base or ctx.p1()
-    mergeancestor = repo.changelog.isancestor(pctx.node(), ctx.node())
+    mergeancestor = (
+        repo.changelog.isancestor(pctx.node(), ctx.node())
+        or pctx.rev() == base.rev()
+    )
 
     stats = update(
         repo,