mercurial/util.py
changeset 5449 17a4b20eda7b
parent 5447 56591846f819
child 5450 c728424d44c6
equal deleted inserted replaced
5448:e038738714fd 5449:17a4b20eda7b
  1406     def read(self, l):
  1406     def read(self, l):
  1407         """Read L bytes of data from the iterator of chunks of data.
  1407         """Read L bytes of data from the iterator of chunks of data.
  1408         Returns less than L bytes if the iterator runs dry."""
  1408         Returns less than L bytes if the iterator runs dry."""
  1409         if l > len(self.buf) and self.iter:
  1409         if l > len(self.buf) and self.iter:
  1410             # Clamp to a multiple of self.targetsize
  1410             # Clamp to a multiple of self.targetsize
  1411             targetsize = self.targetsize * ((l // self.targetsize) + 1)
  1411             targetsize = max(l, self.targetsize)
  1412             collector = cStringIO.StringIO()
  1412             collector = cStringIO.StringIO()
  1413             collector.write(self.buf)
  1413             collector.write(self.buf)
  1414             collected = len(self.buf)
  1414             collected = len(self.buf)
  1415             for chunk in self.iter:
  1415             for chunk in self.iter:
  1416                 collector.write(chunk)
  1416                 collector.write(chunk)
  1418                 if collected >= targetsize:
  1418                 if collected >= targetsize:
  1419                     break
  1419                     break
  1420             if collected < targetsize:
  1420             if collected < targetsize:
  1421                 self.iter = False
  1421                 self.iter = False
  1422             self.buf = collector.getvalue()
  1422             self.buf = collector.getvalue()
  1423         s, self.buf = self.buf[:l], buffer(self.buf, l)
  1423         if len(self.buf) == l:
       
  1424             s, self.buf = self.buf, ''
       
  1425         else:
       
  1426             s, self.buf = self.buf[:l], buffer(self.buf, l)
  1424         return s
  1427         return s
  1425 
  1428 
  1426 def filechunkiter(f, size=65536, limit=None):
  1429 def filechunkiter(f, size=65536, limit=None):
  1427     """Create a generator that produces the data in the file size
  1430     """Create a generator that produces the data in the file size
  1428     (default 65536) bytes at a time, up to optional limit (default is
  1431     (default 65536) bytes at a time, up to optional limit (default is