~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/smart/bzrdir.py

  • Committer: John Arbash Meinel
  • Date: 2010-01-12 22:51:31 UTC
  • mto: This revision was merged to the branch mainline in revision 4955.
  • Revision ID: john@arbash-meinel.com-20100112225131-he8h411p6aeeb947
Delay grabbing an output stream until we actually go to show a diff.

This makes the test suite happy, but it also seems to be reasonable.
If we aren't going to write anything, we don't need to hold an
output stream open.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006 Canonical Ltd
2
2
#
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
88
88
        try:
89
89
            self._bzrdir = BzrDir.open_from_transport(
90
90
                self.transport_from_client_path(path))
91
 
        except errors.NotBranchError, e:
92
 
            return FailedSmartServerResponse(('nobranch',))
 
91
        except errors.NotBranchError:
 
92
            return FailedSmartServerResponse(('nobranch', ))
93
93
        return self.do_bzrdir_request(*args)
94
94
 
95
95
    def _boolean_to_yes_no(self, a_boolean):
110
110
        """Get the relative path for repository from current_transport."""
111
111
        # the relpath of the bzrdir in the found repository gives us the
112
112
        # path segments to pop-out.
113
 
        relpath = repository.user_transport.relpath(
 
113
        relpath = repository.bzrdir.root_transport.relpath(
114
114
            current_transport.base)
115
115
        if len(relpath):
116
116
            segments = ['..'] * len(relpath.split('/'))
465
465
                return SuccessfulSmartServerResponse(('ok', ''))
466
466
            else:
467
467
                return SuccessfulSmartServerResponse(('ok', reference_url))
468
 
        except errors.NotBranchError, e:
469
 
            return FailedSmartServerResponse(('nobranch',))
 
468
        except errors.NotBranchError:
 
469
            return FailedSmartServerResponse(('nobranch', ))
470
470
 
471
471
 
472
472
class SmartServerRequestOpenBranchV2(SmartServerRequestBzrDir):
481
481
                return SuccessfulSmartServerResponse(('branch', format))
482
482
            else:
483
483
                return SuccessfulSmartServerResponse(('ref', reference_url))
484
 
        except errors.NotBranchError, e:
485
 
            return FailedSmartServerResponse(('nobranch',))
486
 
 
487
 
 
488
 
class SmartServerRequestOpenBranchV3(SmartServerRequestBzrDir):
489
 
 
490
 
    def do_bzrdir_request(self):
491
 
        """Open a branch at path and return the reference or format.
492
 
        
493
 
        This version introduced in 2.1.
494
 
 
495
 
        Differences to SmartServerRequestOpenBranchV2:
496
 
          * can return 2-element ('nobranch', extra), where 'extra' is a string
497
 
            with an explanation like 'location is a repository'.  Previously
498
 
            a 'nobranch' response would never have more than one element.
499
 
        """
500
 
        try:
501
 
            reference_url = self._bzrdir.get_branch_reference()
502
 
            if reference_url is None:
503
 
                br = self._bzrdir.open_branch(ignore_fallbacks=True)
504
 
                format = br._format.network_name()
505
 
                return SuccessfulSmartServerResponse(('branch', format))
506
 
            else:
507
 
                return SuccessfulSmartServerResponse(('ref', reference_url))
508
 
        except errors.NotBranchError, e:
509
 
            # Stringify the exception so that its .detail attribute will be
510
 
            # filled out.
511
 
            str(e)
512
 
            resp = ('nobranch',)
513
 
            detail = e.detail
514
 
            if detail:
515
 
                if detail.startswith(': '):
516
 
                    detail = detail[2:]
517
 
                resp += (detail,)
518
 
            return FailedSmartServerResponse(resp)
519
 
 
 
484
        except errors.NotBranchError:
 
485
            return FailedSmartServerResponse(('nobranch', ))