~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/medium.py

  • Committer: Andrew Bennetts
  • Date: 2008-05-08 06:29:07 UTC
  • mto: This revision was merged to the branch mainline in revision 3428.
  • Revision ID: andrew.bennetts@canonical.com-20080508062907-gk5ycaa6wm6qrggq
Don't automatically send 'hello' requests from RemoteBzrDirFormat.probe_transport unless we have to (i.e. the transport is HTTP).

Show diffs side-by-side

added added

removed removed

Lines of Context:
431
431
        super(SmartClientMedium, self).__init__()
432
432
        self._protocol_version_error = None
433
433
        self._protocol_version = None
 
434
        self._done_hello = False
434
435
 
435
436
    def protocol_version(self):
436
 
        """Find out the best protocol version to use."""
 
437
        """Find out if 'hello' smart request works."""
437
438
        if self._protocol_version_error is not None:
438
439
            raise self._protocol_version_error
439
 
        if self._protocol_version is None:
 
440
        if not self._done_hello:
440
441
            try:
441
442
                medium_request = self.get_request()
442
443
                # Send a 'hello' request in protocol version one, for maximum
443
444
                # backwards compatibility.
444
445
                client_protocol = SmartClientRequestProtocolOne(medium_request)
445
 
                self._protocol_version = client_protocol.query_version()
 
446
                client_protocol.query_version()
 
447
                self._done_hello = True
446
448
            except errors.SmartProtocolError, e:
447
449
                # Cache the error, just like we would cache a successful
448
450
                # result.
449
451
                self._protocol_version_error = e
450
452
                raise
451
 
        return self._protocol_version
 
453
        return '2'
 
454
 
 
455
    def should_probe(self):
 
456
        """Should RemoteBzrDirFormat.probe_transport send a smart request on
 
457
        this medium?
 
458
 
 
459
        Some transports are unambiguously smart-only; there's no need to check
 
460
        if the transport is able to carry smart requests, because that's all
 
461
        it is for.  In those cases, this method should return False.
 
462
 
 
463
        But some HTTP transports can sometimes fail to carry smart requests,
 
464
        but still be usuable for accessing remote bzrdirs via plain file
 
465
        accesses.  So for those transports, their media should return True here
 
466
        so that RemoteBzrDirFormat can determine if it is appropriate for that
 
467
        transport.
 
468
        """
 
469
        return False
452
470
 
453
471
    def disconnect(self):
454
472
        """If this medium maintains a persistent connection, close it.