hgext/mq.py
changeset 21234 b9a16ed5acec
parent 20959 b6e0616d08cb
child 21235 51069bf6366b
--- a/hgext/mq.py	Mon May 05 21:26:40 2014 +0900
+++ b/hgext/mq.py	Mon May 05 21:26:40 2014 +0900
@@ -1026,6 +1026,7 @@
            msg: a string or a no-argument function returning a string
         """
         msg = opts.get('msg')
+        editor = opts.get('editor')
         user = opts.get('user')
         date = opts.get('date')
         if date:
@@ -1078,12 +1079,23 @@
                         p.write("# User " + user + "\n")
                     if date:
                         p.write("# Date %s %s\n\n" % date)
-                if util.safehasattr(msg, '__call__'):
-                    msg = msg()
-                    repo.savecommitmessage(msg)
-                commitmsg = msg and msg or ("[mq]: %s" % patchfn)
+
+                defaultmsg = "[mq]: %s" % patchfn
+                if editor:
+                    origeditor = editor
+                    def desceditor(repo, ctx, subs):
+                        desc = origeditor(repo, ctx, subs)
+                        if desc.rstrip():
+                            return desc
+                        else:
+                            return defaultmsg
+                    commitmsg = msg
+                    editor = desceditor
+                else:
+                    commitmsg = msg or defaultmsg
+
                 n = newcommit(repo, None, commitmsg, user, date, match=match,
-                              force=True)
+                              force=True, editor=editor)
                 if n is None:
                     raise util.Abort(_("repo commit failed"))
                 try:
@@ -1092,8 +1104,9 @@
                     self.parseseries()
                     self.seriesdirty = True
                     self.applieddirty = True
-                    if msg:
-                        msg = msg + "\n\n"
+                    nctx = repo[n]
+                    if nctx.description() != defaultmsg.rstrip():
+                        msg = nctx.description() + "\n\n"
                         p.write(msg)
                     if commitfiles:
                         parent = self.qparents(repo, n)
@@ -2417,14 +2430,12 @@
     Returns 0 on successful creation of a new patch.
     """
     msg = cmdutil.logmessage(ui, opts)
-    def getmsg():
-        return ui.edit(msg, opts.get('user') or ui.username())
     q = repo.mq
     opts['msg'] = msg
     if opts.get('edit'):
-        opts['msg'] = getmsg
-    else:
-        opts['msg'] = msg
+        def editor(repo, ctx, subs):
+            return ui.edit(ctx.description() + "\n", ctx.user())
+        opts['editor'] = editor
     setupheaderopts(ui, opts)
     q.new(repo, patch, *args, **opts)
     q.savedirty()