Mercurial > public > mercurial-scm > hg
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: |