# HG changeset patch # User Matt Mackall # Date 1305583355 18000 # Node ID c0b6a734b4f365a63d590db8fb184fe4960e12f1 # Parent 5c3de67e7402c8069c4db8cf3fbc4a5987d9d73b revset: introduce filelog() to emulate log's fast path filelog() only reports revisions present in the matching filelogs. diff -r 5c3de67e7402 -r c0b6a734b4f3 mercurial/revset.py --- a/mercurial/revset.py Thu May 12 10:48:31 2011 -0500 +++ b/mercurial/revset.py Mon May 16 17:02:35 2011 -0500 @@ -370,6 +370,29 @@ s = set(repo.changelog.descendants(*args)) | set(args) return [r for r in subset if r in s] +def filelog(repo, subset, x): + """``filelog(pattern)`` + Changesets connected to the specified filelog. + """ + + pat = getstring(x, _("filelog requires a pattern")) + m = matchmod.match(repo.root, repo.getcwd(), [pat], default='relpath') + s = set() + + if not m.anypats(): + for f in m.files(): + fl = repo.file(f) + for fr in fl: + s.add(fl.linkrev(fr)) + else: + for f in repo[None]: + if m(f): + fl = repo.file(f) + for fr in fl: + s.add(fl.linkrev(fr)) + + return [r for r in subset if r in s] + def follow(repo, subset, x): """``follow()`` An alias for ``::.`` (ancestors of the working copy's first parent). @@ -780,6 +803,7 @@ "date": date, "descendants": descendants, "file": hasfile, + "filelog": filelog, "follow": follow, "grep": grep, "head": head,