diff --git a/tests/test-graft.t b/tests/test-graft.t --- a/tests/test-graft.t +++ b/tests/test-graft.t @@ -1373,3 +1373,56 @@ note: graft of 7:d3c3f2b38ecc created no changes to commit $ cd .. + +Testing the reading of old format graftstate file with newer mercurial + + $ cat >> $TESTTMP/oldgraft.py < from __future__ import absolute_import + > from mercurial import merge, registrar, error + > cmdtable = {} + > command = registrar.command(cmdtable) + > @command('oldgraft', [('r', 'rev', [], 'revisions to graft')], ()) + > def oldgraft(ui, repo, *args, **opts): + > revs = opts[r'rev'] + > for pos, ctx in enumerate(repo.set("%ld", revs)): + > stats = merge.graft(repo, ctx, ctx.p1(), ['local', 'graft']) + > if stats and stats[3] > 0: + > nodelines = [repo[rev].hex() + "\n" for rev in revs[pos:]] + > with repo.wlock(), repo.vfs('graftstate', 'wb') as fp: + > fp.write(''.join(nodelines)) + > raise error.Abort("unresolved conflicts") + > else: + > raise error.Abort("this command is only to write an old state" + > "file for graft by creating conflicts. Doing graft without" + > "conflicts should not be done by this") + > EOF + + $ hg init oldgraft + $ cd oldgraft + $ for ch in a b c; do echo foo > $ch; hg add $ch; hg ci -Aqm "added "$ch; done; + $ hg log -GT "{rev}:{node|short} {desc}\n" + @ 2:8be98ac1a569 added c + | + o 1:80e6d2c47cfe added b + | + o 0:f7ad41964313 added a + + $ hg up 0 + 0 files updated, 0 files merged, 2 files removed, 0 files unresolved + $ echo bar > b + $ hg add b + $ hg ci -m "bar to b" + created new head + $ hg oldgraft -r 1 -r 2 --config extensions.oldgraft=$TESTTMP/oldgraft.py + merging b + warning: conflicts while merging b! (edit, then use 'hg resolve --mark') + abort: unresolved conflicts + [255] + + $ echo foo > b + $ hg resolve -m + (no more unresolved files) + continue: hg graft --continue + $ hg graft --continue + grafting 1:80e6d2c47cfe "added b" + grafting 2:8be98ac1a569 "added c"