Mercurial > public > mercurial-scm > hg
comparison mercurial/revset.py @ 22499:8c9f9e346acc
revset: unify code flow in `bookmark`
We refactor the code of the bookmark revset to have a single return. This will
allow us to sanitize the content of the set.
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Wed, 17 Sep 2014 10:58:25 -0700 |
parents | 64673dc48931 |
children | 171015d3b30c |
comparison
equal
deleted
inserted
replaced
22498:64673dc48931 | 22499:8c9f9e346acc |
---|---|
446 if args: | 446 if args: |
447 bm = getstring(args[0], | 447 bm = getstring(args[0], |
448 # i18n: "bookmark" is a keyword | 448 # i18n: "bookmark" is a keyword |
449 _('the argument to bookmark must be a string')) | 449 _('the argument to bookmark must be a string')) |
450 kind, pattern, matcher = _stringmatcher(bm) | 450 kind, pattern, matcher = _stringmatcher(bm) |
451 bms = set() | |
451 if kind == 'literal': | 452 if kind == 'literal': |
452 bmrev = repo._bookmarks.get(pattern, None) | 453 bmrev = repo._bookmarks.get(pattern, None) |
453 if not bmrev: | 454 if not bmrev: |
454 raise util.Abort(_("bookmark '%s' does not exist") % bm) | 455 raise util.Abort(_("bookmark '%s' does not exist") % bm) |
455 bmrev = repo[bmrev].rev() | 456 bms.add(repo[bmrev].rev()) |
456 return subset.filter(lambda r: r == bmrev) | |
457 else: | 457 else: |
458 matchrevs = set() | 458 matchrevs = set() |
459 for name, bmrev in repo._bookmarks.iteritems(): | 459 for name, bmrev in repo._bookmarks.iteritems(): |
460 if matcher(name): | 460 if matcher(name): |
461 matchrevs.add(bmrev) | 461 matchrevs.add(bmrev) |
462 if not matchrevs: | 462 if not matchrevs: |
463 raise util.Abort(_("no bookmarks exist that match '%s'") | 463 raise util.Abort(_("no bookmarks exist that match '%s'") |
464 % pattern) | 464 % pattern) |
465 bmrevs = set() | |
466 for bmrev in matchrevs: | 465 for bmrev in matchrevs: |
467 bmrevs.add(repo[bmrev].rev()) | 466 bms.add(repo[bmrev].rev()) |
468 return subset & bmrevs | 467 else: |
469 | 468 bms = set([repo[r].rev() |
470 bms = set([repo[r].rev() | 469 for r in repo._bookmarks.values()]) |
471 for r in repo._bookmarks.values()]) | |
472 return subset.filter(bms.__contains__) | 470 return subset.filter(bms.__contains__) |
473 | 471 |
474 def branch(repo, subset, x): | 472 def branch(repo, subset, x): |
475 """``branch(string or set)`` | 473 """``branch(string or set)`` |
476 All changesets belonging to the given branch or the branches of the given | 474 All changesets belonging to the given branch or the branches of the given |