898
899
def _has_same_fallbacks(self, other_repo):
899
900
"""Returns true if the repositories have the same fallbacks."""
900
901
# XXX: copied from Repository; it should be unified into a base class
901
# <https://bugs.edge.launchpad.net/bzr/+bug/401622>
902
# <https://bugs.launchpad.net/bzr/+bug/401622>
902
903
my_fb = self._fallback_repositories
903
904
other_fb = other_repo._fallback_repositories
904
905
if len(my_fb) != len(other_fb):
1974
1980
if response_tuple[0] != 'ok':
1975
1981
raise errors.UnexpectedSmartServerResponse(response_tuple)
1976
1982
byte_stream = response_handler.read_streamed_body()
1977
src_format, stream = smart_repo._byte_stream_to_stream(byte_stream)
1983
src_format, stream = smart_repo._byte_stream_to_stream(byte_stream,
1984
self._record_counter)
1978
1985
if src_format.network_name() != repo._format.network_name():
1979
1986
raise AssertionError(
1980
1987
"Mismatched RemoteRepository and stream src %r, %r" % (
2399
2410
self._real_branch.lock_read()
2401
2412
self._lock_count += 1
2413
return lock.LogicalLockResult(self.unlock)
2403
2415
def _remote_lock_write(self, token):
2404
2416
if token is None:
2405
2417
branch_token = repo_token = ''
2407
2419
branch_token = token
2408
repo_token = self.repository.lock_write()
2420
repo_token = self.repository.lock_write().repository_token
2409
2421
self.repository.unlock()
2410
2422
err_context = {'token': token}
2411
response = self._call(
2412
'Branch.lock_write', self._remote_path(), branch_token,
2413
repo_token or '', **err_context)
2424
response = self._call(
2425
'Branch.lock_write', self._remote_path(), branch_token,
2426
repo_token or '', **err_context)
2427
except errors.LockContention, e:
2428
# The LockContention from the server doesn't have any
2429
# information about the lock_url. We re-raise LockContention
2430
# with valid lock_url.
2431
raise errors.LockContention('(remote lock)',
2432
self.repository.base.split('.bzr/')[0])
2414
2433
if response[0] != 'ok':
2415
2434
raise errors.UnexpectedSmartServerResponse(response)
2416
2435
ok, branch_token, repo_token = response
2448
2467
self._lock_count += 1
2449
2468
# Re-lock the repository too.
2450
2469
self.repository.lock_write(self._repo_lock_token)
2451
return self._lock_token or None
2470
return BranchWriteLockResult(self.unlock, self._lock_token or None)
2453
2472
def _unlock(self, branch_token, repo_token):
2454
2473
err_context = {'token': str((branch_token, repo_token))}
2777
2796
medium = self._branch._client._medium
2778
2797
if medium._is_remote_before((1, 14)):
2779
2798
return self._vfs_set_option(value, name, section)
2799
if isinstance(value, dict):
2800
if medium._is_remote_before((2, 2)):
2801
return self._vfs_set_option(value, name, section)
2802
return self._set_config_option_dict(value, name, section)
2804
return self._set_config_option(value, name, section)
2806
def _set_config_option(self, value, name, section):
2781
2808
path = self._branch._remote_path()
2782
2809
response = self._branch._client.call('Branch.set_config_option',
2783
2810
path, self._branch._lock_token, self._branch._repo_lock_token,
2784
2811
value.encode('utf8'), name, section or '')
2785
2812
except errors.UnknownSmartMethod:
2813
medium = self._branch._client._medium
2786
2814
medium._remember_remote_is_before((1, 14))
2787
2815
return self._vfs_set_option(value, name, section)
2788
2816
if response != ():
2789
2817
raise errors.UnexpectedSmartServerResponse(response)
2819
def _serialize_option_dict(self, option_dict):
2821
for key, value in option_dict.items():
2822
if isinstance(key, unicode):
2823
key = key.encode('utf8')
2824
if isinstance(value, unicode):
2825
value = value.encode('utf8')
2826
utf8_dict[key] = value
2827
return bencode.bencode(utf8_dict)
2829
def _set_config_option_dict(self, value, name, section):
2831
path = self._branch._remote_path()
2832
serialised_dict = self._serialize_option_dict(value)
2833
response = self._branch._client.call(
2834
'Branch.set_config_option_dict',
2835
path, self._branch._lock_token, self._branch._repo_lock_token,
2836
serialised_dict, name, section or '')
2837
except errors.UnknownSmartMethod:
2838
medium = self._branch._client._medium
2839
medium._remember_remote_is_before((2, 2))
2840
return self._vfs_set_option(value, name, section)
2842
raise errors.UnexpectedSmartServerResponse(response)
2791
2844
def _real_object(self):
2792
2845
self._branch._ensure_real()
2793
2846
return self._branch._real_branch