Make {file_copies} usable as a --template key
Before this, to display file copies in templates, you had to write something
like {file_copies%filecopy}. For some reason, the {file_copy} subtemplate was
used by default but not defined by default in changeset_templater, while styles
were already using it. Here we define {file_copy} in changeset_templater, and
change the templater to handle formatting strings like {file_copies%filecopy}
with already expanded keys (in this case {file_copies}), for backward
compatibility.
--- a/mercurial/cmdutil.py Sun Dec 13 18:06:24 2009 +0100
+++ b/mercurial/cmdutil.py Sun Dec 13 18:06:24 2009 +0100
@@ -757,12 +757,16 @@
def __init__(self, ui, repo, patch, diffopts, mapfile, buffered):
changeset_printer.__init__(self, ui, repo, patch, diffopts, buffered)
formatnode = ui.debugflag and (lambda x: x) or (lambda x: x[:12])
+ defaulttempl = {
+ 'parent': '{rev}:{node|formatnode} ',
+ 'manifest': '{rev}:{node|formatnode}',
+ 'file_copy': '{name} ({source})',
+ 'extra': '{key}={value|stringescape}'
+ }
+ # filecopy is preserved for compatibility reasons
+ defaulttempl['filecopy'] = defaulttempl['file_copy']
self.t = templater.templater(mapfile, {'formatnode': formatnode},
- cache={
- 'parent': '{rev}:{node|formatnode} ',
- 'manifest': '{rev}:{node|formatnode}',
- 'filecopy': '{name} ({source})',
- 'extra': '{key}={value|stringescape}'})
+ cache=defaulttempl)
self.cache = {}
def use_template(self, t):
--- a/mercurial/help/templates.txt Sun Dec 13 18:06:24 2009 +0100
+++ b/mercurial/help/templates.txt Sun Dec 13 18:06:24 2009 +0100
@@ -34,6 +34,10 @@
:files: List of strings. All files modified, added, or removed
by this changeset.
:file_adds: List of strings. Files added by this changeset.
+:file_copies: List of strings. Files copied in this changeset with
+ their sources.
+:file_copies_switch: List of strings. Like "file_copies" but displayed
+ only if the --copied switch is set.
:file_mods: List of strings. Files modified by this changeset.
:file_dels: List of strings. Files removed by this changeset.
:node: String. The changeset identification hash, as a
--- a/mercurial/templater.py Sun Dec 13 18:06:24 2009 +0100
+++ b/mercurial/templater.py Sun Dec 13 18:06:24 2009 +0100
@@ -77,8 +77,14 @@
raise SyntaxError(_("error expanding '%s%%%s'") % (key, format))
lm = map.copy()
for i in v:
- lm.update(i)
- yield self.process(format, lm)
+ if isinstance(i, dict):
+ lm.update(i)
+ yield self.process(format, lm)
+ else:
+ # v is not an iterable of dicts, this happen when 'key'
+ # has been fully expanded already and format is useless.
+ # If so, return the expanded value.
+ yield i
def _filter(self, expr, get, map):
if expr not in self.cache:
--- a/tests/test-command-template Sun Dec 13 18:06:24 2009 +0100
+++ b/tests/test-command-template Sun Dec 13 18:06:24 2009 +0100
@@ -94,7 +94,7 @@
echo "# keys work"
for key in author branches date desc file_adds file_dels file_mods \
- 'file_copies%filecopy' 'file_copies_switch%filecopy' files \
+ file_copies file_copies_switch files \
manifest node parents rev tags diffstat extras; do
for mode in '' --verbose --debug; do
hg log $mode --template "$key$mode: {$key}\n"
--- a/tests/test-command-template.out Sun Dec 13 18:06:24 2009 +0100
+++ b/tests/test-command-template.out Sun Dec 13 18:06:24 2009 +0100
@@ -380,60 +380,60 @@
file_mods--debug:
file_mods--debug:
file_mods--debug:
-file_copies%filecopy: fourth (second)
-file_copies%filecopy:
-file_copies%filecopy:
-file_copies%filecopy:
-file_copies%filecopy:
-file_copies%filecopy:
-file_copies%filecopy:
-file_copies%filecopy:
-file_copies%filecopy:
-file_copies%filecopy--verbose: fourth (second)
-file_copies%filecopy--verbose:
-file_copies%filecopy--verbose:
-file_copies%filecopy--verbose:
-file_copies%filecopy--verbose:
-file_copies%filecopy--verbose:
-file_copies%filecopy--verbose:
-file_copies%filecopy--verbose:
-file_copies%filecopy--verbose:
-file_copies%filecopy--debug: fourth (second)
-file_copies%filecopy--debug:
-file_copies%filecopy--debug:
-file_copies%filecopy--debug:
-file_copies%filecopy--debug:
-file_copies%filecopy--debug:
-file_copies%filecopy--debug:
-file_copies%filecopy--debug:
-file_copies%filecopy--debug:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--verbose:
-file_copies_switch%filecopy--debug:
-file_copies_switch%filecopy--debug:
-file_copies_switch%filecopy--debug:
-file_copies_switch%filecopy--debug:
-file_copies_switch%filecopy--debug:
-file_copies_switch%filecopy--debug:
-file_copies_switch%filecopy--debug:
-file_copies_switch%filecopy--debug:
-file_copies_switch%filecopy--debug:
+file_copies: fourth (second)
+file_copies:
+file_copies:
+file_copies:
+file_copies:
+file_copies:
+file_copies:
+file_copies:
+file_copies:
+file_copies--verbose: fourth (second)
+file_copies--verbose:
+file_copies--verbose:
+file_copies--verbose:
+file_copies--verbose:
+file_copies--verbose:
+file_copies--verbose:
+file_copies--verbose:
+file_copies--verbose:
+file_copies--debug: fourth (second)
+file_copies--debug:
+file_copies--debug:
+file_copies--debug:
+file_copies--debug:
+file_copies--debug:
+file_copies--debug:
+file_copies--debug:
+file_copies--debug:
+file_copies_switch:
+file_copies_switch:
+file_copies_switch:
+file_copies_switch:
+file_copies_switch:
+file_copies_switch:
+file_copies_switch:
+file_copies_switch:
+file_copies_switch:
+file_copies_switch--verbose:
+file_copies_switch--verbose:
+file_copies_switch--verbose:
+file_copies_switch--verbose:
+file_copies_switch--verbose:
+file_copies_switch--verbose:
+file_copies_switch--verbose:
+file_copies_switch--verbose:
+file_copies_switch--verbose:
+file_copies_switch--debug:
+file_copies_switch--debug:
+file_copies_switch--debug:
+file_copies_switch--debug:
+file_copies_switch--debug:
+file_copies_switch--debug:
+file_copies_switch--debug:
+file_copies_switch--debug:
+file_copies_switch--debug:
files: fourth second third
files: second
files:
--- a/tests/test-git-import Sun Dec 13 18:06:24 2009 +0100
+++ b/tests/test-git-import Sun Dec 13 18:06:24 2009 +0100
@@ -141,7 +141,7 @@
rename from rename2
rename to rename3-2
EOF
-hg log -vr. --template '{rev} {files} / {file_copies%filecopy}\n'
+hg log -vr. --template '{rev} {files} / {file_copies}\n'
hg locate rename2 rename3 rename3-2
hg cat rename3
--- a/tests/test-log Sun Dec 13 18:06:24 2009 +0100
+++ b/tests/test-log Sun Dec 13 18:06:24 2009 +0100
@@ -32,23 +32,23 @@
hg log -vf e
echo '% log copies with --copies'
-hg log -vC --template '{rev} {file_copies%filecopy}\n'
-echo '% log copies switch without --copies'
+hg log -vC --template '{rev} {file_copies}\n'
+echo '% log copies switch without --copies, with old filecopy template'
hg log -v --template '{rev} {file_copies_switch%filecopy}\n'
echo '% log copies switch with --copies'
-hg log -vC --template '{rev} {file_copies_switch%filecopy}\n'
+hg log -vC --template '{rev} {file_copies_switch}\n'
echo % log copies, non-linear manifest
hg up -C 3
hg mv dir/b e
echo foo > foo
hg ci -Ame2 -d '6 0'
-hg log -v --template '{rev} {file_copies%filecopy}\n' -r 5
+hg log -v --template '{rev} {file_copies}\n' -r 5
echo % log copies, execute bit set
chmod +x e
hg ci -me3 -d '7 0'
-hg log -v --template '{rev} {file_copies%filecopy}\n' -r 6
+hg log -v --template '{rev} {file_copies}\n' -r 6
echo '% log -p d'
hg log -pv d
--- a/tests/test-log.out Sun Dec 13 18:06:24 2009 +0100
+++ b/tests/test-log.out Sun Dec 13 18:06:24 2009 +0100
@@ -82,7 +82,7 @@
2 dir/b (b)
1 b (a)
0
-% log copies switch without --copies
+% log copies switch without --copies, with old filecopy template
4
3
2
--- a/tests/test-mq Sun Dec 13 18:06:24 2009 +0100
+++ b/tests/test-mq Sun Dec 13 18:06:24 2009 +0100
@@ -387,10 +387,10 @@
hg up -C 1
hg qrefresh --git 2>&1 | grep -v 'saving bundle'
cat .hg/patches/bar
-hg log -v --template '{rev} {file_copies%filecopy}\n' -r .
+hg log -v --template '{rev} {file_copies}\n' -r .
hg qrefresh --git
cat .hg/patches/bar
-hg log -v --template '{rev} {file_copies%filecopy}\n' -r .
+hg log -v --template '{rev} {file_copies}\n' -r .
hg qrefresh
grep 'diff --git' .hg/patches/bar
@@ -403,12 +403,12 @@
hg mv baz bleh
hg qrefresh --git 2>&1 | grep -v 'saving bundle'
cat .hg/patches/bar
-hg log -v --template '{rev} {file_copies%filecopy}\n' -r .
+hg log -v --template '{rev} {file_copies}\n' -r .
hg mv quux fred
hg mv bleh barney
hg qrefresh --git
cat .hg/patches/bar
-hg log -v --template '{rev} {file_copies%filecopy}\n' -r .
+hg log -v --template '{rev} {file_copies}\n' -r .
echo % refresh omitting an added file
hg qnew baz