17
17
"""Server-side bzrdir related request implmentations."""
19
from __future__ import absolute_import
20
from bzrlib import branch, errors, repository, urlutils
28
21
from bzrlib.bzrdir import (
218
class SmartServerBzrDirRequestCheckoutMetaDir(SmartServerRequestBzrDir):
219
"""Get the format to use for checkouts.
223
:return: on success, a 3-tuple of network names for (control,
224
repository, branch) directories, where '' signifies "not present".
225
If this BzrDir contains a branch reference then this will fail with
226
BranchReference; clients should resolve branch references before
227
calling this RPC (they should not try to create a checkout of a
231
def do_bzrdir_request(self):
233
branch_ref = self._bzrdir.get_branch_reference()
234
except errors.NotBranchError:
236
if branch_ref is not None:
237
# The server shouldn't try to resolve references, and it quite
238
# possibly can't reach them anyway. The client needs to resolve
239
# the branch reference to determine the cloning_metadir.
240
return FailedSmartServerResponse(('BranchReference',))
241
control_format = self._bzrdir.checkout_metadir()
242
control_name = control_format.network_name()
243
if not control_format.fixed_components:
244
branch_name = control_format.get_branch_format().network_name()
245
repo_name = control_format.repository_format.network_name()
249
return SuccessfulSmartServerResponse(
250
(control_name, repo_name, branch_name))
253
211
class SmartServerRequestCreateBranch(SmartServerRequestBzrDir):
255
213
def do(self, path, network_name):
274
232
self.transport_from_client_path(path))
275
233
format = branch.network_format_registry.get(network_name)
276
234
bzrdir.branch_format = format
277
result = format.initialize(bzrdir, name="")
235
result = format.initialize(bzrdir)
278
236
rich_root, tree_ref, external_lookup = self._format_to_capabilities(
279
237
result.repository._format)
280
238
branch_format = result._format.network_name()
431
389
return SuccessfulSmartServerResponse((), content)
434
class SmartServerBzrDirRequestGetBranches(SmartServerRequestBzrDir):
436
def do_bzrdir_request(self):
437
"""Get the branches in a control directory.
439
The body is a bencoded dictionary, with values similar to the return
440
value of the open branch request.
442
branches = self._bzrdir.get_branches()
444
for name, b in branches.iteritems():
447
ret[name] = ("branch", b._format.network_name())
448
return SuccessfulSmartServerResponse(
449
("success", ), bencode.bencode(ret))
452
392
class SmartServerRequestInitializeBzrDir(SmartServerRequest):
454
394
def do(self, path):