# HG changeset patch # User Martin von Zweigbergk # Date 1573841787 28800 # Node ID fa246ada356bdf62f071d3f2f2eb36929a51a84a # Parent 0fd9e7a1cf36aa74ea2c2f058cef08ccc11d0f2b templates: make {indent("", " ")} be empty indent() is documented to indent all non-empty lines, but it made an exception for the first line, which always got indented. I also made indent() not indent the first line even if an indent override was given for the first line. I think that is what one would usually want. Differential Revision: https://phab.mercurial-scm.org/D7432 diff -r 0fd9e7a1cf36 -r fa246ada356b mercurial/templatefilters.py --- a/mercurial/templatefilters.py Fri Nov 15 10:16:22 2019 -0800 +++ b/mercurial/templatefilters.py Fri Nov 15 10:16:27 2019 -0800 @@ -299,7 +299,7 @@ return dateutil.datestr(text, b'%Y-%m-%d %H:%M:%S %1%2') -def indent(text, prefix): +def indent(text, prefix, firstline=b''): '''indent each non-empty line of text after first with prefix.''' lines = text.splitlines() num_lines = len(lines) @@ -308,8 +308,8 @@ def indenter(): for i in pycompat.xrange(num_lines): l = lines[i] - if i and l.strip(): - yield prefix + if l.strip(): + yield prefix if i else firstline yield l if i < num_lines - 1 or endswithnewline: yield b'\n' diff -r 0fd9e7a1cf36 -r fa246ada356b mercurial/templatefuncs.py --- a/mercurial/templatefuncs.py Fri Nov 15 10:16:22 2019 -0800 +++ b/mercurial/templatefuncs.py Fri Nov 15 10:16:27 2019 -0800 @@ -310,13 +310,11 @@ text = evalstring(context, mapping, args[0]) indent = evalstring(context, mapping, args[1]) + firstline = indent if len(args) == 3: firstline = evalstring(context, mapping, args[2]) - else: - firstline = indent - # the indent function doesn't indent the first line, so we do it here - return templatefilters.indent(firstline + text, indent) + return templatefilters.indent(text, indent, firstline=firstline) @templatefunc(b'get(dict, key)') diff -r 0fd9e7a1cf36 -r fa246ada356b relnotes/next --- a/relnotes/next Fri Nov 15 10:16:22 2019 -0800 +++ b/relnotes/next Fri Nov 15 10:16:27 2019 -0800 @@ -6,6 +6,9 @@ == Bug Fixes == + * The `indent()` template function was documented to not indent empty lines, + but it still indented the first line even if it was empty. It no longer does + that. == Backwards Compatibility Changes == diff -r 0fd9e7a1cf36 -r fa246ada356b tests/test-template-functions.t --- a/tests/test-template-functions.t Fri Nov 15 10:16:22 2019 -0800 +++ b/tests/test-template-functions.t Fri Nov 15 10:16:27 2019 -0800 @@ -1507,16 +1507,16 @@ Test indent with empty first line $ hg version -T "{indent('', '>> ')}\n" - >> + $ hg version -T "{indent(' > second', '>> ')}\n" - >> + >> second $ hg version -T "{indent(' > second', '>> ', ' > ')}\n" - > + >> second Test with non-strings like dates