yuja added a comment.

  >   > 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]

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D5094

To: spectral, #hg-reviewers
Cc: yuja, mjpieters, mercurial-devel
_______________________________________________
Mercurial-devel mailing list
Mercurial-devel@mercurial-scm.org
https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Reply via email to