diff --git a/mercurial/revset.py b/mercurial/revset.py
index 7a2bca0b1e70cccf0edf0a15dcf45088551daeb3_bWVyY3VyaWFsL3JldnNldC5weQ==..98b79c89276857fb38da975994885825b570801d_bWVyY3VyaWFsL3JldnNldC5weQ== 100644
--- a/mercurial/revset.py
+++ b/mercurial/revset.py
@@ -206,7 +206,8 @@
     First parent of changesets in set, or the working directory.
     """
     if x is None:
-        return [repo[x].parents()[0].rev()]
+        p = repo[x].parents()[0].rev()
+        return [r for r in subset if r == p]
 
     ps = set()
     cl = repo.changelog
@@ -221,7 +222,8 @@
     if x is None:
         ps = repo[x].parents()
         try:
-            return [ps[1].rev()]
+            p = ps[1].rev()
+            return [r for r in subset if r == p]
         except IndexError:
             return []
 
@@ -237,7 +239,8 @@
     """
     repo.ui.debug(repr(x), '\n')
     if x is None:
-        return [r.rev() for r in repo[x].parents()]
+        ps = tuple(p.rev() for p in repo[x].parents())
+        return [r for r in subset if r in ps]
 
     ps = set()
     cl = repo.changelog
diff --git a/tests/test-revset-dirstate-parents.t b/tests/test-revset-dirstate-parents.t
index 7a2bca0b1e70cccf0edf0a15dcf45088551daeb3_dGVzdHMvdGVzdC1yZXZzZXQtZGlyc3RhdGUtcGFyZW50cy50..98b79c89276857fb38da975994885825b570801d_dGVzdHMvdGVzdC1yZXZzZXQtZGlyc3RhdGUtcGFyZW50cy50 100644
--- a/tests/test-revset-dirstate-parents.t
+++ b/tests/test-revset-dirstate-parents.t
@@ -14,6 +14,5 @@
 
   $ try 'p1()'
   ('func', ('symbol', 'p1'), None)
-  -1
   $ try 'p2()'
   ('func', ('symbol', 'p2'), None)
@@ -18,5 +17,8 @@
   $ try 'p2()'
   ('func', ('symbol', 'p2'), None)
+  $ try 'parents()'
+  ('func', ('symbol', 'parents'), None)
+  None
 
 null revision
   $ log 'p1()'
@@ -28,6 +30,7 @@
   $ hg ci -Aqm0
   $ log 'p1()'
   0
+  $ log 'tag() and p1()'
   $ log 'p2()'
   $ log 'parents()'
   0
@@ -31,6 +34,7 @@
   $ log 'p2()'
   $ log 'parents()'
   0
+  $ log 'tag() and parents()'
 
 merge in progress
   $ echo b > b
@@ -43,4 +47,5 @@
   2
   $ log 'p2()'
   1
+  $ log 'tag() and p2()'
   $ log 'parents()'
@@ -46,2 +51,3 @@
   $ log 'parents()'
+  1
   2
@@ -47,2 +53,1 @@
   2
-  1