revset: use "canonpath()" for "filelog()" pattern without explicit kind
authorFUJIWARA Katsunori <foozy@lares.dti.ne.jp>
Fri, 17 Jan 2014 23:55:03 +0900
changeset 20288 b61ad01c4e73
parent 20287 f3cef19befb1
child 20289 96be25f1da45
revset: use "canonpath()" for "filelog()" pattern without explicit kind Before this patch, revset predicate "filelog()" uses "match.files()" to get filename also for the pattern without explicit kind. But in such case, only canonicalization of relative path is required, and other initializations of "match" object including regexp compilation are meaningless. This patch uses "pathutil.canonpath()" directly for "filelog()" pattern without explicit kind like "glob:", for efficiency. This patch also does below as a part of introducing "canonpath()": - move location of "matchmod.match()" invocation, because "m" is no more used in "if not matchmod.patkind(pat)" code path - omit passing "default" argument to "matchmod.match()", because "pat" should have explicit kind of pattern in this code path
mercurial/revset.py
tests/test-revset.t
--- a/mercurial/revset.py	Fri Jan 17 23:42:12 2014 +0900
+++ b/mercurial/revset.py	Fri Jan 17 23:55:03 2014 +0900
@@ -717,16 +717,15 @@
 
     # i18n: "filelog" is a keyword
     pat = getstring(x, _("filelog requires a pattern"))
-    m = matchmod.match(repo.root, repo.getcwd(), [pat], default='relpath',
-                       ctx=repo[None])
     s = set()
 
     if not matchmod.patkind(pat):
-        f = m.files()[0]
+        f = pathutil.canonpath(repo.root, repo.getcwd(), pat)
         fl = repo.file(f)
         for fr in fl:
             s.add(fl.linkrev(fr))
     else:
+        m = matchmod.match(repo.root, repo.getcwd(), [pat], ctx=repo[None])
         for f in repo[None]:
             if m(f):
                 fl = repo.file(f)
--- a/tests/test-revset.t	Fri Jan 17 23:42:12 2014 +0900
+++ b/tests/test-revset.t	Fri Jan 17 23:55:03 2014 +0900
@@ -292,6 +292,12 @@
   $ log 'file("b*")'
   1
   4
+  $ log 'filelog("b")'
+  1
+  4
+  $ log 'filelog("../repo/b")'
+  1
+  4
   $ log 'follow()'
   0
   1