# HG changeset patch # User Hannes Oldenburg # Date 1474618505 0 # Node ID e83f89d3b1f733d0ee5f23f6a2293279a17fbbfb # Parent aca0954d37391eb63af5eddcf52e500ec571b4c2 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. diff -r aca0954d3739 -r e83f89d3b1f7 mercurial/help/templates.txt --- 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" diff -r aca0954d3739 -r e83f89d3b1f7 mercurial/templater.py --- 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 diff -r aca0954d3739 -r e83f89d3b1f7 tests/test-command-template.t --- 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 diff -r aca0954d3739 -r e83f89d3b1f7 tests/test-help.t --- 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