Patchwork [3,of,3,RFC] commit: preserve extra when amending with commit --amend

login
register
mail settings
Submitter adgar@google.com
Date Nov. 28, 2015, 9:14 a.m.
Message ID <389b9907470c61bc502a.1448702066@adgar.nyc.corp.google.com>
Download mbox | patch
Permalink /patch/11679/
State Accepted
Headers show

Comments

adgar@google.com - Nov. 28, 2015, 9:14 a.m.
# HG changeset patch
# User Mike Edgar <adgar@google.com>
# Date 1448701917 18000
#      Sat Nov 28 04:11:57 2015 -0500
# Node ID 389b9907470c61bc502a4e78724aa9b336d81cf6
# Parent  61b51342ac74bc0239a8aa4592ee8df1f70f91c0
commit: preserve extra when amending with commit --amend

The new extra propagation needs to be accounted for in cmdutil.amend,
when checking for a no-changes fast-path.
Augie Fackler - Dec. 1, 2015, 2:48 p.m.
On Sat, Nov 28, 2015 at 04:14:26AM -0500, Mike Edgar wrote:
> # HG changeset patch
> # User Mike Edgar <adgar@google.com>
> # Date 1448701917 18000
> #      Sat Nov 28 04:11:57 2015 -0500
> # Node ID 389b9907470c61bc502a4e78724aa9b336d81cf6
> # Parent  61b51342ac74bc0239a8aa4592ee8df1f70f91c0
> commit: preserve extra when amending with commit --amend

Nice cleanup, queued, thanks.

>
> The new extra propagation needs to be accounted for in cmdutil.amend,
> when checking for a no-changes fast-path.
>
> diff -r 61b51342ac74 -r 389b9907470c mercurial/cmdutil.py
> --- a/mercurial/cmdutil.py	Sat Nov 28 04:11:38 2015 -0500
> +++ b/mercurial/cmdutil.py	Sat Nov 28 04:11:57 2015 -0500
> @@ -2619,6 +2619,11 @@
>                  message = old.description()
>
>              pureextra = extra.copy()
> +            if 'amend_source' in pureextra:
> +                del pureextra['amend_source']
> +            pureoldextra = old.extra()
> +            if 'amend_source' in pureoldextra:
> +                del pureoldextra['amend_source']
>              extra['amend_source'] = old.hex()
>
>              new = context.memctx(repo,
> @@ -2636,7 +2641,7 @@
>                  and newdesc == old.description()
>                  and user == old.user()
>                  and date == old.date()
> -                and pureextra == old.extra()):
> +                and pureextra == pureoldextra):
>                  # nothing changed. continuing here would create a new node
>                  # anyway because of the amend_source noise.
>                  #
> diff -r 61b51342ac74 -r 389b9907470c mercurial/commands.py
> --- a/mercurial/commands.py	Sat Nov 28 04:11:38 2015 -0500
> +++ b/mercurial/commands.py	Sat Nov 28 04:11:57 2015 -0500
> @@ -1547,6 +1547,9 @@
>          if not allowunstable and old.children():
>              raise error.Abort(_('cannot amend changeset with children'))
>
> +        newextra = extra.copy()
> +        newextra['branch'] = branch
> +        extra = newextra
>          # commitfunc is used only for temporary amend commit by cmdutil.amend
>          def commitfunc(ui, repo, message, match, opts):
>              return repo.commit(message,
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> https://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff -r 61b51342ac74 -r 389b9907470c mercurial/cmdutil.py
--- a/mercurial/cmdutil.py	Sat Nov 28 04:11:38 2015 -0500
+++ b/mercurial/cmdutil.py	Sat Nov 28 04:11:57 2015 -0500
@@ -2619,6 +2619,11 @@ 
                 message = old.description()
 
             pureextra = extra.copy()
+            if 'amend_source' in pureextra:
+                del pureextra['amend_source']
+            pureoldextra = old.extra()
+            if 'amend_source' in pureoldextra:
+                del pureoldextra['amend_source']
             extra['amend_source'] = old.hex()
 
             new = context.memctx(repo,
@@ -2636,7 +2641,7 @@ 
                 and newdesc == old.description()
                 and user == old.user()
                 and date == old.date()
-                and pureextra == old.extra()):
+                and pureextra == pureoldextra):
                 # nothing changed. continuing here would create a new node
                 # anyway because of the amend_source noise.
                 #
diff -r 61b51342ac74 -r 389b9907470c mercurial/commands.py
--- a/mercurial/commands.py	Sat Nov 28 04:11:38 2015 -0500
+++ b/mercurial/commands.py	Sat Nov 28 04:11:57 2015 -0500
@@ -1547,6 +1547,9 @@ 
         if not allowunstable and old.children():
             raise error.Abort(_('cannot amend changeset with children'))
 
+        newextra = extra.copy()
+        newextra['branch'] = branch
+        extra = newextra
         # commitfunc is used only for temporary amend commit by cmdutil.amend
         def commitfunc(ui, repo, message, match, opts):
             return repo.commit(message,