# HG changeset patch
# User Mads Kiilerich <madski@unity3d.com>
# Date 1414322052 -3600
#      Sun Oct 26 12:14:12 2014 +0100
# Branch stable
# Node ID fe5f044b753dec0c2a240f5b33ded398089c17f8
# Parent  42342f9afe011a87e6034b8be142d300d961605e
changelog: use headrevsfiltered

2b5940f64750 introduced use of the new filtering headrevs C implementation. It
caught TypeError to detect when to fall back to the implementation that was
compatible with old extensions. That method was however not reliable.

Instead, use the new headrevsfiltered function when passing a filter. It will
reliably fail with AttributeError when an old extension that predates
headrevsfiltered is used.

diff --git a/mercurial/changelog.py b/mercurial/changelog.py
--- a/mercurial/changelog.py
+++ b/mercurial/changelog.py
@@ -172,10 +172,10 @@
     def headrevs(self):
         if self.filteredrevs:
             try:
-                return self.index.headrevs(self.filteredrevs)
-            # AttributeError covers non-c-extension environments.
-            # TypeError allows us work with old c extensions.
-            except (AttributeError, TypeError):
+                return self.index.headrevsfiltered(self.filteredrevs)
+            # AttributeError covers non-c-extension environments and
+            # old c extensions without filter handling.
+            except AttributeError:
                 return self._headrevs()
 
         return super(changelog, self).headrevs()