From patchwork Sat Jun 6 00:16:08 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [V5] templater: introduce indent function From: Ryan McElroy X-Patchwork-Id: 9537 Message-Id: <8e77e317b0c651b9cbd9.1433549768@devbig105.prn2.facebook.com> To: Date: Fri, 5 Jun 2015 17:16:08 -0700 # HG changeset patch # User Ryan McElroy # Date 1428134632 25200 # Sat Apr 04 01:03:52 2015 -0700 # Node ID 8e77e317b0c651b9cbd9bee054f9b9a7d6912c1e # Parent c39640d26a4c7546faef00b9e5c02af45ab8bf5e templater: introduce indent function diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -327,6 +327,30 @@ def pad(context, mapping, args): else: return text.ljust(width, fillchar) +def indent(context, mapping, args): + """ + :indent(text, indentchars, firstline): Indents all non-empty lines + with the characters given in the indentchars string. An optional + third parameter will override the indent for the first line only + if present. + + Example: indent('hello\\n\\nworld', ' ', '> ') == "> hello\\n\\n world" + """ + if 2 > len(args) > 3: + # i18n: "indent" is a keyword + raise error.ParseError(_("indent() expects two or three arguments")) + + text = stringify(args[0][0](context, mapping, args[0][1])) + indent = stringify(args[1][0](context, mapping, args[1][1])) + + if len(args) == 3: + firstline = stringify(args[2][0](context, mapping, args[2][1])) + else: + firstline = indent + + # the indent function doesn't indent the first line, so we do it here + return templatefilters.indent(firstline + 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 @@ -607,6 +631,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 @@ -3252,3 +3252,21 @@ Test word for invalid numbers $ hg log -Gv -R a --template "{word('a', desc)}" hg: parse error: word expects an integer index [255] + +Test indent and not adding to empty lines + + $ hg log -T "-----\n{indent(desc, '>> ', ' > ')}\n" -r 0:1 -R a + ----- + > line 1 + >> line 2 + ----- + > other 1 + >> other 2 + + >> other 3 + +Test with non-strings like dates + + $ hg log -T "{indent(date, ' ')}\n" -r 2:3 -R a + 1200000.00 + 1300000.00