46
from breezy.branch import BranchReferenceFormat, BranchWriteLockResult
47
from breezy.decorators import needs_read_lock, needs_write_lock, only_raises
48
from breezy.errors import (
46
from .branch import BranchReferenceFormat, BranchWriteLockResult
47
from .decorators import needs_read_lock, needs_write_lock, only_raises
50
50
SmartProtocolError,
52
from breezy.i18n import gettext
53
from breezy.inventory import Inventory
54
from breezy.lockable_files import LockableFiles
55
from breezy.smart import client, vfs, repository as smart_repo
56
from breezy.smart.client import _SmartClient
57
from breezy.revision import NULL_REVISION
58
from breezy.revisiontree import InventoryRevisionTree
59
from breezy.repository import RepositoryWriteLockResult, _LazyListJoin
60
from breezy.serializer import format_registry as serializer_format_registry
61
from breezy.trace import mutter, note, warning, log_exception_quietly
62
from breezy.versionedfile import FulltextContentFactory
52
from .i18n import gettext
53
from .inventory import Inventory
54
from .lockable_files import LockableFiles
55
from .smart import client, vfs, repository as smart_repo
56
from .smart.client import _SmartClient
57
from .revision import NULL_REVISION
58
from .revisiontree import InventoryRevisionTree
59
from .repository import RepositoryWriteLockResult, _LazyListJoin
60
from .serializer import format_registry as serializer_format_registry
61
from .trace import mutter, note, warning, log_exception_quietly
62
from .versionedfile import FulltextContentFactory
65
65
_DEFAULT_SEARCH_DEPTH = 100
71
71
def _call(self, method, *args, **err_context):
73
73
return self._client.call(method, *args)
74
except errors.ErrorFromSmartServer, err:
74
except errors.ErrorFromSmartServer as err:
75
75
self._translate_error(err, **err_context)
77
77
def _call_expecting_body(self, method, *args, **err_context):
79
79
return self._client.call_expecting_body(method, *args)
80
except errors.ErrorFromSmartServer, err:
80
except errors.ErrorFromSmartServer as err:
81
81
self._translate_error(err, **err_context)
83
83
def _call_with_body_bytes(self, method, args, body_bytes, **err_context):
85
85
return self._client.call_with_body_bytes(method, args, body_bytes)
86
except errors.ErrorFromSmartServer, err:
86
except errors.ErrorFromSmartServer as err:
87
87
self._translate_error(err, **err_context)
89
89
def _call_with_body_bytes_expecting_body(self, method, args, body_bytes,
92
92
return self._client.call_with_body_bytes_expecting_body(
93
93
method, args, body_bytes)
94
except errors.ErrorFromSmartServer, err:
94
except errors.ErrorFromSmartServer as err:
95
95
self._translate_error(err, **err_context)
159
159
path = client.remote_path_from_transport(transport)
161
161
response = client.call('BzrDirFormat.initialize', path)
162
except errors.ErrorFromSmartServer, err:
162
except errors.ErrorFromSmartServer as err:
163
163
_translate_error(err, path=path)
164
164
if response[0] != 'ok':
165
165
raise errors.SmartProtocolError('unexpected response code %s' % (response,))
265
265
stack_on_pwd=stack_on_pwd, repo_format_name=repo_format_name,
266
266
make_working_trees=make_working_trees, shared_repo=shared_repo,
268
except errors.ErrorFromSmartServer, err:
268
except errors.ErrorFromSmartServer as err:
269
269
_translate_error(err, path=path)
270
270
repo_path = response[0]
271
271
bzrdir_name = response[6]
558
558
except errors.UnknownSmartMethod:
559
559
medium._remember_remote_is_before((1, 13))
560
560
return self._vfs_cloning_metadir(require_stacking=require_stacking)
561
except errors.UnknownErrorFromSmartServer, err:
561
except errors.UnknownErrorFromSmartServer as err:
562
562
if err.error_tuple != ('BranchReference',):
564
564
# We need to resolve the branch reference to determine the
1486
1486
result[key] = int(val_text)
1487
1487
elif key in ('firstrev', 'latestrev'):
1488
1488
values = val_text.split(' ')[1:]
1489
result[key] = (float(values[0]), long(values[1]))
1489
result[key] = (float(values[0]), int(values[1]))
2324
2324
body = self._serialise_search_recipe(recipe)
2325
2325
path = self.bzrdir._path_for_remote_call(self._client)
2326
2326
for key in keys:
2327
if type(key) is not str:
2327
if not isinstance(key, str):
2328
2328
raise ValueError(
2329
2329
"key %r not a plain string" % (key,))
2330
2330
verb = 'Repository.get_parent_map'
2381
2381
except errors.UnknownSmartMethod:
2382
2382
self._ensure_real()
2383
2383
return self._real_repository.get_signature_text(revision_id)
2384
except errors.NoSuchRevision, err:
2384
except errors.NoSuchRevision as err:
2385
2385
for fallback in self._fallback_repositories:
2387
2387
return fallback.get_signature_text(revision_id)
2403
2403
@needs_write_lock
2404
2404
def reconcile(self, other=None, thorough=False):
2405
from breezy.reconcile import RepoReconciler
2405
from .reconcile import RepoReconciler
2406
2406
path = self.bzrdir._path_for_remote_call(self._client)
2408
2408
response, handler = self._call_expecting_body(
3000
3000
verb, args, search_bytes)
3001
3001
except errors.UnknownSmartMethod:
3002
3002
medium._remember_remote_is_before(version)
3003
except errors.UnknownErrorFromSmartServer, e:
3003
except errors.UnknownErrorFromSmartServer as e:
3004
3004
if isinstance(search, vf_search.EverythingResult):
3005
3005
error_verb = e.error_from_smart_server.error_verb
3006
3006
if error_verb == 'BadSearch':
3238
3238
self._ensure_real()
3239
3239
if isinstance(self._custom_format, branch.BranchFormatMetadir):
3240
3240
branch_class = self._custom_format._branch_class()
3241
heads_to_fetch_impl = branch_class.heads_to_fetch.im_func
3242
if heads_to_fetch_impl is branch.Branch.heads_to_fetch.im_func:
3241
heads_to_fetch_impl = branch_class.heads_to_fetch.__func__
3242
if heads_to_fetch_impl is branch.Branch.heads_to_fetch.__func__:
3381
3381
fallback_url = self.get_stacked_on_url()
3382
3382
except (errors.NotStacked, errors.UnstackableBranchFormat,
3383
errors.UnstackableRepositoryFormat), e:
3383
errors.UnstackableRepositoryFormat) as e:
3385
3385
self._is_stacked = True
3386
3386
if possible_transports is None:
3505
3505
# self._translate_error, so we can't use self._call either.
3506
3506
response = self._client.call('Branch.get_stacked_on_url',
3507
3507
self._remote_path())
3508
except errors.ErrorFromSmartServer, err:
3508
except errors.ErrorFromSmartServer as err:
3509
3509
# there may not be a repository yet, so we can't call through
3510
3510
# its _translate_error
3511
3511
_translate_error(err, branch=self)
3512
except errors.UnknownSmartMethod, err:
3512
except errors.UnknownSmartMethod as err:
3513
3513
self._ensure_real()
3514
3514
return self._real_branch.get_stacked_on_url()
3515
3515
if response[0] != 'ok':
3599
3599
response = self._call(
3600
3600
'Branch.lock_write', self._remote_path(), branch_token,
3601
3601
repo_token or '', **err_context)
3602
except errors.LockContention, e:
3602
except errors.LockContention as e:
3603
3603
# The LockContention from the server doesn't have any
3604
3604
# information about the lock_url. We re-raise LockContention
3605
3605
# with valid lock_url.
3820
3820
return self._vfs_set_parent_location(url)
3822
3822
call_url = url or ''
3823
if type(call_url) is not str:
3823
if not isinstance(call_url, str):
3824
3824
raise AssertionError('url must be a str or None (%s)' % url)
3825
3825
response = self._call('Branch.set_parent_location',
3826
3826
self._remote_path(), self._lock_token, self._repo_lock_token,
4165
4165
def find(name):
4167
4167
return context[name]
4168
except KeyError, key_err:
4168
except KeyError as key_err:
4169
4169
mutter('Missing key %r in context %r', key_err.args[0], context)
4171
4171
def get_path():
4176
4176
return context['path']
4177
except KeyError, key_err:
4177
except KeyError as key_err:
4179
4179
return err.error_args[0]
4180
except IndexError, idx_err:
4180
except IndexError as idx_err:
4182
4182
'Missing key %r in context %r', key_err.args[0], context)