# HG changeset patch # User FUJIWARA Katsunori # Date 1502115433 -32400 # Node ID 430fb1758d28b9bc26e3a9715f0d6393195cd3cc # Parent 8c2d3c474fc639925d599b5342812e1474b073ac topic: use registrar.revsetpredicate to register revset predicate functions Now, using registrar.revsetpredicate of Mercurial directly in topic extension should be safe enough. because it has been available since Mercurial 3.8, and minimum Mercurial version for topic extension is 4.0. This patch also removes modsetup() in topic/revset.py, because it is useless. BTW, this patch fixes an issue of "hg help revsets" output that custom revset predicates are not displayed as same as others, because they are not "inline literal" in reST syntax (``NAME``). diff -r 8c2d3c474fc6 -r 430fb1758d28 hgext3rd/topic/__init__.py --- a/hgext3rd/topic/__init__.py Mon Aug 07 23:24:57 2017 +0900 +++ b/hgext3rd/topic/__init__.py Mon Aug 07 23:17:13 2017 +0900 @@ -187,7 +187,6 @@ def uisetup(ui): destination.modsetup(ui) - topicrevset.modsetup(ui) discovery.modsetup(ui) topicmap.modsetup(ui) setupimportexport(ui) @@ -309,6 +308,9 @@ 'topics', 'topic', namemap=_namemap, nodemap=_nodemap, listnames=lambda repo: repo.topics)) +# revset predicates are automatically registered at loading via this symbol +revsetpredicate = topicrevset.revsetpredicate + @command('topics', [ ('', 'clear', False, 'clear active topic if any'), ('r', 'rev', [], 'revset of existing revisions', _('REV')), diff -r 8c2d3c474fc6 -r 430fb1758d28 hgext3rd/topic/revset.py --- a/hgext3rd/topic/revset.py Mon Aug 07 23:24:57 2017 +0900 +++ b/hgext3rd/topic/revset.py Mon Aug 07 23:17:13 2017 +0900 @@ -1,6 +1,7 @@ from __future__ import absolute_import from mercurial import ( + registrar, revset, util, ) @@ -16,10 +17,11 @@ except AttributeError: mkmatcher = util.stringmatcher +revsetpredicate = registrar.revsetpredicate() +@revsetpredicate('topic([topic])') def topicset(repo, subset, x): - """`topic([topic])` - Specified topic or all changes with any topic specified. + """Specified topic or all changes with any topic specified. If `topic` starts with `re:` the remainder of the name is treated as a regular expression. @@ -48,10 +50,9 @@ return matcher(topic) return (subset & mutable).filter(matchtopic) +@revsetpredicate('ngtip([branch])') def ngtipset(repo, subset, x): - """`ngtip([branch])` - - The untopiced tip. + """The untopiced tip. Name is horrible so that people change it. """ @@ -62,9 +63,9 @@ branch = repo['.'].branch() return subset & revset.baseset(destination.ngtip(repo, branch)) +@revsetpredicate('stack()') def stackset(repo, subset, x): - """`stack()` - All relevant changes in the current topic, + """All relevant changes in the current topic, This is roughly equivalent to 'topic(.) - obsolete' with a sorting moving unstable changeset after there future parent (as if evolve where already @@ -79,9 +80,3 @@ if not topic: branch = repo[None].branch() return revset.baseset(stack.stack(repo, branch=branch, topic=topic)[1:]) & subset - - -def modsetup(ui): - revset.symbols.update({'topic': topicset}) - revset.symbols.update({'ngtip': ngtipset}) - revset.symbols.update({'stack': stackset})