D5094: merge-tools: when calling external merge tool, describe the resolve inputs
Yuya Nishihara
yuya at tcha.org
Fri Oct 19 08:28:46 EDT 2018
> > We might want to structure these variables as `base.node|short` instead of
> > `base_node` for example, but that would require more work.
[...]
> Unfortunately, this doesn't work super well, when using the following flags:
There isn't a building block for a mapping dict holding mapping dicts, and
the formatter API doesn't support such structure either.
Fortunately, we don't need a formatter here since we just want to apply
a template to a single item. So if we had a wrapper for a single mapping
dict, the templater can be rendered as follows:
```
props = {
'base': templateutil.mappingdict({'ctx': fca.changectx(), 'fctx': fca,
'label': baselabel})
...
}
cmdutil.rendertemplate(fcd.changectx(), tmpl, props)
```
And `base.path`, `base.node`, etc. should just work.
I'll post the dict wrapper if you like the idea.
```
class mappingdict(mappable, _mappingsequence):
"""Wrapper for a single template mapping
This isn't a sequence in a way that the underlying dict won't be iterated
as a dict, but shares most of the _mappingsequence functions.
"""
def __init__(self, mapping, name=None, tmpl=None):
super(mappingdict, self).__init__(name, tmpl)
self._mapping = mapping
def tomap(self, context):
return self._mapping
def tobool(self, context, mapping):
# no idea when a template mapping should be considered an empty, but
# a mapping dict should have at least one item in practice, so always
# mark this as non-empty.
return True
def tovalue(self, context, mapping):
return super(mappingdict, self).tovalue(context, mapping)[0]
```
More information about the Mercurial-devel
mailing list