[PATCH] templater: add 'env()' to fetch environment variables
Matt Harbison
mharbison72 at gmail.com
Sun Jan 15 15:33:53 EST 2017
On Sun, 15 Jan 2017 15:30:56 -0500, Matt Harbison <mharbison72 at gmail.com>
wrote:
> # HG changeset patch
> # User Matt Harbison <matt_harbison at yahoo.com>
> # Date 1484508143 18000
> # Sun Jan 15 14:22:23 2017 -0500
> # Node ID 2ba757de67ce1347d088a4d9f947efe5d407ffdd
> # Parent 4c0a5a256ae806fab18d56b3c44a8d1c98a40ce0
> templater: add 'env()' to fetch environment variables
>
> Template files ignore custom items in [templates] and [templatealias]
> (presumably by design). We have a couple repositories that host multiple
> products, and use tags consisting of product, OS, and version. The
> {latesttag}
> template supports a filtering pattern, but I didn't see any other way to
> get the
> customized pattern per product/OS into the file, without duplicating the
> file
> for each combination. (Yes, there is %include, but letting the build
> system
> supply this missing piece means the template file doesn't need
> maintenance as
> products come and go.)
>
> diff --git a/mercurial/templater.py b/mercurial/templater.py
> --- a/mercurial/templater.py
> +++ b/mercurial/templater.py
> @@ -14,6 +14,7 @@
> from .i18n import _
> from . import (
> config,
> + encoding,
> error,
> minirst,
> parser,
> @@ -505,6 +506,20 @@
> return ''.join(chunks)
> + at templatefunc('env([var])')
> +def env(context, mapping, args):
> + """A dictionary of environment variables, or the value of the
> single named
> + variable."""
> + if len(args) > 1:
> + # i18n: "env" is a keyword
> + raise error.ParseError(_("env expects at most one argument"))
> +
> + if len(args) == 0:
> + return encoding.environ
> +
> + raw = evalstring(context, mapping, args[0])
> + return pycompat.osgetenv(raw)
> +
There's a patch on the ML that changes pycompat.osgetenv ->
encoding.environ.get. If that gets accepted, I'm fine with a fix inflight.
> @templatefunc('files(pattern)')
> def files(context, mapping, args):
> """All files of the current changeset matching the pattern. See
> diff --git a/tests/test-tag.t b/tests/test-tag.t
> --- a/tests/test-tag.t
> +++ b/tests/test-tag.t
> @@ -468,6 +468,10 @@
> T: t6, C: 2, D: 2
> $ hg log -r . -T '{join(latesttag(), "*")}\n'
> t4*t6
> + $ pattern='t4' hg log -r '.' -T "{latesttag(env('pattern')) % 'T:
> {tag}\n'}"
> + T: t4
> + $ pattern='t4' hg log -r '.' -T "{latesttag(get(env(),'pattern')) %
> 'T: {tag}\n'}"
> + T: t4
> $ hg ci -A -m4
> adding f4
> $ hg log -r 'wdir()' -T "{changessincelatesttag} changes since
> {latesttag}\n"
More information about the Mercurial-devel
mailing list