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

Radomir Dopieralski hg at sheep.art.pl
Tue Mar 15 16:21:52 CDT 2011


# HG changeset patch
# User Radomir Dopieralski <sheep at stxnext.pl>
# Date 1300210416 -3600
# Node ID 9c45195f9e56eb44db6ed7658d7139e4d5f14a5f
# 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` (with short form `-m`) and `--logfile`
(with short form `-m`) options to the rebase command. These options suppresses
the generation of the default commit message, and instead use the message
provided in the option (in case of `-m`) or in the file it points to (in case
of `-l`).

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

diff -r 0652b2da832d -r 9c45195f9e56 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 = cmdutil.logmessage(opts)
         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,10 @@
         ('d', 'dest', '',
          _('rebase onto the specified changeset'), _('REV')),
         ('', 'collapse', False, _('collapse the rebased changesets')),
+        ('m', 'message', '', _('commit message to use with collapse, '
+                               'works only with --collapse'), _('TEXT')),
+        ('l', 'logfile', '',_('read commit message to use with collapse from '
+                              'file, works only with --collapse'), _('FILE')),
         ('', 'keep', False, _('keep original changesets')),
         ('', 'keepbranches', False, _('keep original branch names')),
         ('', 'detach', False, _('force detaching of source from its original '
diff -r 0652b2da832d -r 9c45195f9e56 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