# HG changeset patch # User Simon King # Date 2012-05-30 22:13:33 # Node ID 0946502fd3d5b8e056dab9f20644000568d693e2 # Parent 20f55613fb2a3127a7bd7cc8789e0a155275eb1e revset: add pattern matching to 'branch' revset expression diff --git a/mercurial/revset.py b/mercurial/revset.py --- a/mercurial/revset.py +++ b/mercurial/revset.py @@ -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() diff --git a/tests/test-revset.t b/tests/test-revset.t --- a/tests/test-revset.t +++ b/tests/test-revset.t @@ -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