270
271
self._real_bzrdir.destroy_branch(name=name)
271
272
self._next_open_branch_result = None
273
def create_workingtree(self, revision_id=None, from_branch=None):
274
def create_workingtree(self, revision_id=None, from_branch=None,
275
accelerator_tree=None, hardlink=False):
274
276
raise errors.NotLocalUrl(self.transport.base)
276
def find_branch_format(self):
278
def find_branch_format(self, name=None):
277
279
"""Find the branch 'format' for this bzrdir.
279
281
This might be a synthetic object for e.g. RemoteBranch and SVN.
281
b = self.open_branch()
283
b = self.open_branch(name=name)
284
def get_branch_reference(self):
286
def get_branch_reference(self, name=None):
285
287
"""See BzrDir.get_branch_reference()."""
289
# XXX JRV20100304: Support opening colocated branches
290
raise errors.NoColocatedBranchSupport(self)
286
291
response = self._get_branch_reference()
287
292
if response[0] == 'ref':
288
293
return response[1]
319
324
raise errors.UnexpectedSmartServerResponse(response)
322
def _get_tree_branch(self):
327
def _get_tree_branch(self, name=None):
323
328
"""See BzrDir._get_tree_branch()."""
324
return None, self.open_branch()
329
return None, self.open_branch(name=name)
326
331
def open_branch(self, name=None, unsupported=False,
327
332
ignore_fallbacks=False):
896
901
def _has_same_fallbacks(self, other_repo):
897
902
"""Returns true if the repositories have the same fallbacks."""
898
903
# XXX: copied from Repository; it should be unified into a base class
899
# <https://bugs.edge.launchpad.net/bzr/+bug/401622>
904
# <https://bugs.launchpad.net/bzr/+bug/401622>
900
905
my_fb = self._fallback_repositories
901
906
other_fb = other_repo._fallback_repositories
902
907
if len(my_fb) != len(other_fb):
1313
1317
return self._real_repository.make_working_trees()
1315
1319
def refresh_data(self):
1316
"""Re-read any data needed to to synchronise with disk.
1320
"""Re-read any data needed to synchronise with disk.
1318
1322
This method is intended to be called after another repository instance
1319
1323
(such as one used by a smart server) has inserted data into the
1320
repository. It may not be called during a write group, but may be
1321
called at any other time.
1324
repository. On all repositories this will work outside of write groups.
1325
Some repository formats (pack and newer for bzrlib native formats)
1326
support refresh_data inside write groups. If called inside a write
1327
group on a repository that does not support refreshing in a write group
1328
IsInWriteGroupError will be raised.
1323
if self.is_in_write_group():
1324
raise errors.InternalBzrError(
1325
"May not refresh_data while in a write group.")
1326
1330
if self._real_repository is not None:
1327
1331
self._real_repository.refresh_data()
1978
1982
if response_tuple[0] != 'ok':
1979
1983
raise errors.UnexpectedSmartServerResponse(response_tuple)
1980
1984
byte_stream = response_handler.read_streamed_body()
1981
src_format, stream = smart_repo._byte_stream_to_stream(byte_stream)
1985
src_format, stream = smart_repo._byte_stream_to_stream(byte_stream,
1986
self._record_counter)
1982
1987
if src_format.network_name() != repo._format.network_name():
1983
1988
raise AssertionError(
1984
1989
"Mismatched RemoteRepository and stream src %r, %r" % (
2418
2422
repo_token = self.repository.lock_write().repository_token
2419
2423
self.repository.unlock()
2420
2424
err_context = {'token': token}
2421
response = self._call(
2422
'Branch.lock_write', self._remote_path(), branch_token,
2423
repo_token or '', **err_context)
2426
response = self._call(
2427
'Branch.lock_write', self._remote_path(), branch_token,
2428
repo_token or '', **err_context)
2429
except errors.LockContention, e:
2430
# The LockContention from the server doesn't have any
2431
# information about the lock_url. We re-raise LockContention
2432
# with valid lock_url.
2433
raise errors.LockContention('(remote lock)',
2434
self.repository.base.split('.bzr/')[0])
2424
2435
if response[0] != 'ok':
2425
2436
raise errors.UnexpectedSmartServerResponse(response)
2426
2437
ok, branch_token, repo_token = response
2787
2798
medium = self._branch._client._medium
2788
2799
if medium._is_remote_before((1, 14)):
2789
2800
return self._vfs_set_option(value, name, section)
2801
if isinstance(value, dict):
2802
if medium._is_remote_before((2, 2)):
2803
return self._vfs_set_option(value, name, section)
2804
return self._set_config_option_dict(value, name, section)
2806
return self._set_config_option(value, name, section)
2808
def _set_config_option(self, value, name, section):
2791
2810
path = self._branch._remote_path()
2792
2811
response = self._branch._client.call('Branch.set_config_option',
2793
2812
path, self._branch._lock_token, self._branch._repo_lock_token,
2794
2813
value.encode('utf8'), name, section or '')
2795
2814
except errors.UnknownSmartMethod:
2815
medium = self._branch._client._medium
2796
2816
medium._remember_remote_is_before((1, 14))
2797
2817
return self._vfs_set_option(value, name, section)
2798
2818
if response != ():
2799
2819
raise errors.UnexpectedSmartServerResponse(response)
2821
def _serialize_option_dict(self, option_dict):
2823
for key, value in option_dict.items():
2824
if isinstance(key, unicode):
2825
key = key.encode('utf8')
2826
if isinstance(value, unicode):
2827
value = value.encode('utf8')
2828
utf8_dict[key] = value
2829
return bencode.bencode(utf8_dict)
2831
def _set_config_option_dict(self, value, name, section):
2833
path = self._branch._remote_path()
2834
serialised_dict = self._serialize_option_dict(value)
2835
response = self._branch._client.call(
2836
'Branch.set_config_option_dict',
2837
path, self._branch._lock_token, self._branch._repo_lock_token,
2838
serialised_dict, name, section or '')
2839
except errors.UnknownSmartMethod:
2840
medium = self._branch._client._medium
2841
medium._remember_remote_is_before((2, 2))
2842
return self._vfs_set_option(value, name, section)
2844
raise errors.UnexpectedSmartServerResponse(response)
2801
2846
def _real_object(self):
2802
2847
self._branch._ensure_real()
2803
2848
return self._branch._real_branch