diff src/topic/revset.py @ 1843:0ba067a97d06

revset: add a topic() revset for querying topics
author Augie Fackler <augie@google.com>
date Wed, 10 Jun 2015 15:26:50 -0400
parents
children 24d8053020a2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/topic/revset.py	Wed Jun 10 15:26:50 2015 -0400
@@ -0,0 +1,23 @@
+from mercurial import revset
+
+def topicset(repo, subset, x):
+    """`topic([topic])`
+    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.
+
+    TODO: make `topic(revset)` work the same as `branch(revset)`.
+    """
+    args = revset.getargs(x, 0, 1, 'topic takes one or no arguments')
+    if args:
+        # match a specific topic
+        topic = revset.getstring(args[0], 'topic() argument must be a string')
+        _kind, _pattern, matcher = revset._stringmatcher(topic)
+    else:
+        matcher = lambda t: bool(t)
+    drafts = subset.filter(lambda r: repo[r].mutable())
+    return drafts.filter(lambda r: matcher(repo[r].extra().get('topic', '')))
+
+def modsetup():
+    revset.symbols.update({'topic': topicset})