<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Tue, Mar 8, 2016 at 10:56 AM Augie Fackler <<a href="mailto:raf@durin42.com">raf@durin42.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Tue, Mar 08, 2016 at 11:08:27PM +0900, FUJIWARA Katsunori wrote:<br>
> # HG changeset patch<br>
> # User FUJIWARA Katsunori <<a href="mailto:foozy@lares.dti.ne.jp" target="_blank">foozy@lares.dti.ne.jp</a>><br>
> # Date 1457445893 -32400<br>
> #      Tue Mar 08 23:04:53 2016 +0900<br>
> # Node ID e66468a1adffedd602a098e48a527d387a05de3a<br>
> # Parent  757d7e1c69a80d27f0f8ab0ad7609a864cfe3120<br>
> revset: replace predicate by revsetpredicate of registrar<br>
<br>
These are queued, thanks.<br>
<br>
I believe this series will break any third-party extensions that<br>
register revsets, is that right?<br></blockquote><div><br></div><div>The <span style="font-size:13px;line-height:19.5px">extpredicate class is still there, and that's apparently what third-party extensions should use, so maybe not?</span></div><div><span style="font-size:13px;line-height:19.5px"><br></span></div><div><span style="font-size:13px;line-height:19.5px">(I found the </span><span style="font-size:13px;line-height:19.5px">extpredicate last night and noticed that the code I recently added to our Google-internal extension does not use it :-(.)</span></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
><br>
> To make all built-in predicates be known to hggettext, loading<br>
> built-in predicates by loadpredicate() should be placed before fixing<br>
> i18nfunctions but after all of predicate decorating.<br>
><br>
> diff --git a/mercurial/revset.py b/mercurial/revset.py<br>
> --- a/mercurial/revset.py<br>
> +++ b/mercurial/revset.py<br>
> @@ -482,36 +482,7 @@ symbols = {}<br>
>  # functions that just return a lot of changesets (like all) don't count here<br>
>  safesymbols = set()<br>
><br>
> -class predicate(registrar.funcregistrar):<br>
> -    """Decorator to register revset predicate<br>
> -<br>
> -    Usage::<br>
> -<br>
> -        @predicate('mypredicate(arg1, arg2[, arg3])')<br>
> -        def mypredicatefunc(repo, subset, x):<br>
> -            '''Explanation of this revset predicate ....<br>
> -            '''<br>
> -            pass<br>
> -<br>
> -    The first string argument of the constructor is used also in<br>
> -    online help.<br>
> -<br>
> -    Use 'extpredicate' instead of this to register revset predicate in<br>
> -    extensions.<br>
> -    """<br>
> -    table = symbols<br>
> -    formatdoc = "``%s``\n    %s"<br>
> -    getname = registrar.funcregistrar.parsefuncdecl<br>
> -<br>
> -    def __init__(self, decl, safe=False):<br>
> -        """'safe' indicates whether a predicate is safe for DoS attack<br>
> -        """<br>
> -        super(predicate, self).__init__(decl)<br>
> -        self.safe = safe<br>
> -<br>
> -    def extraaction(self, name, func):<br>
> -        if self.safe:<br>
> -            safesymbols.add(name)<br>
> +predicate = registrar.revsetpredicate()<br>
><br>
>  class extpredicate(registrar.delayregistrar):<br>
>      """Decorator to register revset predicate in extensions<br>
> @@ -3636,5 +3607,8 @@ def loadpredicate(ui, extname, registrar<br>
>          if func._safe:<br>
>              safesymbols.add(name)<br>
><br>
> +# load built-in predicates explicitly to setup safesymbols<br>
> +loadpredicate(None, None, predicate)<br>
> +<br>
>  # tell hggettext to extract docstrings from these functions:<br>
>  i18nfunctions = symbols.values()<br>
> _______________________________________________<br>
> Mercurial-devel mailing list<br>
> <a href="mailto:Mercurial-devel@mercurial-scm.org" target="_blank">Mercurial-devel@mercurial-scm.org</a><br>
> <a href="https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel" rel="noreferrer" target="_blank">https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel</a><br>
_______________________________________________<br>
Mercurial-devel mailing list<br>
<a href="mailto:Mercurial-devel@mercurial-scm.org" target="_blank">Mercurial-devel@mercurial-scm.org</a><br>
<a href="https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel" rel="noreferrer" target="_blank">https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel</a><br>
</blockquote></div></div>