[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