# HG changeset patch # User Stefano Tortarolo # Date 2011-04-02 09:07:05 # Node ID 0995eee8ffe4a24478379fb16fd6c38812bc3dd5 # Parent 3c43dd85d3d130ad7c0a1b8ed0dd79e6988cb082 rebase: add --tool argument for specifying merge tool diff --git a/hgext/rebase.py b/hgext/rebase.py --- a/hgext/rebase.py +++ b/hgext/rebase.py @@ -114,6 +114,8 @@ def rebase(ui, repo, **opts): if srcf or basef or destf: raise util.Abort( _('abort and continue do not allow specifying revisions')) + if opts.get('tool', False): + ui.warn(_('tool option will be ignored\n')) (originalwd, target, state, skipped, collapsef, keepf, keepbranchesf, external) = restorestatus(repo) @@ -167,10 +169,14 @@ def rebase(ui, repo, **opts): if len(repo.parents()) == 2: repo.ui.debug('resuming interrupted rebase\n') else: - stats = rebasenode(repo, rev, p1, p2, state) - if stats and stats[3] > 0: - raise util.Abort(_('unresolved conflicts (see hg ' - 'resolve, then hg rebase --continue)')) + try: + ui.setconfig('ui', 'forcemerge', opts.get('tool', '')) + stats = rebasenode(repo, rev, p1, p2, state) + if stats and stats[3] > 0: + raise util.Abort(_('unresolved conflicts (see hg ' + 'resolve, then hg rebase --continue)')) + finally: + ui.setconfig('ui', 'forcemerge', '') updatedirstate(repo, rev, target, p2) if not collapsef: newrev = concludenode(repo, rev, p1, p2, extrafn=extrafn) @@ -592,6 +598,7 @@ cmdtable = { ('', 'keepbranches', False, _('keep original branch names')), ('', 'detach', False, _('force detaching of source from its original ' 'branch')), + ('t', 'tool', '', _('specify merge tool')), ('c', 'continue', False, _('continue an interrupted rebase')), ('a', 'abort', False, _('abort an interrupted rebase'))] + templateopts, diff --git a/tests/test-rebase-parameters.t b/tests/test-rebase-parameters.t --- a/tests/test-rebase-parameters.t +++ b/tests/test-rebase-parameters.t @@ -330,3 +330,63 @@ Specify base and dest (from 3 onto 6): $ cd .. +Test --tool parameter: + + $ hg init b + $ cd b + + $ echo c1 > c1 + $ hg ci -Am c1 + adding c1 + + $ echo c2 > c2 + $ hg ci -Am c2 + adding c2 + + $ hg up -q 0 + $ echo c2b > c2 + $ hg ci -Am c2b + adding c2 + created new head + + $ cd .. + + $ hg clone -q -u . b b1 + $ cd b1 + + $ hg rebase -s 2 -d 1 --tool internal:local + saved backup bundle to $TESTTMP/b1/.hg/strip-backup/*-backup.hg (glob) + + $ hg cat c2 + c2 + + $ cd .. + + + $ hg clone -q -u . b b2 + $ cd b2 + + $ hg rebase -s 2 -d 1 --tool internal:other + saved backup bundle to $TESTTMP/b2/.hg/strip-backup/*-backup.hg (glob) + + $ hg cat c2 + c2b + + $ cd .. + + + $ hg clone -q -u . b b3 + $ cd b3 + + $ hg rebase -s 2 -d 1 --tool internal:fail + abort: unresolved conflicts (see hg resolve, then hg rebase --continue) + [255] + + $ hg resolve -l + U c2 + + $ hg resolve -m c2 + $ hg rebase -c --tool internal:fail + tool option will be ignored + saved backup bundle to $TESTTMP/b3/.hg/strip-backup/*-backup.hg (glob) +