diff mercurial/hgweb/webutil.py @ 19094:fc1b77db123f stable

hgweb: handle filtered "0" rev in navigation Before this changeset, navigation generation crashed if revision "0" was filtered. We introduce a `_first` methods on revision navigation that return the lowest unfiltered element and use it in two place were the "0" changeset was explicitly referenced. Test case are introduced.
author Pierre-Yves David <pierre-yves.david@logilab.fr>
date Tue, 30 Apr 2013 13:53:49 +0200
parents 6f27efc7db23
children f962870712da
line wrap: on
line diff
--- a/mercurial/hgweb/webutil.py	Tue Apr 30 15:11:12 2013 +0200
+++ b/mercurial/hgweb/webutil.py	Tue Apr 30 13:53:49 2013 +0200
@@ -51,7 +51,14 @@
 
     def __nonzero__(self):
         """return True if any revision to navigate over"""
-        return bool(len(self._revlog))
+        return self._first() is not None
+
+    def _first(self):
+        """return the minimum non-filtered changeset or None"""
+        try:
+            return iter(self._revlog).next()
+        except StopIteration:
+            return None
 
     def hex(self, rev):
         return hex(self._revlog.node(rev))
@@ -81,7 +88,8 @@
             targets.append(pos - f)
         targets.sort()
 
-        navbefore = [("(0)", self.hex(0))]
+        first = self._first()
+        navbefore = [("(%i)" % first, self.hex(first))]
         navafter = []
         for rev in targets:
             if rev not in self._revlog: