--- a/hgext/histedit.py Tue Aug 12 09:39:14 2014 -0700
+++ b/hgext/histedit.py Wed Aug 06 16:51:41 2014 -0400
@@ -36,6 +36,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
@@ -57,6 +58,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
@@ -179,6 +181,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+# r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
@@ -291,7 +294,9 @@
extra = commitopts.get('extra')
parents = (first.p1().node(), first.p2().node())
- editor = cmdutil.getcommiteditor(edit=True, editform='histedit.fold')
+ editor = None
+ if not commitopts.get('rollup'):
+ editor = cmdutil.getcommiteditor(edit=True, editform='histedit.fold')
new = context.memctx(repo,
parents=parents,
text=message,
@@ -333,6 +338,11 @@
_('Make changes as needed, you may commit or record as needed now.\n'
'When you are finished, run hg histedit --continue to resume.'))
+def rollup(ui, repo, ctx, ha, opts):
+ rollupopts = opts.copy()
+ rollupopts['rollup'] = True
+ return fold(ui, repo, ctx, ha, rollupopts)
+
def fold(ui, repo, ctx, ha, opts):
oldctx = repo[ha]
hg.update(repo, ctx.node())
@@ -360,10 +370,13 @@
username = ui.username()
commitopts['user'] = username
# commit message
- newmessage = '\n***\n'.join(
- [ctx.description()] +
- [repo[r].description() for r in internalchanges] +
- [oldctx.description()]) + '\n'
+ if opts.get('rollup'):
+ newmessage = ctx.description()
+ else:
+ newmessage = '\n***\n'.join(
+ [ctx.description()] +
+ [repo[r].description() for r in internalchanges] +
+ [oldctx.description()]) + '\n'
commitopts['message'] = newmessage
# date
commitopts['date'] = max(ctx.date(), oldctx.date())
@@ -444,6 +457,8 @@
'edit': edit,
'f': fold,
'fold': fold,
+ 'r': rollup,
+ 'roll': rollup,
'd': drop,
'drop': drop,
'm': message,
@@ -679,7 +694,7 @@
m, a, r, d = repo.status()[:4]
if m or a or r or d:
# prepare the message for the commit to comes
- if action in ('f', 'fold'):
+ if action in ('f', 'fold', 'r', 'roll'):
message = 'fold-temp-revision %s' % currentnode
else:
message = ctx.description()
@@ -702,15 +717,19 @@
# to parent.
replacements.append((ctx.node(), tuple(newchildren)))
- if action in ('f', 'fold'):
+ if action in ('f', 'fold', 'r', 'roll'):
if newchildren:
# finalize fold operation if applicable
if new is None:
new = newchildren[-1]
else:
newchildren.pop() # remove new from internal changes
- parentctx, repl = finishfold(ui, repo, parentctx, ctx, new, opts,
- newchildren)
+ foldopts = opts
+ if action in ('r', 'roll'):
+ foldopts = foldopts.copy()
+ foldopts['rollup'] = True
+ parentctx, repl = finishfold(ui, repo, parentctx, ctx, new,
+ foldopts, newchildren)
replacements.extend(repl)
else:
# newchildren is empty if the fold did not result in any commit
--- a/tests/test-histedit-arguments.t Tue Aug 12 09:39:14 2014 -0700
+++ b/tests/test-histedit-arguments.t Wed Aug 06 16:51:41 2014 -0400
@@ -57,6 +57,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
@@ -255,6 +256,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
--- a/tests/test-histedit-bookmark-motion.t Tue Aug 12 09:39:14 2014 -0700
+++ b/tests/test-histedit-bookmark-motion.t Wed Aug 06 16:51:41 2014 -0400
@@ -73,6 +73,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
@@ -133,6 +134,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
--- a/tests/test-histedit-commute.t Tue Aug 12 09:39:14 2014 -0700
+++ b/tests/test-histedit-commute.t Wed Aug 06 16:51:41 2014 -0400
@@ -67,6 +67,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
@@ -344,6 +345,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
--- a/tests/test-histedit-fold-non-commute.t Tue Aug 12 09:39:14 2014 -0700
+++ b/tests/test-histedit-fold-non-commute.t Wed Aug 06 16:51:41 2014 -0400
@@ -183,3 +183,165 @@
f
$ cd ..
+
+Repeat test using "roll", not "fold". "roll" folds in changes but drops message
+
+ $ initrepo r2
+ $ cd r2
+
+Initial generation of the command files
+
+ $ EDITED="$TESTTMP/editedhistory.2"
+ $ hg log --template 'pick {node|short} {rev} {desc}\n' -r 3 >> $EDITED
+ $ hg log --template 'pick {node|short} {rev} {desc}\n' -r 4 >> $EDITED
+ $ hg log --template 'roll {node|short} {rev} {desc}\n' -r 7 >> $EDITED
+ $ hg log --template 'pick {node|short} {rev} {desc}\n' -r 5 >> $EDITED
+ $ hg log --template 'pick {node|short} {rev} {desc}\n' -r 6 >> $EDITED
+ $ cat $EDITED
+ pick 65a9a84f33fd 3 c
+ pick 00f1c5383965 4 d
+ roll 39522b764e3d 7 does not commute with e
+ pick 7b4e2f4b7bcd 5 e
+ pick 500cac37a696 6 f
+
+log before edit
+ $ hg log --graph
+ @ changeset: 7:39522b764e3d
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: does not commute with e
+ |
+ o changeset: 6:500cac37a696
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: f
+ |
+ o changeset: 5:7b4e2f4b7bcd
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: e
+ |
+ o changeset: 4:00f1c5383965
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: d
+ |
+ o changeset: 3:65a9a84f33fd
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c
+ |
+ o changeset: 2:da6535b52e45
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: b
+ |
+ o changeset: 1:c1f09da44841
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: a
+ |
+ o changeset: 0:1715188a53c7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Initial commit
+
+
+edit the history
+ $ hg histedit 3 --commands $EDITED 2>&1 | fixbundle
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ merging e
+ warning: conflicts during merge.
+ merging e incomplete! (edit conflicts, then use 'hg resolve --mark')
+ Fix up the change and run hg histedit --continue
+
+fix up
+ $ echo 'I can haz no commute' > e
+ $ hg resolve --mark e
+ (no more unresolved files)
+ $ hg histedit --continue 2>&1 | fixbundle | grep -v '2 files removed'
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ merging e
+ warning: conflicts during merge.
+ merging e incomplete! (edit conflicts, then use 'hg resolve --mark')
+ Fix up the change and run hg histedit --continue
+
+just continue this time
+ $ hg revert -r 'p1()' e
+ $ hg resolve --mark e
+ (no more unresolved files)
+ $ hg histedit --continue 2>&1 | fixbundle
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+log after edit
+ $ hg log --graph
+ @ changeset: 5:e7c4f5d4eb75
+ | tag: tip
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: f
+ |
+ o changeset: 4:803d1bb561fc
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: d
+ |
+ o changeset: 3:65a9a84f33fd
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: c
+ |
+ o changeset: 2:da6535b52e45
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: b
+ |
+ o changeset: 1:c1f09da44841
+ | user: test
+ | date: Thu Jan 01 00:00:00 1970 +0000
+ | summary: a
+ |
+ o changeset: 0:1715188a53c7
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ summary: Initial commit
+
+
+contents of e
+ $ hg cat e
+ I can haz no commute
+
+manifest
+ $ hg manifest
+ a
+ b
+ c
+ d
+ e
+ f
+
+description is taken from rollup target commit
+
+ $ hg log --debug --rev 4
+ changeset: 4:803d1bb561fceac3129ec778db9da249a3106fc3
+ phase: draft
+ parent: 3:65a9a84f33fdeb1ad5679b3941ec885d2b24027b
+ parent: -1:0000000000000000000000000000000000000000
+ manifest: 4:b068a323d969f22af1296ec6a5ea9384cef437ac
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ files: d e
+ extra: branch=default
+ extra: histedit_source=00f1c53839651fa5c76d423606811ea5455a79d0,39522b764e3d26103f08bd1fa2ccd3e3d7dbcf4e
+ description:
+ d
+
+
+
+done with repo r2
+
+ $ cd ..
--- a/tests/test-histedit-fold.t Tue Aug 12 09:39:14 2014 -0700
+++ b/tests/test-histedit-fold.t Wed Aug 06 16:51:41 2014 -0400
@@ -105,6 +105,50 @@
+rollup will fold without preserving the folded commit's message
+
+ $ hg histedit d2ae7f538514 --commands - 2>&1 <<EOF | fixbundle
+ > pick d2ae7f538514 b
+ > roll ee283cb5f2d5 e
+ > pick 6de59d13424a f
+ > pick 9c277da72c9b d
+ > EOF
+ 0 files updated, 0 files merged, 4 files removed, 0 files unresolved
+ 0 files updated, 0 files merged, 2 files removed, 0 files unresolved
+ 2 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+ 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
+
+log after edit
+ $ hg logt --graph
+ @ 3:c4a9eb7989fc d
+ |
+ o 2:8e03a72b6f83 f
+ |
+ o 1:391ee782c689 b
+ |
+ o 0:cb9a9f314b8b a
+
+
+description is taken from rollup target commit
+
+ $ hg log --debug --rev 1
+ changeset: 1:391ee782c68930be438ccf4c6a403daedbfbffa5
+ phase: draft
+ parent: 0:cb9a9f314b8b07ba71012fcdbc544b5a4d82ff5b
+ parent: -1:0000000000000000000000000000000000000000
+ manifest: 1:b5e112a3a8354e269b1524729f0918662d847c38
+ user: test
+ date: Thu Jan 01 00:00:00 1970 +0000
+ files+: b e
+ extra: branch=default
+ extra: histedit_source=d2ae7f538514cd87c17547b0de4cea71fe1af9fb,ee283cb5f2d5955443f23a27b697a04339e9a39a
+ description:
+ b
+
+
+
check saving last-message.txt
$ cat > $TESTTMP/abortfolding.py <<EOF
@@ -128,9 +172,9 @@
> EOF
$ rm -f .hg/last-message.txt
- $ HGEDITOR="sh $TESTTMP/editor.sh" hg histedit 6de59d13424a --commands - 2>&1 <<EOF | fixbundle
- > pick 6de59d13424a f
- > fold 9c277da72c9b d
+ $ HGEDITOR="sh $TESTTMP/editor.sh" hg histedit 8e03a72b6f83 --commands - 2>&1 <<EOF | fixbundle
+ > pick 8e03a72b6f83 f
+ > fold c4a9eb7989fc d
> EOF
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
allow non-folding commit
--- a/tests/test-histedit-obsolete.t Tue Aug 12 09:39:14 2014 -0700
+++ b/tests/test-histedit-obsolete.t Wed Aug 06 16:51:41 2014 -0400
@@ -57,6 +57,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
--- a/tests/test-histedit-outgoing.t Tue Aug 12 09:39:14 2014 -0700
+++ b/tests/test-histedit-outgoing.t Wed Aug 06 16:51:41 2014 -0400
@@ -49,6 +49,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
@@ -80,6 +81,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#
@@ -103,6 +105,7 @@
# p, pick = use commit
# e, edit = use commit, but stop for amending
# f, fold = use commit, but combine it with the one above
+ # r, roll = like fold, but discard this commit's description
# d, drop = remove commit from history
# m, mess = edit message without changing commit content
#