On Sun, 15 Apr 2018 14:06:03 +0800, Anton Shestakov wrote: > On Sat, 14 Apr 2018 21:49:17 +0900 > Yuya Nishihara <y...@tcha.org> wrote: > > > -class _siblings(object): > > - def __init__(self, siblings=None, hiderev=None): > > - if siblings is None: > > - siblings = [] > > - self.siblings = [s for s in siblings if s.node() != nullid] > > - if len(self.siblings) == 1 and self.siblings[0].rev() == hiderev: > > - self.siblings = [] > > - > > - def __iter__(self): > > - return _ctxsgen(self.siblings) > > - > > - def __len__(self): > > - return len(self.siblings) > > +def _siblings(siblings=None, hiderev=None): > > + if siblings is None: > > + siblings = [] > > + siblings = [s for s in siblings if s.node() != nullid] > > + if len(siblings) == 1 and siblings[0].rev() == hiderev: > > + siblings = [] > > + return templateutil.mappinggenerator(_ctxsgen, args=(siblings,)) > > One thing that this patch makes difficult to understand is how you can't > now say len(parents): > > TypeError: object of type 'mappinggenerator' has no len() > > ... but "{count(parents)}" in the templates works as expected, even > though count template filter simply does len(i).
Filter functions receive an inner value, in which case, it is a list of dicts. Basically I threw away the idea behind the hybrid class, which is to provide all required behaviors by a single object as if it were a plain Python object. It didn't work. Instead, a wrapped class can be considered a container like Maybe type. It returns some meaningful values depending on what is expected by caller. _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel