# HG changeset patch # User Matt Mackall # Date 2007-09-21 22:14:39 # Node ID fb070713ff364573c83b324256909788d0a61d54 # Parent 599f3a690d8f70963c81c5094ed173950cd35cf8 revlog: more robust for damaged indexes - fix flag reporting - make broken length reporting smarter diff --git a/mercurial/revlog.py b/mercurial/revlog.py --- a/mercurial/revlog.py +++ b/mercurial/revlog.py @@ -912,7 +912,8 @@ class revlog(object): # check rev flags if self.index[rev][0] & 0xFFFF: - raise RevlogError(_('incompatible revision flag %x') % q) + raise RevlogError(_('incompatible revision flag %x') % + (self.index[rev][0] & 0xFFFF)) if self._inline: # we probably have the whole chunk cached @@ -1236,7 +1237,7 @@ class revlog(object): def checksize(self): expected = 0 if self.count(): - expected = self.end(self.count() - 1) + expected = max(0, self.end(self.count() - 1)) try: f = self.opener(self.datafile) @@ -1253,12 +1254,12 @@ class revlog(object): f.seek(0, 2) actual = f.tell() s = self._io.size - i = actual / s + i = max(0, actual / s) di = actual - (i * s) if self._inline: databytes = 0 for r in xrange(self.count()): - databytes += self.length(r) + databytes += max(0, self.length(r)) dd = 0 di = actual - self.count() * s - databytes except IOError, inst: