--- a/mercurial/revset.py Wed May 30 23:13:33 2012 +0100
+++ b/mercurial/revset.py Wed May 30 23:13:33 2012 +0100
@@ -325,14 +325,25 @@
"""``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()
--- a/tests/test-revset.t Wed May 30 23:13:33 2012 +0100
+++ b/tests/test-revset.t Wed May 30 23:13:33 2012 +0100
@@ -233,6 +233,16 @@
$ 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