Rev 3637: Add osutils.pump_string_file helper function. in http://people.ubuntu.com/~robertc/baz2.0/bug-255656
Robert Collins
robertc at robertcollins.net
Fri Aug 15 06:35:25 BST 2008
At http://people.ubuntu.com/~robertc/baz2.0/bug-255656
------------------------------------------------------------
revno: 3637
revision-id: robertc at robertcollins.net-20080815053517-fjmv6jtns6s5ui9a
parent: robertc at robertcollins.net-20080815035953-1pm7xp97h9hckouv
committer: Robert Collins <robertc at robertcollins.net>
branch nick: bug-255656
timestamp: Fri 2008-08-15 15:35:17 +1000
message:
Add osutils.pump_string_file helper function.
modified:
bzrlib/osutils.py osutils.py-20050309040759-eeaff12fbf77ac86
bzrlib/tests/test_osutils.py test_osutils.py-20051201224856-e48ee24c12182989
bzrlib/transport/__init__.py transport.py-20050711165921-4978aa7ce1285ad5
=== modified file 'bzrlib/osutils.py'
--- a/bzrlib/osutils.py 2008-08-13 16:07:10 +0000
+++ b/bzrlib/osutils.py 2008-08-15 05:35:17 +0000
@@ -569,6 +569,24 @@
return length
+def pump_string_file(bytes, file_handle, segment_size=None):
+ """Write bytes to file_handle in many smaller writes.
+
+ :param bytes: The string to write.
+ :param file_handle: The file to write to.
+ """
+ # Write data in chunks rather than all at once, because very large
+ # writes fail on some platforms (e.g. Windows with SMB mounted
+ # drives).
+ if not segment_size:
+ segment_size = 5242880 # 5MB
+ segments = range(len(bytes) / segment_size + 1)
+ write = file_handle.write
+ for segment_index in segments:
+ segment = buffer(bytes, segment_index * segment_size, segment_size)
+ write(segment)
+
+
def file_iterator(input_file, readsize=32768):
while True:
b = input_file.read(readsize)
=== modified file 'bzrlib/tests/test_osutils.py'
--- a/bzrlib/tests/test_osutils.py 2008-07-17 20:16:43 +0000
+++ b/bzrlib/tests/test_osutils.py 2008-08-15 05:35:17 +0000
@@ -37,6 +37,7 @@
is_inside_or_parent_of_any,
pathjoin,
pumpfile,
+ pump_string_file,
)
from bzrlib.tests import (
probe_unicode_in_user_encoding,
@@ -440,6 +441,30 @@
message = "Data not equal. Expected %d bytes, received %d."
self.fail(message % (len(response_data), self.test_data_len))
+
+class TestPumpStringFile(TestCase):
+
+ def test_empty(self):
+ output = StringIO()
+ pump_string_file("", output)
+ self.assertEqual("", output.getvalue())
+
+ def test_more_than_segment_size(self):
+ output = StringIO()
+ pump_string_file("123456789", output, 2)
+ self.assertEqual("123456789", output.getvalue())
+
+ def test_segment_size(self):
+ output = StringIO()
+ pump_string_file("12", output, 2)
+ self.assertEqual("12", output.getvalue())
+
+ def test_segment_size_multiple(self):
+ output = StringIO()
+ pump_string_file("1234", output, 2)
+ self.assertEqual("1234", output.getvalue())
+
+
class TestSafeUnicode(TestCase):
def test_from_ascii_string(self):
=== modified file 'bzrlib/transport/__init__.py'
--- a/bzrlib/transport/__init__.py 2008-08-15 03:59:53 +0000
+++ b/bzrlib/transport/__init__.py 2008-08-15 05:35:17 +0000
@@ -254,14 +254,7 @@
self.file_handle.close()
def write(self, bytes):
- # Write data in 5MB chunks rather than all at once, because very large
- # writes fail on some platforms (e.g. Windows with SMB mounted
- # drives).
- segment_size = 5242880 # 5MB
- segments = range(len(bytes) / segment_size + 1)
- for segment_index in segments:
- segment = buffer(bytes, segment_index * segment_size, segment_size)
- self.file_handle.write(segment)
+ osutils.pump_string_file(bytes, self.file_handle)
class AppendBasedFileStream(FileStream):
More information about the bazaar-commits
mailing list