diff -r 51b0e799352f -r fb42030d79d6 mercurial/revlog.py --- a/mercurial/revlog.py Thu Jun 26 14:35:50 2008 -0500 +++ b/mercurial/revlog.py Thu Jun 26 14:35:50 2008 -0500 @@ -515,9 +515,11 @@ def tip(self): return self.node(len(self.index) - 2) - def count(self): + def __len__(self): return len(self.index) - 1 - + def __iter__(self): + for i in xrange(len(self)): + yield i def rev(self, node): try: return self.nodemap[node] @@ -620,12 +622,11 @@ lowestrev = nullrev if (lowestrev == nullrev) and (heads is None): # We want _all_ the nodes! - return ([self.node(r) for r in xrange(0, self.count())], - [nullid], list(self.heads())) + return ([self.node(r) for r in self], [nullid], list(self.heads())) if heads is None: # All nodes are ancestors, so the latest ancestor is the last # node. - highestrev = self.count() - 1 + highestrev = len(self) - 1 # Set ancestors to None to signal that every node is an ancestor. ancestors = None # Set heads to an empty dictionary for later discovery of heads @@ -754,15 +755,15 @@ as if they had no children """ if start is None and stop is None: - count = self.count() + count = len(self) if not count: return [nullid] ishead = [1] * (count + 1) index = self.index - for r in xrange(count): + for r in self: e = index[r] ishead[e[5]] = ishead[e[6]] = 0 - return [self.node(r) for r in xrange(count) if ishead[r]] + return [self.node(r) for r in self if ishead[r]] if start is None: start = nullid @@ -774,7 +775,7 @@ heads = {startrev: 1} parentrevs = self.parentrevs - for r in xrange(startrev + 1, self.count()): + for r in xrange(startrev + 1, len(self)): for p in parentrevs(r): if p in reachable: if r not in stoprevs: @@ -789,7 +790,7 @@ """find the children of a given node""" c = [] p = self.rev(node) - for r in range(p + 1, self.count()): + for r in range(p + 1, len(self)): prevs = [pr for pr in self.parentrevs(r) if pr != nullrev] if prevs: for pr in prevs: @@ -818,8 +819,8 @@ if str(rev) != id: raise ValueError if rev < 0: - rev = self.count() + rev - if rev < 0 or rev >= self.count(): + rev = len(self) + rev + if rev < 0 or rev >= len(self): raise ValueError return self.node(rev) except (ValueError, OverflowError): @@ -982,7 +983,7 @@ df = self.opener(self.datafile, 'w') try: calc = self._io.size - for r in xrange(self.count()): + for r in self: start = self.start(r) + (r + 1) * calc length = self.length(r) fp.seek(start) @@ -995,7 +996,7 @@ fp = self.opener(self.indexfile, 'w', atomictemp=True) self.version &= ~(REVLOGNGINLINEDATA) self._inline = False - for i in xrange(self.count()): + for i in self: e = self._io.packentry(self.index[i], self.node, self.version, i) fp.write(e) @@ -1031,7 +1032,7 @@ if node in self.nodemap: return node - curr = self.count() + curr = len(self) prev = curr - 1 base = self.base(prev) offset = self.end(prev) @@ -1146,7 +1147,7 @@ """ #track the base of the current delta log - r = self.count() + r = len(self) t = r - 1 node = None @@ -1265,13 +1266,13 @@ trust that the caller has saved the revisions that shouldn't be removed and that it'll readd them after this truncation. """ - if self.count() == 0: + if len(self) == 0: return if isinstance(self.index, lazyindex): self._loadindexmap() - for rev in xrange(0, self.count()): + for rev in self: if self.index[rev][4] >= minlink: break else: @@ -1292,15 +1293,15 @@ # then reset internal state in memory to forget those revisions self._cache = None self._chunkcache = None - for x in xrange(rev, self.count()): + for x in xrange(rev, len(self)): del self.nodemap[self.node(x)] del self.index[rev:-1] def checksize(self): expected = 0 - if self.count(): - expected = max(0, self.end(self.count() - 1)) + if len(self): + expected = max(0, self.end(len(self) - 1)) try: f = self.opener(self.datafile) @@ -1321,10 +1322,10 @@ di = actual - (i * s) if self._inline: databytes = 0 - for r in xrange(self.count()): + for r in self: databytes += max(0, self.length(r)) dd = 0 - di = actual - self.count() * s - databytes + di = actual - len(self) * s - databytes except IOError, inst: if inst.errno != errno.ENOENT: raise