86
85
class SmartServerRequestBzrDir(SmartServerRequest):
88
87
def do(self, path, *args):
89
"""Open a BzrDir at path, and return self.do_bzrdir_request(*args)."""
88
"""Open a BzrDir at path, and return `self.do_bzrdir_request(*args)`."""
91
90
self._bzrdir = BzrDir.open_from_transport(
92
91
self.transport_from_client_path(path))
121
120
return '/'.join(segments)
123
class SmartServerBzrDirRequestDestroyBranch(SmartServerRequestBzrDir):
125
def do_bzrdir_request(self, name=None):
126
"""Destroy the branch with the specified name.
129
:return: On success, 'ok'.
132
self._bzrdir.destroy_branch(name)
133
except errors.NotBranchError, e:
134
return FailedSmartServerResponse(('nobranch',))
135
return SuccessfulSmartServerResponse(('ok',))
138
class SmartServerBzrDirRequestHasWorkingTree(SmartServerRequestBzrDir):
140
def do_bzrdir_request(self, name=None):
141
"""Check whether there is a working tree present.
145
:return: If there is a working tree present, 'yes'.
148
if self._bzrdir.has_workingtree():
149
return SuccessfulSmartServerResponse(('yes', ))
151
return SuccessfulSmartServerResponse(('no', ))
154
class SmartServerBzrDirRequestDestroyRepository(SmartServerRequestBzrDir):
156
def do_bzrdir_request(self, name=None):
157
"""Destroy the repository.
161
:return: On success, 'ok'.
164
self._bzrdir.destroy_repository()
165
except errors.NoRepositoryPresent, e:
166
return FailedSmartServerResponse(('norepository',))
167
return SuccessfulSmartServerResponse(('ok',))
124
170
class SmartServerBzrDirRequestCloningMetaDir(SmartServerRequestBzrDir):
126
172
def do_bzrdir_request(self, require_stacking):
150
196
control_format = self._bzrdir.cloning_metadir(
151
197
require_stacking=require_stacking)
152
198
control_name = control_format.network_name()
153
# XXX: There should be a method that tells us that the format does/does
154
# not have subformats.
155
if isinstance(control_format, BzrDirMetaFormat1):
199
if not control_format.fixed_components:
156
200
branch_name = ('branch',
157
201
control_format.get_branch_format().network_name())
158
202
repository_name = control_format.repository_format.network_name()
211
class SmartServerBzrDirRequestCheckoutMetaDir(SmartServerRequestBzrDir):
212
"""Get the format to use for checkouts.
216
:return: on success, a 3-tuple of network names for (control,
217
repository, branch) directories, where '' signifies "not present".
218
If this BzrDir contains a branch reference then this will fail with
219
BranchReference; clients should resolve branch references before
220
calling this RPC (they should not try to create a checkout of a
224
def do_bzrdir_request(self):
226
branch_ref = self._bzrdir.get_branch_reference()
227
except errors.NotBranchError:
229
if branch_ref is not None:
230
# The server shouldn't try to resolve references, and it quite
231
# possibly can't reach them anyway. The client needs to resolve
232
# the branch reference to determine the cloning_metadir.
233
return FailedSmartServerResponse(('BranchReference',))
234
control_format = self._bzrdir.checkout_metadir()
235
control_name = control_format.network_name()
236
if not control_format.fixed_components:
237
branch_name = control_format.get_branch_format().network_name()
238
repo_name = control_format.repository_format.network_name()
242
return SuccessfulSmartServerResponse(
243
(control_name, repo_name, branch_name))
167
246
class SmartServerRequestCreateBranch(SmartServerRequestBzrDir):
169
248
def do(self, path, network_name):
182
261
:param path: The path to the bzrdir.
183
262
:param network_name: The network name of the branch type to create.
184
:return: (ok, network_name)
263
:return: ('ok', branch_format, repo_path, rich_root, tree_ref,
264
external_lookup, repo_format)
186
266
bzrdir = BzrDir.open_from_transport(
187
267
self.transport_from_client_path(path))