mirror of
https://github.com/facebook/sapling.git
synced 2024-10-07 15:27:13 +03:00
templatekw: export ui.paths as {peerpaths}
It's sometimes useful to show hyperlinks in log output. "{get(peerpaths, "default")}/rev/{node}" Since each path may have sub options, "{peerpaths}" is structured as a dict of dicts, but the inner dict is rendered as if it were a string URL. The implementation is ad-hoc, so there are some weird behaviors described in the test. We might need to introduce a proper way of handling a hybrid scalar object. This patch adds _hybrid.__getitem__() so d['path']['url'] works. The keyword is named as "peerpaths" since "paths" seemed too generic in log context.
This commit is contained in:
parent
17207a3d76
commit
963c78d353
@ -59,6 +59,8 @@ class _hybrid(object):
|
||||
yield makemap(x)
|
||||
def __contains__(self, x):
|
||||
return x in self._values
|
||||
def __getitem__(self, key):
|
||||
return self._values[key]
|
||||
def __len__(self):
|
||||
return len(self._values)
|
||||
def __iter__(self):
|
||||
@ -591,6 +593,25 @@ def showobsolete(repo, ctx, templ, **args):
|
||||
return 'obsolete'
|
||||
return ''
|
||||
|
||||
@templatekeyword('peerpaths')
|
||||
def showpeerpaths(repo, **args):
|
||||
"""A dictionary of repository locations defined in the [paths] section
|
||||
of your configuration file."""
|
||||
# see commands.paths() for naming of dictionary keys
|
||||
paths = util.sortdict()
|
||||
for k, p in sorted(repo.ui.paths.iteritems()):
|
||||
d = util.sortdict()
|
||||
d['url'] = p.rawloc
|
||||
d.update((o, v) for o, v in sorted(p.suboptions.iteritems()))
|
||||
def f():
|
||||
yield d['url']
|
||||
paths[k] = hybriddict(d, gen=f())
|
||||
|
||||
# no hybriddict() since d['path'] can't be formatted as a string. perhaps
|
||||
# hybriddict() should call templatefilters.stringify(d[value]).
|
||||
return _hybrid(None, paths, lambda k: {'name': k, 'path': paths[k]},
|
||||
lambda d: '%s=%s' % (d['name'], d['path']['url']))
|
||||
|
||||
@templatekeyword("predecessors")
|
||||
def showpredecessors(repo, ctx, **args):
|
||||
"""Returns the list if the closest visible successors
|
||||
|
@ -84,7 +84,46 @@ formatter output with paths:
|
||||
]
|
||||
[1]
|
||||
|
||||
password should be masked in plain output, but not in machine-readable output:
|
||||
log template:
|
||||
|
||||
(behaves as a {name: path-string} dict by default)
|
||||
|
||||
$ hg log -rnull -T '{peerpaths}\n'
|
||||
dupe=$TESTTMP/b#tip expand=$TESTTMP/a/$SOMETHING/bar (glob)
|
||||
$ hg log -rnull -T '{join(peerpaths, "\n")}\n'
|
||||
dupe=$TESTTMP/b#tip (glob)
|
||||
expand=$TESTTMP/a/$SOMETHING/bar (glob)
|
||||
$ hg log -rnull -T '{peerpaths % "{name}: {path}\n"}'
|
||||
dupe: $TESTTMP/a/$SOMETHING/bar (glob)
|
||||
expand: $TESTTMP/a/$SOMETHING/bar (glob)
|
||||
$ hg log -rnull -T '{get(peerpaths, "dupe")}\n'
|
||||
$TESTTMP/a/$SOMETHING/bar (glob)
|
||||
|
||||
(but a path is actually a dict of url and sub-options)
|
||||
|
||||
$ hg log -rnull -T '{join(get(peerpaths, "dupe"), "\n")}\n'
|
||||
url=$TESTTMP/b#tip (glob)
|
||||
pushurl=https://example.com/dupe
|
||||
$ hg log -rnull -T '{get(peerpaths, "dupe") % "{key}: {value}\n"}'
|
||||
url: $TESTTMP/b#tip (glob)
|
||||
pushurl: https://example.com/dupe
|
||||
$ hg log -rnull -T '{get(get(peerpaths, "dupe"), "pushurl")}\n'
|
||||
https://example.com/dupe
|
||||
|
||||
(so there's weird behavior)
|
||||
|
||||
$ hg log -rnull -T '{get(peerpaths, "dupe")|count}\n'
|
||||
2
|
||||
$ hg log -rnull -T '{get(peerpaths, "dupe")|stringify|count}\n'
|
||||
[0-9]{2,} (re)
|
||||
|
||||
(in JSON, it's a dict of dicts)
|
||||
|
||||
$ hg log -rnull -T '{peerpaths|json}\n'
|
||||
{"dupe": {"pushurl": "https://example.com/dupe", "url": "$TESTTMP/b#tip"}, "expand": {"url": "$TESTTMP/a/$SOMETHING/bar"}} (glob)
|
||||
|
||||
password should be masked in plain output, but not in machine-readable/template
|
||||
output:
|
||||
|
||||
$ echo 'insecure = http://foo:insecure@example.com/' >> .hg/hgrc
|
||||
$ hg paths insecure
|
||||
@ -96,6 +135,8 @@ password should be masked in plain output, but not in machine-readable output:
|
||||
"url": "http://foo:insecure@example.com/"
|
||||
}
|
||||
]
|
||||
$ hg log -rnull -T '{get(peerpaths, "insecure")}\n'
|
||||
http://foo:insecure@example.com/
|
||||
|
||||
zeroconf wraps ui.configitems(), which shouldn't crash at least:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user