diff --git a/mercurial/help/templates.txt b/mercurial/help/templates.txt --- a/mercurial/help/templates.txt +++ b/mercurial/help/templates.txt @@ -62,6 +62,8 @@ In addition to filters, there are some b - rstdoc(text, style) +- strip(text, chars) + Also, for any expression that returns a list, there is a list operator: - expr % "{template}" diff --git a/mercurial/templater.py b/mercurial/templater.py --- a/mercurial/templater.py +++ b/mercurial/templater.py @@ -333,6 +333,16 @@ def date(context, mapping, args): return util.datestr(date, fmt) return util.datestr(date) +def strip(context, mapping, args): + if not (1 <= len(args) <= 2): + raise error.ParseError(_("strip expects one or two arguments")) + + text = args[0][0](context, mapping, args[0][1]) + if len(args) == 2: + chars = args[1][0](context, mapping, args[1][1]) + return text.strip(chars) + return text.strip() + methods = { "string": lambda e, c: (runstring, e[1]), "symbol": lambda e, c: (runsymbol, e[1]), @@ -353,6 +363,7 @@ funcs = { "sub": sub, "fill": fill, "date": date, + "strip": strip, } # template engine 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 @@ -1536,3 +1536,31 @@ Test the sub function of templating for $ hg log -R latesttag -r 10 --template '{sub("[0-9]", "x", "{rev}")}\n' xx + +Test the strip function with chars specified: + + $ hg log -R latesttag --template '{desc}\n' + at3 + t5 + t3 + t2 + t1 + merge + h2e + h2d + h1c + b + a + + $ hg log -R latesttag --template '{strip(desc, "te")}\n' + at3 + 5 + 3 + 2 + 1 + merg + h2 + h2d + h1c + b + a