[PATCH] rebase: add -m/--message to rebase --collapse (issue2389)

Radomir Dopieralski hg at sheep.art.pl
Tue Mar 15 13:51:19 CDT 2011


# HG changeset patch
# User Radomir Dopieralski <sheep at stxnext.pl>
# Date 1300210416 -3600
# Node ID 17a637aefc033030932d276620f03784d24c2b4f
# Parent  0652b2da832daada866a68f7a4359227570c2447
rebase: add -m/--message to rebase --collapse (issue2389)

When collapsing changesets with rebase, you get a chance to edit the commit
message manually, but there is no way to pass this message from the command
line. This patch adds a `--message` (and a short form `-m`) option to the
rebase command. This option suppresses the generation of the default commit
message, and instead uses the message provided in the option.

If you use this option without the `--collapse` option, it will raise an
error.

diff -r 0652b2da832d -r 17a637aefc03 hgext/rebase.py
--- a/hgext/rebase.py	Mon Mar 14 22:37:50 2011 +0100
+++ b/hgext/rebase.py	Tue Mar 15 18:33:36 2011 +0100
@@ -90,6 +90,7 @@
         contf = opts.get('continue')
         abortf = opts.get('abort')
         collapsef = opts.get('collapse', False)
+        collapsemsg = opts.get('message', '')
         extrafn = opts.get('extrafn') # internal, used by e.g. hgsubversion
         keepf = opts.get('keep', False)
         keepbranchesf = opts.get('keepbranches', False)
@@ -98,6 +99,10 @@
         # other extensions
         keepopen = opts.get('keepopen', False)
 
+        if collapsemsg and not collapsef:
+            raise util.Abort(
+                _('message can only be specified with collapse'))
+
         if contf or abortf:
             if contf and abortf:
                 raise util.Abort(_('cannot use both abort and continue'))
@@ -189,11 +194,14 @@
         if collapsef and not keepopen:
             p1, p2 = defineparents(repo, min(state), target,
                                                         state, targetancestors)
-            commitmsg = 'Collapsed revision'
-            for rebased in state:
-                if rebased not in skipped and state[rebased] != nullmerge:
-                    commitmsg += '\n* %s' % repo[rebased].description()
-            commitmsg = ui.edit(commitmsg, repo.ui.username())
+            if collapsemsg:
+                commitmsg = collapsemsg
+            else:
+                commitmsg = 'Collapsed revision'
+                for rebased in state:
+                    if rebased not in skipped and state[rebased] != nullmerge:
+                        commitmsg += '\n* %s' % repo[rebased].description()
+                commitmsg = ui.edit(commitmsg, repo.ui.username())
             newrev = concludenode(repo, rev, p1, external, commitmsg=commitmsg,
                                   extrafn=extrafn)
 
@@ -564,6 +572,7 @@
         ('d', 'dest', '',
          _('rebase onto the specified changeset'), _('REV')),
         ('', 'collapse', False, _('collapse the rebased changesets')),
+        ('m', 'message', '', _('commit message to use with collapse')),
         ('', 'keep', False, _('keep original changesets')),
         ('', 'keepbranches', False, _('keep original branch names')),
         ('', 'detach', False, _('force detaching of source from its original '
diff -r 0652b2da832d -r 17a637aefc03 tests/test-rebase-collapse.t
--- a/tests/test-rebase-collapse.t	Mon Mar 14 22:37:50 2011 +0100
+++ b/tests/test-rebase-collapse.t	Tue Mar 15 18:33:36 2011 +0100
@@ -137,6 +137,40 @@
 
   $ cd ..
 
+Rebasing G onto H with custom message:
+
+  $ hg clone -q -u . a a3
+  $ cd a3
+
+  $ hg rebase --base 6 -m 'custom message'
+  abort: message can only be specified with collapse
+  [255]
+
+  $ hg rebase --base 6 --collapse -m 'custom message'
+  saved backup bundle to $TESTTMP/a3/.hg/strip-backup/*-backup.hg (glob)
+
+  $ hg tglog
+  @  6: 'custom message'
+  |
+  o  5: 'H'
+  |
+  o  4: 'F'
+  |
+  | o  3: 'D'
+  | |
+  | o  2: 'C'
+  | |
+  | o  1: 'B'
+  |/
+  o  0: 'A'
+  
+  $ hg manifest
+  A
+  E
+  F
+  H
+
+  $ cd ..
 
 Create repo b:
 


More information about the Mercurial-devel mailing list