[MERGE] Add a 'nosmart+' transport decorator.

Andrew Bennetts andrew at canonical.com
Wed Apr 2 11:13:36 BST 2008


(This is related to bug 207558.)

Now that bzr.dev automatically probes for a smart server on plain HTTP URLs,
it's occasionally useful to be able to disable the probing and force bzr to use
plain HTTP (for instance for debugging, benchmarking, or simply to workaround a
misconfigured smart server).  This patch achieves this by adding a 'nosmart+'
transport decorator.  So you could do e.g.:

     bzr branch nosmart+http://bazaar.launchpad.net/~bzr/bzr/trunk

Essentially, this decorator gives the bzr 1.3 behaviour for http:// URLs.

I was originally going to make the automatic probing off by default, at least
for a release, but Robert convinced me that that's not worth doing.  So instead,
here's a way to opt-out of the automatic probing, rather than opt-in.

I'm not sure that "nosmart" is the best possible prefix for this, but "nobzr"
somehow didn't feel right.  Comments welcome.

-Andrew.

-------------- next part --------------
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: andrew.bennetts at canonical.com-20080402100536-\
#   036gccz7fxmiotua
# target_branch: http://bazaar-vcs.org/bzr/bzr.dev
# testament_sha1: 71afc1fdd9efcb36c5190cba1d9ce21db3b0c917
# timestamp: 2008-04-02 21:06:47 +1100
# source_branch: http://people.ubuntu.com/~andrew/bzr/bug-207558
# base_revision_id: andrew.bennetts at canonical.com-20080401115907-\
#   8a8txfptssz811mw
# 
# Begin patch
=== modified file 'NEWS'
--- NEWS	2008-04-01 03:51:04 +0000
+++ NEWS	2008-04-02 10:05:36 +0000
@@ -41,8 +41,9 @@
 
     * The smart protocol client is slightly faster, because it now only queries
       the server for the protocol version once per connection.  Also, the HTTP
-      transport will now automatically use a smart server if one is present.
-      (Andrew Bennetts)
+      transport will now automatically probe for and use a smart server if
+      one is present.  You can use the new ``nosmart+`` transport decorator
+      to get the old behaviour.  (Andrew Bennetts)
 
   BUGFIXES:
 

=== modified file 'bzrlib/transport/__init__.py'
--- bzrlib/transport/__init__.py	2008-03-28 08:58:43 +0000
+++ bzrlib/transport/__init__.py	2008-04-02 10:05:36 +0000
@@ -1798,6 +1798,10 @@
                         'bzrlib.transport.fakevfat',
                         'FakeVFATTransportDecorator')
 
+register_transport_proto('nosmart+')
+register_lazy_transport('nosmart+', 'bzrlib.transport.nosmart',
+                        'NoSmartTransportDecorator')
+
 # These two schemes were registered, but don't seem to have an actual transport
 # protocol registered
 for scheme in ['ssh', 'bzr+loopback']:

=== added file 'bzrlib/transport/nosmart.py'
--- bzrlib/transport/nosmart.py	1970-01-01 00:00:00 +0000
+++ bzrlib/transport/nosmart.py	2008-04-02 10:05:36 +0000
@@ -0,0 +1,49 @@
+# Copyright (C) 2008 Canonical Ltd
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+"""Implementation of Transport that never has a smart medium.
+
+This is mainly useful with HTTP transports, which sometimes have a smart medium
+and sometimes don't.  By using this decorator, you can force those transports
+to never have a smart medium.
+"""
+
+from bzrlib import errors
+from bzrlib.transport.decorator import TransportDecorator, DecoratorServer
+
+
+class NoSmartTransportDecorator(TransportDecorator):
+    """A decorator for transports that disables get_smart_medium."""
+
+    @classmethod
+    def _get_url_prefix(self):
+        return 'nosmart+'
+
+    def get_smart_medium(self):
+        raise errors.NoSmartMedium(self)
+
+
+class NoSmartTransportServer(DecoratorServer):
+    """Server for the NoSmartTransportDecorator for testing with."""
+
+    def get_decorator_class(self):
+        return NoSmartTransportDecorator
+
+
+def get_test_permutations():
+    """Return the permutations to be used in testing."""
+    return [(NoSmartTransportDecorator, NoSmartTransportServer)]
+

# Begin bundle
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
CQ1dvLVA


More information about the bazaar mailing list