[PATCH 1 of 2] templates: add whyunstable template keyword

Anton Shestakov av6 at dwimlabs.net
Sat Apr 14 07:58:28 EDT 2018


On Mon, 26 Mar 2018 22:13:18 +0900
Yuya Nishihara <yuya at tcha.org> wrote:

> On Mon, 26 Mar 2018 19:55:20 +0800, Anton Shestakov wrote:
> > # HG changeset patch
> > # User Anton Shestakov <av6 at dwimlabs.net>
> > # Date 1522054812 -28800
> > #      Mon Mar 26 17:00:12 2018 +0800
> > # Node ID 123d9e4d706909c8912f11acee292735c0fb283c
> > # Parent  6f570c501e3ebc3d9b59920f50ed7523d93cb847
> > templates: add whyunstable template keyword  

I went and revived this series. Let's see if I can squeeze some patches
in before the freeze.

> > +    def makemap(entry):
> > +        item = {'ctx': repo[entry['node']], 'revcache': {}}  
>                                                ^^^^^^^^^^^^^^
> 
> 'revcache' is no longer needed.
> 
> Perhaps, obsutil.whyunstable() can put 'ctx' instead of 'node'?

At least in content-divergent cases, common predecessor can be absent
from local repo. I don't think there's any "surrogate" ctx (i.e. created
from hash alone) that would work here yet.

> > +        item.update(entry)
> > +        if item.get('divergentnodes'):
> > +            dnhybrid = _hybrid(None, item['divergentnodes'],
> > +                               lambda x: {'ctx': x, 'revcache': {}},
> > +                               formatnode)  
> 
> Perhaps showrevslist() can be used. Each hybrid value has to be a printable
> object such as int.

Tried it, but it feels like I'm jumping through hoops for no good
reason: doing ctx.rev() and then repo[rev] right after that just to get
ctx back. Maybe I'm doing something wrong, but I have an idea (not sure
how crazy it is): I'd like to have divergentnodes be a mappinglist with
tmpl that works from inside the entries (also mappinglist). It doesn't
work yet, but I've sent an RFC to get feedback on it.

> > +            item['divergentnodes'] = dnhybrid
> > +        return item
> > +
> > +    entries = obsutil.whyunstable(repo, ctx)
> > +    return _hybrid(None, entries, makemap, formatentry)  
> 
> It isn't correct to wrap a list of template mappings by _hybrid. Instead,
> makemap() has to build a mapping dict from a printable value.
> 
> Can you hold off this series for 2-3 weeks? I have long series which will
> add a wrapper for a list of template mappings. Basically it will allow us
> to write the default string representation as template:
> 
>   return mappinglist(entries, tmpl='{instability}: {divergentnodes % ...')


More information about the Mercurial-devel mailing list