# HG changeset patch # User Matt Harbison # Date 1484712774 18000 # Node ID bd5e9647f646e399a377f04cafed32327dba2f5d # Parent da5fa0f13a41969fb6bcba56ff934f7f2391faad templater: add '{envvars}' to access environment variables Since the option for ui.exportableenviron is experimental, so is this template until the underlying API is sorted out. diff -r da5fa0f13a41 -r bd5e9647f646 mercurial/cmdutil.py --- a/mercurial/cmdutil.py Tue Jan 17 23:05:12 2017 -0500 +++ b/mercurial/cmdutil.py Tue Jan 17 23:12:54 2017 -0500 @@ -1448,6 +1448,7 @@ 'parent': '{rev}:{node|formatnode} ', 'manifest': '{rev}:{node|formatnode}', 'file_copy': '{name} ({source})', + 'envvar': '{key}={value}', 'extra': '{key}={value|stringescape}' } # filecopy is preserved for compatibility reasons diff -r da5fa0f13a41 -r bd5e9647f646 mercurial/templatekw.py --- a/mercurial/templatekw.py Tue Jan 17 23:05:12 2017 -0500 +++ b/mercurial/templatekw.py Tue Jan 17 23:12:54 2017 -0500 @@ -303,6 +303,18 @@ maxname, maxtotal, adds, removes, binary = patch.diffstatsum(stats) return '%s: +%s/-%s' % (len(stats), adds, removes) +@templatekeyword('envvars') +def showenvvars(repo, **args): + """A dictionary of environment variables. (EXPERIMENTAL)""" + + env = repo.ui.exportableenviron() + env = util.sortdict((k, env[k]) for k in sorted(env)) + makemap = lambda k: {'key': k, 'value': env[k]} + c = [makemap(k) for k in env] + f = _showlist('envvar', c, plural='envvars', **args) + return _hybrid(f, env, makemap, + lambda x: '%s=%s' % (x['key'], x['value'])) + @templatekeyword('extras') def showextras(**args): """List of dicts with key, value entries of the 'extras' diff -r da5fa0f13a41 -r bd5e9647f646 tests/test-cat.t --- a/tests/test-cat.t Tue Jan 17 23:05:12 2017 -0500 +++ b/tests/test-cat.t Tue Jan 17 23:12:54 2017 -0500 @@ -68,3 +68,14 @@ $ echo b-wdir > b $ hg cat -r 'wdir()' b b-wdir + +Environment variables are not visible by default + + $ PATTERN='t4' hg log -r '.' -T "{ifcontains('PATTERN', envvars, 'yes', 'no')}\n" + no + +Environment variable visibility can be explicit + + $ PATTERN='t4' hg log -r '.' -T "{envvars % '{key} -> {value}\n'}" \ + > --config "experimental.exportableenviron=PATTERN" + PATTERN -> t4