--- a/mercurial/cmdutil.py Fri Jul 29 00:39:27 2011 +0200
+++ b/mercurial/cmdutil.py Sat Jul 30 11:08:45 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('[^\w]', '_', 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 util.safehasattr(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 util.safehasattr(fp, 'name'):
--- a/tests/test-export.t Fri Jul 29 00:39:27 2011 +0200
+++ b/tests/test-export.t Sat Jul 30 11:08:45 2011 +0100
@@ -7,7 +7,7 @@
> hg ci -m "foo-$i"
> done
- $ for out in "%nof%N" "%%%H" "%b-%R" "%h" "%r"; do
+ $ for out in "%nof%N" "%%%H" "%b-%R" "%h" "%r" "%m"; do
> echo
> echo "# foo-$out.patch"
> hg export -v -o "foo-$out.patch" 2:tip
@@ -77,6 +77,19 @@
foo-09.patch
foo-10.patch
foo-11.patch
+
+ # foo-%m.patch
+ exporting patches:
+ foo-foo_2.patch
+ foo-foo_3.patch
+ foo-foo_4.patch
+ foo-foo_5.patch
+ foo-foo_6.patch
+ foo-foo_7.patch
+ foo-foo_8.patch
+ foo-foo_9.patch
+ foo-foo_10.patch
+ foo-foo_11.patch
Exporting 4 changesets to a file:
@@ -108,3 +121,11 @@
foo-9
+foo-10
+Checking if only alphanumeric characters are used in the file name (%m option):
+
+ $ echo "line" >> foo
+ $ hg commit -m " !\"#$%&(,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\`abcdefghijklmnopqrstuvwxyz{|}~"
+ $ hg export -v -o %m.patch tip
+ exporting patch:
+ ____________0123456789_______ABCDEFGHIJKLMNOPQRSTUVWXYZ______abcdefghijklmnopqrstuvwxyz____.patch
+