rebase: add --tool argument for specifying merge tool
authorStefano Tortarolo <stefano.tortarolo@gmail.com>
Sat, 02 Apr 2011 11:07:05 +0200
changeset 13856 0995eee8ffe4
parent 13855 3c43dd85d3d1
child 13857 ba1f98f877ec
rebase: add --tool argument for specifying merge tool
hgext/rebase.py
tests/test-rebase-parameters.t
--- a/hgext/rebase.py	Fri Apr 01 22:44:58 2011 +0200
+++ b/hgext/rebase.py	Sat Apr 02 11:07:05 2011 +0200
@@ -114,6 +114,8 @@
             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 @@
                 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 @@
         ('', '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,
--- a/tests/test-rebase-parameters.t	Fri Apr 01 22:44:58 2011 +0200
+++ b/tests/test-rebase-parameters.t	Sat Apr 02 11:07:05 2011 +0200
@@ -330,3 +330,63 @@
   
   $ 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)
+