diff --git a/mercurial/revset.py b/mercurial/revset.py
index 189fe1b3d16ae0035424cedce46a5b7b542644ba_bWVyY3VyaWFsL3JldnNldC5weQ==..760151697a4fe2ea4c4c98565dddba4c5df69186_bWVyY3VyaWFsL3JldnNldC5weQ== 100644
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -12,6 +12,7 @@
 from i18n import _
 import encoding
 import obsolete as obsmod
+import pathutil
 import repoview
 
 def _revancestors(repo, revs, followfirst):
@@ -530,6 +531,7 @@
     pat = getstring(x, _("contains requires a pattern"))
     s = []
     if not matchmod.patkind(pat):
+        pat = pathutil.canonpath(repo.root, repo.getcwd(), pat)
         for r in subset:
             if pat in repo[r]:
                 s.append(r)
diff --git a/tests/test-revset.t b/tests/test-revset.t
index 189fe1b3d16ae0035424cedce46a5b7b542644ba_dGVzdHMvdGVzdC1yZXZzZXQudA==..760151697a4fe2ea4c4c98565dddba4c5df69186_dGVzdHMvdGVzdC1yZXZzZXQudA== 100644
--- a/tests/test-revset.t
+++ b/tests/test-revset.t
@@ -273,6 +273,11 @@
   1
   3
   5
+  $ log 'contains("../repo/a")'
+  0
+  1
+  3
+  5
   $ log 'desc(B)'
   5
   $ log 'descendants(2 or 3)'