242
242
self._ensure_real()
243
243
self._real_bzrdir.destroy_repository()
245
def create_branch(self):
245
def create_branch(self, name=None):
246
246
# as per meta1 formats - just delegate to the format object which may
247
247
# be parameterised.
248
real_branch = self._format.get_branch_format().initialize(self)
248
real_branch = self._format.get_branch_format().initialize(self,
249
250
if not isinstance(real_branch, RemoteBranch):
250
result = RemoteBranch(self, self.find_repository(), real_branch)
251
result = RemoteBranch(self, self.find_repository(), real_branch,
252
254
result = real_branch
253
255
# BzrDir.clone_on_transport() uses the result of create_branch but does
259
261
self._next_open_branch_result = result
262
def destroy_branch(self):
264
def destroy_branch(self, name=None):
263
265
"""See BzrDir.destroy_branch"""
264
266
self._ensure_real()
265
self._real_bzrdir.destroy_branch()
267
self._real_bzrdir.destroy_branch(name=name)
266
268
self._next_open_branch_result = None
268
270
def create_workingtree(self, revision_id=None, from_branch=None):
318
320
"""See BzrDir._get_tree_branch()."""
319
321
return None, self.open_branch()
321
def open_branch(self, _unsupported=False, ignore_fallbacks=False):
323
def open_branch(self, name=None, unsupported=False,
324
ignore_fallbacks=False):
323
326
raise NotImplementedError('unsupported flag support not implemented yet.')
324
327
if self._next_open_branch_result is not None:
325
328
# See create_branch for details.
330
333
if response[0] == 'ref':
331
334
# a branch reference, use the existing BranchReference logic.
332
335
format = BranchReferenceFormat()
333
return format.open(self, _found=True, location=response[1],
334
ignore_fallbacks=ignore_fallbacks)
336
return format.open(self, name=name, _found=True,
337
location=response[1], ignore_fallbacks=ignore_fallbacks)
335
338
branch_format_name = response[1]
336
339
if not branch_format_name:
337
340
branch_format_name = None
338
341
format = RemoteBranchFormat(network_name=branch_format_name)
339
342
return RemoteBranch(self, self.find_repository(), format=format,
340
setup_stacking=not ignore_fallbacks)
343
setup_stacking=not ignore_fallbacks, name=name)
342
345
def _open_repo_v1(self, path):
343
346
verb = 'BzrDir.find_repository'
420
423
"""Return the path to be used for this bzrdir in a remote call."""
421
424
return client.remote_path_from_transport(self.root_transport)
423
def get_branch_transport(self, branch_format):
426
def get_branch_transport(self, branch_format, name=None):
424
427
self._ensure_real()
425
return self._real_bzrdir.get_branch_transport(branch_format)
428
return self._real_bzrdir.get_branch_transport(branch_format, name=name)
427
430
def get_repository_transport(self, repository_format):
428
431
self._ensure_real()
1229
1232
return self._real_repository.add_inventory(revid, inv, parents)
1231
1234
def add_inventory_by_delta(self, basis_revision_id, delta, new_revision_id,
1235
parents, basis_inv=None, propagate_caches=False):
1233
1236
self._ensure_real()
1234
1237
return self._real_repository.add_inventory_by_delta(basis_revision_id,
1235
delta, new_revision_id, parents)
1238
delta, new_revision_id, parents, basis_inv=basis_inv,
1239
propagate_caches=propagate_caches)
1237
1241
def add_revision(self, rev_id, rev, inv=None, config=None):
1238
1242
self._ensure_real()
2021
2025
def network_name(self):
2022
2026
return self._network_name
2024
def open(self, a_bzrdir, ignore_fallbacks=False):
2025
return a_bzrdir.open_branch(ignore_fallbacks=ignore_fallbacks)
2028
def open(self, a_bzrdir, name=None, ignore_fallbacks=False):
2029
return a_bzrdir.open_branch(name=name,
2030
ignore_fallbacks=ignore_fallbacks)
2027
def _vfs_initialize(self, a_bzrdir):
2032
def _vfs_initialize(self, a_bzrdir, name):
2028
2033
# Initialisation when using a local bzrdir object, or a non-vfs init
2029
2034
# method is not available on the server.
2030
2035
# self._custom_format is always set - the start of initialize ensures
2032
2037
if isinstance(a_bzrdir, RemoteBzrDir):
2033
2038
a_bzrdir._ensure_real()
2034
result = self._custom_format.initialize(a_bzrdir._real_bzrdir)
2039
result = self._custom_format.initialize(a_bzrdir._real_bzrdir,
2036
2042
# We assume the bzrdir is parameterised; it may not be.
2037
result = self._custom_format.initialize(a_bzrdir)
2043
result = self._custom_format.initialize(a_bzrdir, name)
2038
2044
if (isinstance(a_bzrdir, RemoteBzrDir) and
2039
2045
not isinstance(result, RemoteBranch)):
2040
result = RemoteBranch(a_bzrdir, a_bzrdir.find_repository(), result)
2046
result = RemoteBranch(a_bzrdir, a_bzrdir.find_repository(), result,
2043
def initialize(self, a_bzrdir):
2050
def initialize(self, a_bzrdir, name=None):
2044
2051
# 1) get the network name to use.
2045
2052
if self._custom_format:
2046
2053
network_name = self._custom_format.network_name()
2052
2059
network_name = reference_format.network_name()
2053
2060
# Being asked to create on a non RemoteBzrDir:
2054
2061
if not isinstance(a_bzrdir, RemoteBzrDir):
2055
return self._vfs_initialize(a_bzrdir)
2062
return self._vfs_initialize(a_bzrdir, name=name)
2056
2063
medium = a_bzrdir._client._medium
2057
2064
if medium._is_remote_before((1, 13)):
2058
return self._vfs_initialize(a_bzrdir)
2065
return self._vfs_initialize(a_bzrdir, name=name)
2059
2066
# Creating on a remote bzr dir.
2060
2067
# 2) try direct creation via RPC
2061
2068
path = a_bzrdir._path_for_remote_call(a_bzrdir._client)
2069
if name is not None:
2070
# XXX JRV20100304: Support creating colocated branches
2071
raise errors.NoColocatedBranchSupport(self)
2062
2072
verb = 'BzrDir.create_branch'
2064
2074
response = a_bzrdir._call(verb, path, network_name)
2065
2075
except errors.UnknownSmartMethod:
2066
2076
# Fallback - use vfs methods
2067
2077
medium._remember_remote_is_before((1, 13))
2068
return self._vfs_initialize(a_bzrdir)
2078
return self._vfs_initialize(a_bzrdir, name=name)
2069
2079
if response[0] != 'ok':
2070
2080
raise errors.UnexpectedSmartServerResponse(response)
2071
2081
# Turn the response into a RemoteRepository object.
2079
2089
a_bzrdir._client)
2080
2090
remote_repo = RemoteRepository(repo_bzrdir, repo_format)
2081
2091
remote_branch = RemoteBranch(a_bzrdir, remote_repo,
2082
format=format, setup_stacking=False)
2092
format=format, setup_stacking=False, name=name)
2083
2093
# XXX: We know this is a new branch, so it must have revno 0, revid
2084
2094
# NULL_REVISION. Creating the branch locked would make this be unable
2085
2095
# to be wrong; here its simply very unlikely to be wrong. RBC 20090225
2114
2124
def __init__(self, remote_bzrdir, remote_repository, real_branch=None,
2115
_client=None, format=None, setup_stacking=True):
2125
_client=None, format=None, setup_stacking=True, name=None):
2116
2126
"""Create a RemoteBranch instance.
2118
2128
:param real_branch: An optional local implementation of the branch
2124
2134
:param setup_stacking: If True make an RPC call to determine the
2125
2135
stacked (or not) status of the branch. If False assume the branch
2126
2136
is not stacked.
2137
:param name: Colocated branch name
2128
2139
# We intentionally don't call the parent class's __init__, because it
2129
2140
# will try to assign to self.tags, which is a property in this subclass.
2219
2231
'to use vfs implementation')
2220
2232
self.bzrdir._ensure_real()
2221
2233
self._real_branch = self.bzrdir._real_bzrdir.open_branch(
2222
ignore_fallbacks=self._real_ignore_fallbacks)
2234
ignore_fallbacks=self._real_ignore_fallbacks, name=self._name)
2223
2235
if self.repository._real_repository is None:
2224
2236
# Give the remote repository the matching real repo.
2225
2237
real_repo = self._real_branch.repository