89
89
self._bzrdir = BzrDir.open_from_transport(
90
90
self.transport_from_client_path(path))
91
91
except errors.NotBranchError, e:
93
return FailedSmartServerResponse(('nobranch',))
94
return FailedSmartServerResponse(('nobranch', e.detail))
92
return FailedSmartServerResponse(('nobranch',))
95
93
return self.do_bzrdir_request(*args)
97
95
def _boolean_to_yes_no(self, a_boolean):
469
467
return SuccessfulSmartServerResponse(('ok', reference_url))
470
468
except errors.NotBranchError, e:
472
return FailedSmartServerResponse(('nobranch',))
473
return FailedSmartServerResponse(('nobranch', e.detail))
469
return FailedSmartServerResponse(('nobranch',))
476
472
class SmartServerRequestOpenBranchV2(SmartServerRequestBzrDir):
487
483
return SuccessfulSmartServerResponse(('ref', reference_url))
488
484
except errors.NotBranchError, e:
490
return FailedSmartServerResponse(('nobranch',))
491
return FailedSmartServerResponse(('nobranch', e.detail))
485
return FailedSmartServerResponse(('nobranch',))
488
class SmartServerRequestOpenBranchV3(SmartServerRequestBzrDir):
490
def do_bzrdir_request(self):
491
"""Open a branch at path and return the reference or format.
493
This version introduced in 2.1.
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.
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))
507
return SuccessfulSmartServerResponse(('ref', reference_url))
508
except errors.NotBranchError, e:
513
if detail.startswith(': '):
516
return FailedSmartServerResponse(resp)