revset: add pattern matching to 'branch' revset expression

This commit is contained in:
Simon King 2012-05-30 23:13:33 +01:00
parent 9ecf845d55
commit 85110850a9
2 changed files with 23 additions and 2 deletions

View File

@ -325,14 +325,25 @@ def branch(repo, subset, x):
"""``branch(string or set)``
All changesets belonging to the given branch or the branches of the given
changesets.
If `string` starts with `re:`, the remainder of the name is treated as
a regular expression. To match a branch that actually starts with `re:`,
use the prefix `literal:`.
"""
try:
b = getstring(x, '')
if b in repo.branchmap():
return [r for r in subset if repo[r].branch() == b]
except error.ParseError:
# not a string, but another revspec, e.g. tip()
pass
else:
kind, pattern, matcher = _stringmatcher(b)
if kind == 'literal':
# note: falls through to the revspec case if no branch with
# this name exists
if pattern in repo.branchmap():
return [r for r in subset if matcher(repo[r].branch())]
else:
return [r for r in subset if matcher(repo[r].branch())]
s = getset(repo, range(len(repo)), x)
b = set()

View File

@ -233,6 +233,16 @@ quoting needed
$ log 'branch(é)'
8
9
$ log 'branch(a)'
0
$ hg log -r 'branch("re:a")' --template '{rev} {branch}\n'
0 a
2 a-b-c-
3 +a+b+c+
4 -a-b-c-
5 /a/b/c/
6 _a_b_c_
7 .a.b.c.
$ log 'children(ancestor(4,5))'
2
3