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

Pierre-Yves David pierre-yves.david at ens-lyon.org
Thu Aug 7 15:40:20 CDT 2014



On 08/07/2014 11:43 AM, adgar at google.com wrote:
> # 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)

"amnd" is a fairly cryptic. How about shortening it the same was as 
message? That would give use "amen".

On longer terms we could allow any subset of the command to be used (As 
we do for mercurial command line). a, amen and amend would be used. 
(Same would apply for others (eg: m, mess, messa, message)


>
> 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
>     #
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
>

-- 
Pierre-Yves David


More information about the Mercurial-devel mailing list