# HG changeset patch # User Pierre-Yves David # Date 2013-01-10 18:29:48 # Node ID 6da1e979340a50c0cca0cd0b4f40a6f43a5b95a1 # Parent 100fdc84670f629f874c70f9fcbbdeaf5f3b49f7 hgweb: generate revnav in two phase We first generate revision to link. Then we dispatch them in before, after list. This will help filtering of unknown revision. diff --git a/mercurial/hgweb/webutil.py b/mercurial/hgweb/webutil.py --- a/mercurial/hgweb/webutil.py +++ b/mercurial/hgweb/webutil.py @@ -77,16 +77,22 @@ class revnav(object): # empty repo return ({'before': (), 'after': ()},) - navbefore = [("(0)", self.hex(0))] - navafter = [] - + targets = [] for f in _navseq(1, pagelen): if f > limit: break - if pos + f < limit: - navafter.append(("+%d" % f, self.hex(pos + f))) - if pos - f >= 0: - navbefore.insert(0, ("-%d" % f, self.hex(pos - f))) + targets.append(pos + f) + targets.append(pos - f) + targets.sort() + + navbefore = [("(0)", self.hex(0))] + navafter = [] + for rev in targets: + if pos < rev < limit: + navafter.append(("+%d" % f, self.hex(rev))) + if 0 < rev < pos: + navbefore.append(("-%d" % f, self.hex(rev))) + navafter.append(("tip", "tip"))