No subject
Wed Jan 21 23:15:58 GMT 2009
read_bundle tests that had very subtle bugs.
I ended up fixing them and deprecating read_bundle_from_url in
the process (see patch for detailed explanations or ask questions
during the review if needed).
Vincent
--=-=-=
Content-Type: text/x-patch
Content-Disposition: inline; filename=httplib-broken-readline-3989.patch
Content-Description: BZR merge
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: v.ladeuil+lp at free.fr-20090209182543-nb0220ksr5xa20pg
# target_branch: http://bazaar-vcs.org/bzr/bzr.dev/
# testament_sha1: 89000d4422dfcacd4d1f4c5e398070eb747d997b
# timestamp: 2009-02-09 20:20:34 +0100
# base_revision_id: pqm at pqm.ubuntu.com-20090209040048-4w0lmgdasmdw5xdn
#
# Begin patch
=== modified file 'bzrlib/bundle/__init__.py'
--- bzrlib/bundle/__init__.py 2008-10-01 05:40:45 +0000
+++ bzrlib/bundle/__init__.py 2009-02-09 18:25:43 +0000
@@ -14,6 +14,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+from bzrlib.symbol_versioning import deprecated_function, deprecated_in
from bzrlib.lazy_import import lazy_import
lazy_import(globals(), """
from bzrlib import (
@@ -29,6 +30,7 @@
from bzrlib.trace import note
+ at deprecated_function(deprecated_in((1, 12, 0)))
def read_bundle_from_url(url):
return read_mergeable_from_url(url, _do_directive=False)
=== modified file 'bzrlib/tests/test_read_bundle.py'
--- bzrlib/tests/test_read_bundle.py 2008-04-01 19:30:25 +0000
+++ bzrlib/tests/test_read_bundle.py 2009-02-09 18:25:43 +0000
@@ -23,6 +23,7 @@
from bzrlib.bundle.serializer import write_bundle
import bzrlib.bzrdir
import bzrlib.errors as errors
+from bzrlib.symbol_versioning import deprecated_in
from bzrlib import tests
from bzrlib.tests.test_transport import TestTransportImplementation
from bzrlib.tests.test_transport_implementations import TransportTestProviderAdapter
@@ -34,9 +35,15 @@
def load_tests(standard_tests, module, loader):
"""Multiply tests for tranport implementations."""
result = loader.suiteClass()
+ transport_tests, remaining_tests = tests.split_suite_by_condition(
+ standard_tests, tests.condition_isinstance((TestReadBundleFromURL)))
+
adapter = TransportTestProviderAdapter()
- for test in tests.iter_suite_tests(standard_tests):
- result.addTests(adapter.adapt(test))
+ tests.adapt_tests(transport_tests, adapter, result)
+
+ # No parametrization for the remaining tests
+ result.addTests(remaining_tests)
+
return result
@@ -60,6 +67,25 @@
return out, wt
+class TestDeprecations(tests.TestCaseInTempDir):
+
+ def create_test_bundle(self):
+ out, wt = create_bundle_file(self)
+ f = open('test_bundle', 'wb')
+ f.write(out.getvalue())
+ f.close()
+ return wt
+
+ def test_read_bundle_from_url_deprecated(self):
+ wt = self.create_test_bundle()
+ t = bzrlib.transport.get_transport(self.test_dir)
+ url = t.abspath('test_bundle')
+ self.callDeprecated([deprecated_in((1, 12, 0))
+ % 'bzrlib.bundle.read_bundle_from_url'],
+ bzrlib.bundle.read_bundle_from_url,
+ url)
+
+
class TestReadBundleFromURL(TestTransportImplementation):
"""Test that read_bundle works properly across multiple transports"""
@@ -77,13 +103,20 @@
self.log('Put to: %s', self.get_url('test_bundle'))
return wt
- def test_read_bundle_from_url(self):
+ def test_read_mergeable_from_url(self):
self._captureVar('BZR_NO_SMART_VFS', None)
wt = self.create_test_bundle()
if wt is None:
return
- info = bzrlib.bundle.read_bundle_from_url(
- unicode(self.get_url('test_bundle')))
+ # read_mergeable_from_url will invoke get_transport which may *not*
+ # respect self._transport (i.e. returns a transport that is different
+ # from the one we want to test, so we must inject a correct transport
+ # into possible_transports first.
+ t = self.get_transport('test_bundle')
+ possible_transports = [t]
+ info = bzrlib.bundle.read_mergeable_from_url(
+ unicode(self.get_url('test_bundle')),
+ possible_transports=possible_transports)
revision = info.real_revisions[-1]
self.assertEqual('commit-1', revision.revision_id)
@@ -95,19 +128,28 @@
if wt is None:
return
- self.assertRaises(errors.NotABundle,
- bzrlib.bundle.read_bundle_from_url,
+ self.assertRaises(errors.NotABundle,
+ bzrlib.bundle.read_mergeable_from_url,
self.get_url('tree'))
- self.assertRaises(errors.NotABundle,
- bzrlib.bundle.read_bundle_from_url,
+ self.assertRaises(errors.NotABundle,
+ bzrlib.bundle.read_mergeable_from_url,
self.get_url('tree/a'))
- def test_read_mergeable_populates_possible_transports(self):
+ def test_read_mergeable_respects_possible_transports(self):
+ t = self.get_transport('test_bundle')
+ if not isinstance(t, bzrlib.transport.ConnectedTransport):
+ # There is no point testing transport reuse for not connected
+ # transports (the test will fail even).
+ return
self._captureVar('BZR_NO_SMART_VFS', None)
wt = self.create_test_bundle()
if wt is None:
return
- possible_transports = []
+ # read_mergeable_from_url will invoke get_transport which may *not*
+ # respect self._transport (i.e. returns a transport that is different
+ # from the one we want to test, so we must inject a correct transport
+ # into possible_transports first.
+ possible_transports = [t]
url = unicode(self.get_url('test_bundle'))
info = bzrlib.bundle.read_mergeable_from_url(url,
possible_transports=possible_transports)
=== modified file 'bzrlib/transport/http/_urllib2_wrappers.py'
--- bzrlib/transport/http/_urllib2_wrappers.py 2009-01-29 14:27:28 +0000
+++ bzrlib/transport/http/_urllib2_wrappers.py 2009-02-09 18:25:43 +0000
@@ -79,8 +79,13 @@
self._report_activity(len(s), 'read')
return s
- def readline(self, size=-1):
- s = self.filesock.readline(size)
+ def readline(self):
+ # This should be readline(self, size=-1), but httplib in python 2.4 and
+ # 2.5 defines a SSLFile wrapper whose readline method lacks the size
+ # parameter. So until we drop support for 2.4 and 2.5 and since we
+ # don't *need* the size parameter we'll stay with readline(self)
+ # -- vila 20090209
+ s = self.filesock.readline()
self._report_activity(len(s), 'read')
return s
# Begin bundle
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
--=-=-=--
More information about the bazaar
mailing list