diff --git a/mercurial/filelog.py b/mercurial/filelog.py
index 33350debb480cf2fe08a4766cc70eb2bcefd6720_bWVyY3VyaWFsL2ZpbGVsb2cucHk=..b994db7c4d1eb548163baa004a3b1e250ab94e55_bWVyY3VyaWFsL2ZpbGVsb2cucHk= 100644
--- a/mercurial/filelog.py
+++ b/mercurial/filelog.py
@@ -279,5 +279,7 @@
             return super(narrowfilelog, self).size(rev)
 
     def cmp(self, node, text):
-        different = super(narrowfilelog, self).cmp(node, text)
+        # We don't call `super` because narrow parents can be buggy in case of a
+        # ambiguous dirstate. Always take the slow path until there is a better
+        # fix, see issue6150.
 
@@ -283,9 +285,5 @@
 
-        # Because renamed() may lie, we may get false positives for
-        # different content. Check for this by comparing against the original
-        # renamed() implementation.
-        if different:
-            if super(narrowfilelog, self).renamed(node):
-                t2 = self.read(node)
-                return t2 != text
+        # Censored files compare against the empty file.
+        if self.iscensored(self.rev(node)):
+            return text != b''
 
@@ -291,2 +289,2 @@
 
-        return different
+        return self.read(node) != text
diff --git a/tests/test-narrow-shallow.t b/tests/test-narrow-shallow.t
index 33350debb480cf2fe08a4766cc70eb2bcefd6720_dGVzdHMvdGVzdC1uYXJyb3ctc2hhbGxvdy50..b994db7c4d1eb548163baa004a3b1e250ab94e55_dGVzdHMvdGVzdC1uYXJyb3ctc2hhbGxvdy50 100644
--- a/tests/test-narrow-shallow.t
+++ b/tests/test-narrow-shallow.t
@@ -92,10 +92,4 @@
   1: Commit rev2 of f8, d1/f8, d2/f8
   0...: Commit rev2 of f7, d1/f7, d2/f7
 
-XXX flaky output (see issue6150)
-XXX
-XXX The filectx implementation is buggy and return wrong data during status.
-XXX Leading to more file being "merged". The right output is the one with just
-XXX 10 files updated.
-
   $ hg update 4
@@ -101,19 +95,5 @@
   $ hg update 4
-  merging d2/f1 (?)
-  merging d2/f2 (?)
-  merging d2/f3 (?)
-  merging d2/f4 (?)
-  merging d2/f5 (?)
-  merging d2/f6 (?)
-  merging d2/f7 (?)
-  3 files updated, 7 files merged, 0 files removed, 0 files unresolved (?)
-  4 files updated, 6 files merged, 0 files removed, 0 files unresolved (?)
-  5 files updated, 5 files merged, 0 files removed, 0 files unresolved (?)
-  6 files updated, 4 files merged, 0 files removed, 0 files unresolved (?)
-  7 files updated, 3 files merged, 0 files removed, 0 files unresolved (?)
-  8 files updated, 2 files merged, 0 files removed, 0 files unresolved (?)
-  9 files updated, 1 files merged, 0 files removed, 0 files unresolved (?)
-  10 files updated, 0 files merged, 0 files removed, 0 files unresolved (?)
+  10 files updated, 0 files merged, 0 files removed, 0 files unresolved
   $ cat d2/f7 d2/f8
   d2/f7 rev3
   d2/f8 rev2