[Pkg-bazaar-commits] ./bzr/unstable r230: Revfile: better __iter__ method that reads the whole index file in one go!

mbp at sourcefrog.net mbp at sourcefrog.net
Fri Apr 10 07:51:29 UTC 2009


------------------------------------------------------------
revno: 230
committer: mbp at sourcefrog.net
timestamp: Sat 2005-04-09 17:04:27 +1000
message:
  Revfile: better __iter__ method that reads the whole index file in one go!
modified:
  bzrlib/revfile.py
-------------- next part --------------
=== modified file 'bzrlib/revfile.py'
--- a/bzrlib/revfile.py	2005-04-09 06:50:50 +0000
+++ b/bzrlib/revfile.py	2005-04-09 07:04:27 +0000
@@ -381,19 +381,37 @@
         """Index by sequence id returns the index field"""
         ## TODO: Can avoid seek if we just moved there...
         self._seek_index(idx)
-        return self._read_next_index()
+        idxrec = self._read_next_index()
+        if idxrec == None:
+            raise IndexError()
+        else:
+            return idxrec
 
 
     def _seek_index(self, idx):
         if idx < 0:
             raise RevfileError("invalid index %r" % idx)
         self.idxfile.seek((idx + 1) * _RECORDSIZE)
+
+
+
+    def __iter__(self):
+        """Read back all index records.
+
+        Do not seek the index file while this is underway!"""
+        sys.stderr.write(" ** iter called ** \n")
+        self._seek_index(0)
+        while True:
+            idxrec = self._read_next_index()
+            if not idxrec:
+                break
+            yield idxrec
         
 
     def _read_next_index(self):
         rec = self.idxfile.read(_RECORDSIZE)
         if not rec:
-            raise IndexError("end of index file")
+            return None
         elif len(rec) != _RECORDSIZE:
             raise RevfileError("short read of %d bytes getting index %d from %r"
                                % (len(rec), idx, self.basename))



More information about the Pkg-bazaar-commits mailing list