From patchwork Sat Sep 24 09:08:23 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [V3] templates: add built-in files() function From: Hannes Oldenburg X-Patchwork-Id: 16776 Message-Id: <427d035e61a8a98b23f4.1474708103@localhost.localdomain> To: mercurial-devel@mercurial-scm.org Date: Sat, 24 Sep 2016 09:08:23 +0000 # HG changeset patch # User Hannes Oldenburg # Date 1474618505 0 # Fri Sep 23 08:15:05 2016 +0000 # Node ID 427d035e61a8a98b23f4b6248220b4d24db90cba # Parent b19c2679289cc5e9b51eac84b63c304bda0096dc 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 b19c2679289c -r 427d035e61a8 mercurial/help/templates.txt --- a/mercurial/help/templates.txt Thu Sep 22 12:36:30 2016 -0700 +++ 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 b19c2679289c -r 427d035e61a8 mercurial/templater.py --- a/mercurial/templater.py Thu Sep 22 12:36:30 2016 -0700 +++ 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 b19c2679289c -r 427d035e61a8 tests/test-command-template.t --- a/tests/test-command-template.t Thu Sep 22 12:36:30 2016 -0700 +++ 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 b19c2679289c -r 427d035e61a8 tests/test-help.t --- a/tests/test-help.t Thu Sep 22 12:36:30 2016 -0700 +++ 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