comparison 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
comparison
equal deleted inserted replaced
19093:6f27efc7db23 19094:fc1b77db123f
49 # used for hex generation 49 # used for hex generation
50 self._revlog = repo.changelog 50 self._revlog = repo.changelog
51 51
52 def __nonzero__(self): 52 def __nonzero__(self):
53 """return True if any revision to navigate over""" 53 """return True if any revision to navigate over"""
54 return bool(len(self._revlog)) 54 return self._first() is not None
55
56 def _first(self):
57 """return the minimum non-filtered changeset or None"""
58 try:
59 return iter(self._revlog).next()
60 except StopIteration:
61 return None
55 62
56 def hex(self, rev): 63 def hex(self, rev):
57 return hex(self._revlog.node(rev)) 64 return hex(self._revlog.node(rev))
58 65
59 def gen(self, pos, pagelen, limit): 66 def gen(self, pos, pagelen, limit):
79 break 86 break
80 targets.append(pos + f) 87 targets.append(pos + f)
81 targets.append(pos - f) 88 targets.append(pos - f)
82 targets.sort() 89 targets.sort()
83 90
84 navbefore = [("(0)", self.hex(0))] 91 first = self._first()
92 navbefore = [("(%i)" % first, self.hex(first))]
85 navafter = [] 93 navafter = []
86 for rev in targets: 94 for rev in targets:
87 if rev not in self._revlog: 95 if rev not in self._revlog:
88 continue 96 continue
89 if pos < rev < limit: 97 if pos < rev < limit: