templates: add built-in files() function
We already support multiple primitive for listing files, which were
affected by the current changeset.
This patch adds files() which returns files of the current changeset
matching a given pattern or fileset query via the "set:" prefix.
--- a/mercurial/help/templates.txt Sat Sep 17 17:02:56 2016 +1000
+++ b/mercurial/help/templates.txt Fri Sep 23 08:15:05 2016 +0000
@@ -95,6 +95,10 @@
$ hg log -r 0 --template "files: {join(files, ', ')}\n"
+- Join the list of files ending with ".py" with a ", "::
+
+ $ hg log -r 0 --template "pythonfiles: {join(files('**.py'), ', ')}\n"
+
- Separate non-empty arguments by a " "::
$ hg log -r 0 --template "{separate(' ', node, bookmarks, tags}\n"
--- a/mercurial/templater.py Sat Sep 17 17:02:56 2016 +1000
+++ b/mercurial/templater.py Fri Sep 23 08:15:05 2016 +0000
@@ -480,6 +480,20 @@
return ''.join(chunks)
+@templatefunc('files(pattern)')
+def files(context, mapping, args):
+ """All files of the current changeset matching the pattern. See
+ :hg:`help patterns`."""
+ if not len(args) == 1:
+ # i18n: "files" is a keyword
+ raise error.ParseError(_("files expects one argument"))
+
+ raw = evalstring(context, mapping, args[0])
+ ctx = mapping['ctx']
+ m = ctx.match([raw])
+ files = list(ctx.matches(m))
+ return templatekw.showlist("file", files, **mapping)
+
@templatefunc('fill(text[, width[, initialident[, hangindent]]])')
def fill(context, mapping, args):
"""Fill many
--- a/tests/test-command-template.t Sat Sep 17 17:02:56 2016 +1000
+++ b/tests/test-command-template.t Fri Sep 23 08:15:05 2016 +0000
@@ -3501,6 +3501,26 @@
5:13207e5a10d9fd28ec424934298e176197f2c67f,
4:bbe44766e73d5f11ed2177f1838de10c53ef3e74
+Test files function
+
+ $ hg log -T "{rev}\n{join(files('*'), '\n')}\n"
+ 2
+ a
+ aa
+ b
+ 1
+ a
+ 0
+ a
+
+ $ hg log -T "{rev}\n{join(files('aa'), '\n')}\n"
+ 2
+ aa
+ 1
+
+ 0
+
+
Test active bookmark templating
$ hg book foo
--- a/tests/test-help.t Sat Sep 17 17:02:56 2016 +1000
+++ b/tests/test-help.t Fri Sep 23 08:15:05 2016 +0000
@@ -1551,6 +1551,9 @@
$ hg help template.files
files List of strings. All files modified, added, or removed by
this changeset.
+ files(pattern)
+ All files of the current changeset matching the pattern. See
+ 'hg help patterns'.
Test section lookup by translated message