diff -r 94bbc18daa99 -r 0ba067a97d06 src/topic/revset.py --- /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})