[PATCH stable] histedit: add "amnd" command to fold commit data and drop message (issue4256)

adgar at google.com adgar at google.com
Thu Aug 7 13:43:22 CDT 2014


# HG changeset patch
# User Mike Edgar <adgar at google.com>
# Date 1407358301 14400
#      Wed Aug 06 16:51:41 2014 -0400
# Node ID 8723c4a5b7256ce436bdaf8476c18b0f2c875fff
# Parent  4354b1e35f533f72d5b6ccc76e8bc742f8cb5257
histedit: add "amnd" command to fold commit data and drop message (issue4256)

This new histedit command (short for "amend") acts like "hg amend" does for
working copy: it accumulates changes without interrupting the user and asking
for an updated commit message.

diff -r 4354b1e35f53 -r 8723c4a5b725 hgext/histedit.py
--- a/hgext/histedit.py	Wed Aug 06 12:16:58 2014 -0500
+++ 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
+ #  a, amnd = add commit content to one above, dropping message (hg amend)
  #  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
+ #  a, amnd = add commit content to one above, dropping message (hg amend)
  #  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
+#  a, amnd = add commit content to one above, dropping message (hg amend)
 #  d, drop = remove commit from history
 #  m, mess = edit message without changing commit content
 #
@@ -293,7 +296,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('amend'):
+        editor = cmdutil.getcommiteditor(edit=True, editform='histedit.fold')
     new = context.memctx(repo,
                          parents=parents,
                          text=message,
@@ -335,6 +340,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 amend(ui, repo, ctx, ha, opts):
+    amendopts = opts.copy()
+    amendopts['amend'] = True
+    return fold(ui, repo, ctx, ha, amendopts)
+
 def fold(ui, repo, ctx, ha, opts):
     oldctx = repo[ha]
     hg.update(repo, ctx.node())
@@ -362,10 +372,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('amend'):
+        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())
@@ -446,6 +459,8 @@
                'edit': edit,
                'f': fold,
                'fold': fold,
+               'a': amend,
+               'amnd': amend,
                'd': drop,
                'drop': drop,
                'm': message,
@@ -681,7 +696,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', 'a', 'amnd'):
             message = 'fold-temp-revision %s' % currentnode
         else:
             message = ctx.description()
@@ -704,15 +719,19 @@
         # to parent.
         replacements.append((ctx.node(), tuple(newchildren)))
 
-    if action in ('f', 'fold'):
+    if action in ('f', 'fold', 'a', 'amnd'):
         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 ('a', 'amnd'):
+                foldopts = foldopts.copy()
+                foldopts['amend'] = 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
diff -r 4354b1e35f53 -r 8723c4a5b725 tests/test-histedit-arguments.t
--- a/tests/test-histedit-arguments.t	Wed Aug 06 12:16:58 2014 -0500
+++ 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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  d, drop = remove commit from history
   #  m, mess = edit message without changing commit content
   #
diff -r 4354b1e35f53 -r 8723c4a5b725 tests/test-histedit-bookmark-motion.t
--- a/tests/test-histedit-bookmark-motion.t	Wed Aug 06 12:16:58 2014 -0500
+++ 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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  d, drop = remove commit from history
   #  m, mess = edit message without changing commit content
   #
diff -r 4354b1e35f53 -r 8723c4a5b725 tests/test-histedit-commute.t
--- a/tests/test-histedit-commute.t	Wed Aug 06 12:16:58 2014 -0500
+++ 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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  d, drop = remove commit from history
   #  m, mess = edit message without changing commit content
   #
diff -r 4354b1e35f53 -r 8723c4a5b725 tests/test-histedit-fold.t
--- a/tests/test-histedit-fold.t	Wed Aug 06 12:16:58 2014 -0500
+++ b/tests/test-histedit-fold.t	Wed Aug 06 16:51:41 2014 -0400
@@ -105,6 +105,50 @@
   
   
 
+amend will fold without preserving the folded commit's message
+
+  $ hg histedit d2ae7f538514 --commands - 2>&1 <<EOF | fixbundle
+  > pick d2ae7f538514 b
+  > amnd 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 amended 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
diff -r 4354b1e35f53 -r 8723c4a5b725 tests/test-histedit-obsolete.t
--- a/tests/test-histedit-obsolete.t	Wed Aug 06 12:16:58 2014 -0500
+++ 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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  d, drop = remove commit from history
   #  m, mess = edit message without changing commit content
   #
diff -r 4354b1e35f53 -r 8723c4a5b725 tests/test-histedit-outgoing.t
--- a/tests/test-histedit-outgoing.t	Wed Aug 06 12:16:58 2014 -0500
+++ 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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  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
+  #  a, amnd = add commit content to one above, dropping message (hg amend)
   #  d, drop = remove commit from history
   #  m, mess = edit message without changing commit content
   #


More information about the Mercurial-devel mailing list