Mercurial > hg
changeset 44095:e733c59f3c09
rebase: fix bug where `--collapse` would apply diff on missing file
Even though the file was missing, the rebase would succeed.
Differential Revision: https://phab.mercurial-scm.org/D7897
author | Martin von Zweigbergk <martinvonz@google.com> |
---|---|
date | Mon, 13 Jan 2020 11:18:29 -0800 |
parents | 521b4e3a42d7 |
children | e598c874b4af |
files | hgext/rebase.py tests/test-rebase-collapse.t |
diffstat | 2 files changed, 16 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/hgext/rebase.py Mon Jan 13 11:11:20 2020 -0800 +++ b/hgext/rebase.py Mon Jan 13 11:18:29 2020 -0800 @@ -1486,15 +1486,16 @@ repo.ui.debug(b" merge against %d:%s\n" % (rev, ctx)) if base is not None: repo.ui.debug(b" detach base %d:%s\n" % (base, repo[base])) - # When collapsing in-place, the parent is the common ancestor, we - # have to allow merging with it. + + # See explanation in merge.graft() + mergeancestor = repo.changelog.isancestor(p1ctx.node(), ctx.node()) stats = mergemod.update( repo, rev, branchmerge=True, force=True, ancestor=base, - mergeancestor=collapse, + mergeancestor=mergeancestor, labels=[b'dest', b'source'], wc=wctx, )
--- a/tests/test-rebase-collapse.t Mon Jan 13 11:11:20 2020 -0800 +++ b/tests/test-rebase-collapse.t Mon Jan 13 11:18:29 2020 -0800 @@ -288,6 +288,18 @@ $ hg rebase -s F --dest I --collapse # root (F) is not a merge rebasing 6:c82b08f646f1 "F" (F) + file 'E' was deleted in local [dest] but was modified in other [source]. + You can use (c)hanged version, leave (d)eleted, or leave (u)nresolved. + What do you want to do? u + unresolved conflicts (see hg resolve, then hg rebase --continue) + [1] + + $ echo F > E + $ hg resolve -m + (no more unresolved files) + continue: hg rebase --continue + $ hg rebase -c + rebasing 6:c82b08f646f1 "F" (F) rebasing 7:a6db7fa104e1 "G" (G) rebasing 8:e1d201b72d91 "H" (H tip) saved backup bundle to $TESTTMP/external-parent/.hg/strip-backup/c82b08f646f1-f2721fbf-rebase.hg