Patchwork [1,of,2] cat: explicitly document the supported formatter rules

login
register
mail settings
Submitter Matt Harbison
Date April 16, 2014, 4:45 a.m.
Message ID <3c598f1d1b79671030d3.1397623517@Envy>
Download mbox | patch
Permalink /patch/4382/
State Accepted
Commit 50107a4b32e7051ce58225aad905451357b121d8
Headers show

Comments

Matt Harbison - April 16, 2014, 4:45 a.m.
# HG changeset patch
# User Matt Harbison <matt_harbison@yahoo.com>
# Date 1397618959 14400
# Node ID 3c598f1d1b79671030d3e6a550dd8727f3429eb9
# Parent  157480606e029f97d01fdfeb16bd564aa83dcb59
cat: explicitly document the supported formatter rules

The previous documentation pointed to the export command, but even if the user
recognized that instead of only reading the cat specific list of rules, not all
of the export rules applied anyway (specifically %N, %n and %m).  The new items
are a copy/paste from export's list.  These rules have existed since at least
version 0.5.

Note that %m gets substituted with 'None' because the commit message isn't
passed to cmdutil.makefilename().  %R and %r are currently effectively the same,
since no revwidth is passed, however they both work.

There aren't any existing tests for these rules, so they are added to prevent
future regression.
Matt Mackall - April 16, 2014, 6:22 p.m.
On Wed, 2014-04-16 at 00:45 -0400, Matt Harbison wrote:
> # HG changeset patch
> # User Matt Harbison <matt_harbison@yahoo.com>
> # Date 1397618959 14400
> # Node ID 3c598f1d1b79671030d3e6a550dd8727f3429eb9
> # Parent  157480606e029f97d01fdfeb16bd564aa83dcb59
> cat: explicitly document the supported formatter rules

This one is queued for default, thanks.

Patch

diff --git a/mercurial/commands.py b/mercurial/commands.py
--- a/mercurial/commands.py
+++ b/mercurial/commands.py
@@ -1162,12 +1162,17 @@ 
     no revision is given, the parent of the working directory is used.
 
     Output may be to a file, in which case the name of the file is
-    given using a format string. The formatting rules are the same as
-    for the export command, with the following additions:
-
+    given using a format string. The formatting rules as follows:
+
+    :``%%``: literal "%" character
     :``%s``: basename of file being printed
     :``%d``: dirname of file being printed, or '.' if in repository root
     :``%p``: root-relative path name of file being printed
+    :``%H``: changeset hash (40 hexadecimal digits)
+    :``%R``: changeset revision number
+    :``%h``: short-form changeset hash (12 hexadecimal digits)
+    :``%r``: zero-padded changeset revision number
+    :``%b``: basename of the exporting repository
 
     Returns 0 on success.
     """
diff --git a/tests/test-cat.t b/tests/test-cat.t
--- a/tests/test-cat.t
+++ b/tests/test-cat.t
@@ -32,3 +32,22 @@ 
   1
   3
 
+  $ mkdir tmp
+  $ hg cat --output tmp/HH_%H c
+  $ hg cat --output tmp/RR_%R c
+  $ hg cat --output tmp/h_%h c
+  $ hg cat --output tmp/r_%r c
+  $ hg cat --output tmp/%s_s c
+  $ hg cat --output tmp/%d%%_d c
+  $ hg cat --output tmp/%p_p c
+  $ hg log -r . --template "{rev}: {node|short}\n"
+  2: 45116003780e
+  $ find tmp -type f | sort
+  tmp/.%_d
+  tmp/HH_45116003780e3678b333fb2c99fa7d559c8457e9
+  tmp/RR_2
+  tmp/c_p
+  tmp/c_s
+  tmp/h_45116003780e
+  tmp/r_2
+