[PATCH] export: add %m to file format string (first line of the commit message)

Andrzej Bieniek andyhelp at googlemail.com
Thu Jul 28 02:56:43 CDT 2011


# HG changeset patch
# User Andrzej Bieniek <andyhelp at gmail.com>
# Date 1311839245 -3600
# Node ID c9ffd2310c4ef60c4862602554efb99a040c031f
# Parent  b4c06b97dfe0cae28497bc3ab85c075a173de8e6
export: add %m to file format string (first line of the commit message)

diff -r b4c06b97dfe0 -r c9ffd2310c4e mercurial/cmdutil.py
--- a/mercurial/cmdutil.py	Mon Jul 25 22:19:28 2011 +0300
+++ b/mercurial/cmdutil.py	Thu Jul 28 08:47:25 2011 +0100
@@ -109,12 +109,13 @@
         limit = None
     return limit
 
-def makefilename(repo, pat, node,
+def makefilename(repo, pat, node, desc=None,
                   total=None, seqno=None, revwidth=None, pathname=None):
     node_expander = {
         'H': lambda: hex(node),
         'R': lambda: str(repo.changelog.rev(node)),
         'h': lambda: short(node),
+        'm': lambda: re.sub('\s', '_', str(desc))
         }
     expander = {
         '%': lambda: '%',
@@ -154,7 +155,7 @@
         raise util.Abort(_("invalid format spec '%%%s' in output filename") %
                          inst.args[0])
 
-def makefileobj(repo, pat, node=None, total=None,
+def makefileobj(repo, pat, node=None, desc=None, total=None,
                 seqno=None, revwidth=None, mode='wb', pathname=None):
 
     writable = mode not in ('r', 'rb')
@@ -181,7 +182,7 @@
         return pat
     if hasattr(pat, 'read') and 'r' in mode:
         return pat
-    return open(makefilename(repo, pat, node, total, seqno, revwidth,
+    return open(makefilename(repo, pat, node, desc, total, seqno, revwidth,
                               pathname),
                 mode)
 
@@ -516,8 +517,10 @@
 
         shouldclose = False
         if not fp:
-            fp = makefileobj(repo, template, node, total=total, seqno=seqno,
-                             revwidth=revwidth, mode='ab')
+            desc_lines = ctx.description().rstrip().split('\n')
+            desc = desc_lines[0]    #Commit always has a first line.
+            fp = makefileobj(repo, template, node, desc=desc, total=total,
+                             seqno=seqno, revwidth=revwidth, mode='ab')
             if fp != template:
                 shouldclose = True
         if fp != sys.stdout and hasattr(fp, 'name'):
diff -r b4c06b97dfe0 -r c9ffd2310c4e mercurial/commands.py
--- a/mercurial/commands.py	Mon Jul 25 22:19:28 2011 +0300
+++ b/mercurial/commands.py	Thu Jul 28 08:47:25 2011 +0100
@@ -2228,6 +2228,7 @@
     :``%R``: changeset revision number
     :``%b``: basename of the exporting repository
     :``%h``: short-form changeset hash (12 hexadecimal digits)
+    :``%m``: first line of the commit message (white characters replaced by ``_``)
     :``%n``: zero-padded sequence number, starting at 1
     :``%r``: zero-padded changeset revision number
 


More information about the Mercurial-devel mailing list