Patchwork [19,of,19] mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qrefresh/qfold)

login
register
mail settings
Submitter Katsunori FUJIWARA
Date May 10, 2014, 4:08 p.m.
Message ID <ef339ee3b9713c68705e.1399738134@feefifofum>
Download mbox | patch
Permalink /patch/4721/
State Accepted
Headers show

Comments

Katsunori FUJIWARA - May 10, 2014, 4:08 p.m.
# HG changeset patch
# User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
# Date 1399736976 -32400
#      Sun May 11 00:49:36 2014 +0900
# Node ID ef339ee3b9713c68705ec530bd83909196e5aa3e
# Parent  87dc4e9b6d12c91c485c33ce32043ac41dd80fcf
mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qrefresh/qfold)

This patch also replaces "editor = False" by "editor =
cmdutil.getcommiteditor()", because:

  - it allows to hook commit message determination easily, even in the
    case without "--edit"

  - it avoids regression (or additional care) around saving
    "last-message.txt", even if MQ's "newcommit()" changes its
    implementation logic from "localrepository.commit" to
    "localrepository.commitctx" with "memctx" in the future

    to save commit message into "last-messge.txt" with "memctx",
    "editor" should be valid function.
Siddharth Agarwal - May 16, 2014, 5:21 p.m.
On 05/10/2014 09:08 AM, FUJIWARA Katsunori wrote:
> # HG changeset patch
> # User FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
> # Date 1399736976 -32400
> #      Sun May 11 00:49:36 2014 +0900
> # Node ID ef339ee3b9713c68705ec530bd83909196e5aa3e
> # Parent  87dc4e9b6d12c91c485c33ce32043ac41dd80fcf
> mq: use the editor gotten by "getcommiteditor()" instead of "ui.edit()" (qrefresh/qfold)

These patches look great and have been queued, thanks.

>
> This patch also replaces "editor = False" by "editor =
> cmdutil.getcommiteditor()", because:
>
>    - it allows to hook commit message determination easily, even in the
>      case without "--edit"
>
>    - it avoids regression (or additional care) around saving
>      "last-message.txt", even if MQ's "newcommit()" changes its
>      implementation logic from "localrepository.commit" to
>      "localrepository.commitctx" with "memctx" in the future
>
>      to save commit message into "last-messge.txt" with "memctx",
>      "editor" should be valid function.
>
> diff --git a/hgext/mq.py b/hgext/mq.py
> --- a/hgext/mq.py
> +++ b/hgext/mq.py
> @@ -1656,17 +1656,18 @@
>                   # might be nice to attempt to roll back strip after this
>   
>                   defaultmsg = "[mq]: %s" % patchfn
> -                editor = False
> +                editor = cmdutil.getcommiteditor()
>                   if edit:
> -                    def desceditor(repo, ctx, subs):
> -                        desc = self.ui.edit(ctx.description() + "\n",
> -                                            ctx.user())
> +                    def finishdesc(desc):
>                           if desc.rstrip():
>                               ph.setmessage(desc)
>                               return desc
>                           return defaultmsg
> +                    # i18n: this message is shown in editor with "HG: " prefix
> +                    extramsg = _('Leave message empty to use default message.')
> +                    editor = cmdutil.getcommiteditor(finishdesc=finishdesc,
> +                                                     extramsg=extramsg)
>                       message = msg or "\n".join(ph.message)
> -                    editor = desceditor
>                   elif not msg:
>                       if not ph.message:
>                           message = defaultmsg
> diff --git a/tests/test-mq-qfold.t b/tests/test-mq-qfold.t
> --- a/tests/test-mq-qfold.t
> +++ b/tests/test-mq-qfold.t
> @@ -20,6 +20,8 @@
>     $ hg qnew -f p3
>   
>   Fold in the middle of the queue:
> +(this tests also that editor is not invoked if '--edit' is not
> +specified)
>   
>     $ hg qpop p1
>     popping p3
> @@ -34,7 +36,7 @@
>      a
>     +a
>   
> -  $ hg qfold p2
> +  $ HGEDITOR=cat hg qfold p2
>     $ grep git .hg/patches/p1 && echo 'git patch found!'
>     [1]
>   
> @@ -215,6 +217,15 @@
>     $ HGEDITOR="sh $TESTTMP/editor.sh" hg qfold -e p3
>     ==== before editing
>     original message
> +
> +
> +  HG: Enter commit message.  Lines beginning with 'HG:' are removed.
> +  HG: Leave message empty to use default message.
> +  HG: --
> +  HG: user: test
> +  HG: branch 'default'
> +  HG: added aa
> +  HG: changed a
>     ====
>     transaction abort!
>     rollback completed
> @@ -225,7 +236,26 @@
>     $ cat .hg/last-message.txt
>     original message
>     
> +
> +
>     test saving last-message.txt
>   
> +(confirm whether files listed up in the commit message editing are correct)
> +
> +  $ cat >> .hg/hgrc <<EOF
> +  > [hooks]
> +  > pretxncommit.unexpectedabort =
> +  > EOF
> +  $ hg status -u | while read f; do rm ${f}; done
> +  $ hg revert --no-backup -q --all
> +  $ hg qpush -q git
> +  now at: git
> +  $ hg qpush -q --move p3
> +  now at: p3
> +
> +  $ hg status --rev "git^1" --rev . -arm
> +  M a
> +  A aa
> +
>     $ cd ..
>   
> diff --git a/tests/test-mq-qrefresh-replace-log-message.t b/tests/test-mq-qrefresh-replace-log-message.t
> --- a/tests/test-mq-qrefresh-replace-log-message.t
> +++ b/tests/test-mq-qrefresh-replace-log-message.t
> @@ -6,6 +6,8 @@
>     $ hg qinit
>   
>   Should fail if no patches applied
> +(this tests also that editor is not invoked if '--edit' is not
> +specified)
>   
>     $ hg qrefresh
>     no patches applied
> @@ -16,7 +18,7 @@
>     $ hg qnew -m "First commit message" first-patch
>     $ echo aaaa > file
>     $ hg add file
> -  $ hg qrefresh
> +  $ HGEDITOR=cat hg qrefresh
>   
>   Should display 'First commit message'
>   
> @@ -126,10 +128,20 @@
>     > EOF
>   
>     $ rm -f .hg/last-message.txt
> +  $ hg status --rev "second-patch^1" -arm
> +  A file2
>     $ HGEDITOR="sh $TESTTMP/editor.sh" hg qrefresh -e
>     ==== before editing
>     Fifth commit message
>      This is the 5th log message
> +
> +
> +  HG: Enter commit message.  Lines beginning with 'HG:' are removed.
> +  HG: Leave message empty to use default message.
> +  HG: --
> +  HG: user: test
> +  HG: branch 'default'
> +  HG: added file2
>     ====
>     transaction abort!
>     rollback completed
> @@ -141,4 +153,6 @@
>     Fifth commit message
>      This is the 5th log message
>     
> +
> +
>     test saving last-message.txt
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel

Patch

diff --git a/hgext/mq.py b/hgext/mq.py
--- a/hgext/mq.py
+++ b/hgext/mq.py
@@ -1656,17 +1656,18 @@ 
                 # might be nice to attempt to roll back strip after this
 
                 defaultmsg = "[mq]: %s" % patchfn
-                editor = False
+                editor = cmdutil.getcommiteditor()
                 if edit:
-                    def desceditor(repo, ctx, subs):
-                        desc = self.ui.edit(ctx.description() + "\n",
-                                            ctx.user())
+                    def finishdesc(desc):
                         if desc.rstrip():
                             ph.setmessage(desc)
                             return desc
                         return defaultmsg
+                    # i18n: this message is shown in editor with "HG: " prefix
+                    extramsg = _('Leave message empty to use default message.')
+                    editor = cmdutil.getcommiteditor(finishdesc=finishdesc,
+                                                     extramsg=extramsg)
                     message = msg or "\n".join(ph.message)
-                    editor = desceditor
                 elif not msg:
                     if not ph.message:
                         message = defaultmsg
diff --git a/tests/test-mq-qfold.t b/tests/test-mq-qfold.t
--- a/tests/test-mq-qfold.t
+++ b/tests/test-mq-qfold.t
@@ -20,6 +20,8 @@ 
   $ hg qnew -f p3
 
 Fold in the middle of the queue:
+(this tests also that editor is not invoked if '--edit' is not
+specified)
 
   $ hg qpop p1
   popping p3
@@ -34,7 +36,7 @@ 
    a
   +a
 
-  $ hg qfold p2
+  $ HGEDITOR=cat hg qfold p2
   $ grep git .hg/patches/p1 && echo 'git patch found!'
   [1]
 
@@ -215,6 +217,15 @@ 
   $ HGEDITOR="sh $TESTTMP/editor.sh" hg qfold -e p3
   ==== before editing
   original message
+  
+  
+  HG: Enter commit message.  Lines beginning with 'HG:' are removed.
+  HG: Leave message empty to use default message.
+  HG: --
+  HG: user: test
+  HG: branch 'default'
+  HG: added aa
+  HG: changed a
   ====
   transaction abort!
   rollback completed
@@ -225,7 +236,26 @@ 
   $ cat .hg/last-message.txt
   original message
   
+  
+  
   test saving last-message.txt
 
+(confirm whether files listed up in the commit message editing are correct)
+
+  $ cat >> .hg/hgrc <<EOF
+  > [hooks]
+  > pretxncommit.unexpectedabort =
+  > EOF
+  $ hg status -u | while read f; do rm ${f}; done
+  $ hg revert --no-backup -q --all
+  $ hg qpush -q git
+  now at: git
+  $ hg qpush -q --move p3
+  now at: p3
+
+  $ hg status --rev "git^1" --rev . -arm
+  M a
+  A aa
+
   $ cd ..
 
diff --git a/tests/test-mq-qrefresh-replace-log-message.t b/tests/test-mq-qrefresh-replace-log-message.t
--- a/tests/test-mq-qrefresh-replace-log-message.t
+++ b/tests/test-mq-qrefresh-replace-log-message.t
@@ -6,6 +6,8 @@ 
   $ hg qinit
 
 Should fail if no patches applied
+(this tests also that editor is not invoked if '--edit' is not
+specified)
 
   $ hg qrefresh
   no patches applied
@@ -16,7 +18,7 @@ 
   $ hg qnew -m "First commit message" first-patch
   $ echo aaaa > file
   $ hg add file
-  $ hg qrefresh
+  $ HGEDITOR=cat hg qrefresh
 
 Should display 'First commit message'
 
@@ -126,10 +128,20 @@ 
   > EOF
 
   $ rm -f .hg/last-message.txt
+  $ hg status --rev "second-patch^1" -arm
+  A file2
   $ HGEDITOR="sh $TESTTMP/editor.sh" hg qrefresh -e
   ==== before editing
   Fifth commit message
    This is the 5th log message
+  
+  
+  HG: Enter commit message.  Lines beginning with 'HG:' are removed.
+  HG: Leave message empty to use default message.
+  HG: --
+  HG: user: test
+  HG: branch 'default'
+  HG: added file2
   ====
   transaction abort!
   rollback completed
@@ -141,4 +153,6 @@ 
   Fifth commit message
    This is the 5th log message
   
+  
+  
   test saving last-message.txt