diff -r a685d9870eb5 -r 6aa7dcae6bd8 mercurial/revset.py --- a/mercurial/revset.py Thu Jan 30 15:39:56 2014 -0800 +++ b/mercurial/revset.py Thu Jan 30 16:03:18 2014 -0800 @@ -800,14 +800,15 @@ gr = re.compile(getstring(x, _("grep requires a string"))) except re.error, e: raise error.ParseError(_('invalid match pattern: %s') % e) - l = [] - for r in subset: - c = repo[r] + + def matches(x): + c = repo[x] for e in c.files() + [c.user(), c.description()]: if gr.search(e): - l.append(r) - break - return baseset(l) + return True + return False + + return lazyset(subset, matches) def _matchfiles(repo, subset, x): # _matchfiles takes a revset list of prefixed arguments: