# HG changeset patch # User Pierre-Yves David # Date 1358177406 -3600 # Node ID 20cf53932b6fd459a598c5fd17ea759dfb68c6c9 # Parent 1eaf0d017b2cb9c9b09247ef3c4bb3af7938734f hgweb: simplify the handling of empty repo This abstraction have two advantages: - If the revlog is empty, None of the code bellow is relevant, early returns seems a win. - Abtraction of the 'emptiness' check will help later when we stop relying on nodefunc. A bonus, with filtering, a non-empty revlog may not have '0' revision accessible. It'll be easier to handle with the emptiness test in a dedicated function diff -r 1eaf0d017b2c -r 20cf53932b6f mercurial/hgweb/webutil.py --- a/mercurial/hgweb/webutil.py Thu Jan 10 18:54:50 2013 +0100 +++ b/mercurial/hgweb/webutil.py Mon Jan 14 16:30:06 2013 +0100 @@ -48,6 +48,14 @@ """ self.nodefunc = nodefunc + def __nonzero__(self): + """return True if any revision to navigate over""" + try: + self.nodefunc(0) + return True + except error.RepoError: + return False + def hex(self, rev): return self.nodefunc(rev).hex() @@ -64,6 +72,9 @@ - values are generator functions taking arbitrary number of kwargs - yield items are dictionaries with `label` and `node` keys """ + if not self: + # empty repo + return ({'before': (), 'after': ()},) navbefore = [] navafter = [] @@ -77,10 +88,7 @@ navbefore.insert(0, ("-%d" % f, self.hex(pos - f))) navafter.append(("tip", "tip")) - try: - navbefore.insert(0, ("(0)", self.hex(0))) - except error.RepoError: - pass + navbefore.insert(0, ("(0)", self.hex(0))) data = lambda i: {"label": i[0], "node": i[1]} return ({'before': lambda **map: (data(i) for i in navbefore),