17
17
"""Server-side bzrdir related request implmentations."""
19
from __future__ import absolute_import
20
21
from bzrlib import branch, errors, repository, urlutils
21
22
from bzrlib.bzrdir import (
212
class SmartServerBzrDirRequestCheckoutMetaDir(SmartServerRequestBzrDir):
213
"""Get the format to use for checkouts.
217
:return: on success, a 3-tuple of network names for (control,
218
repository, branch) directories, where '' signifies "not present".
219
If this BzrDir contains a branch reference then this will fail with
220
BranchReference; clients should resolve branch references before
221
calling this RPC (they should not try to create a checkout of a
225
def do_bzrdir_request(self):
227
branch_ref = self._bzrdir.get_branch_reference()
228
except errors.NotBranchError:
230
if branch_ref is not None:
231
# The server shouldn't try to resolve references, and it quite
232
# possibly can't reach them anyway. The client needs to resolve
233
# the branch reference to determine the cloning_metadir.
234
return FailedSmartServerResponse(('BranchReference',))
235
control_format = self._bzrdir.checkout_metadir()
236
control_name = control_format.network_name()
237
if not control_format.fixed_components:
238
branch_name = control_format.get_branch_format().network_name()
239
repo_name = control_format.repository_format.network_name()
243
return SuccessfulSmartServerResponse(
244
(control_name, repo_name, branch_name))
211
247
class SmartServerRequestCreateBranch(SmartServerRequestBzrDir):
213
249
def do(self, path, network_name):