From patchwork Wed Feb 26 15:33:26 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: D8127: graft: always allow hg graft --base . (issue6248) From: phabricator X-Patchwork-Id: 45325 Message-Id: <8032a427f8d0adaa5ea11405d9ad72e9@localhost.localdomain> To: Phabricator Cc: mercurial-devel@mercurial-scm.org Date: Wed, 26 Feb 2020 15:33:26 +0000 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 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,