From patchwork Tue Apr 14 17:00:35 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [V3] templater: introduce indent function From: Ryan McElroy X-Patchwork-Id: 8650 Message-Id: <62c312bd92edb3d21abd.1429030835@devbig105.prn2.facebook.com> To: Cc: rmcelroy@fb.com Date: Tue, 14 Apr 2015 10:00:35 -0700 # HG changeset patch # User Ryan McElroy # Date 1428134632 25200 # Sat Apr 04 01:03:52 2015 -0700 # Node ID 62c312bd92edb3d21abdb7c2946e9a8c640fce9a # Parent e0e28e910fa3797fd0aa4f818e9b33c5bcbf0e53 templater: introduce indent function diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -301,6 +301,22 @@ def pad(context, mapping, args): else: return text.ljust(width, fillchar) +def indent(context, mapping, args): + """ + :indent(text, indentchars): Indents all non-empty lines with the + characters given in the indentchars string. + Example: indent('hello\\n\\nworld', ' ') == " hello\\n\\n world" + """ + if len(args) != 2: + # i18n: "indent" is a keyword + raise error.ParseError(_("indent() expects two arguments")) + + text = stringify(args[0][0](context, mapping, args[0][1])) + indent = stringify(args[1][0](context, mapping, args[1][1])) + + # the indent function doesn't indent the first line, so we do it here + return templatefilters.indent(indent + text, indent) + def get(context, mapping, args): """:get(dict, key): Get an attribute/key from an object. Some keywords are complex types. This function allows you to obtain the value of an @@ -571,6 +587,7 @@ funcs = { "if": if_, "ifcontains": ifcontains, "ifeq": ifeq, + "indent": indent, "join": join, "label": label, "pad": pad, diff --git a/tests/test-command-template.t b/tests/test-command-template.t --- a/tests/test-command-template.t +++ b/tests/test-command-template.t @@ -2554,3 +2554,33 @@ Test word error messages for not enough $ hg log -Gv -R a --template "{word('0', desc, 'o', 'h', 'b', 'o', 'y')}" hg: parse error: word expects two or three arguments, got 7 [255] + +Test indent + + $ hg log -T " {indent(desc, ' ')}\n" -R a + future + third + second + merge + new head + new branch + no user, no domain + no person + other 1 + other 2 + + other 3 + line 1 + line 2 + + $ hg log -T " {indent(date, ' ')}\n" -R a + 1650326400.00 + 1577872860.00 + 1000000.00 + 1500001.00 + 1500000.00 + 1400000.00 + 1300000.00 + 1200000.00 + 1100000.00 + 1000000.00