675
673
return self._real_repository.get_missing_parent_inventories(
676
674
check_for_missing_texts=check_for_missing_texts)
676
def _get_rev_id_for_revno_vfs(self, revno, known_pair):
678
return self._real_repository.get_rev_id_for_revno(
681
def get_rev_id_for_revno(self, revno, known_pair):
682
"""See Repository.get_rev_id_for_revno."""
683
path = self.bzrdir._path_for_remote_call(self._client)
685
if self._client._medium._is_remote_before((1, 17)):
686
return self._get_rev_id_for_revno_vfs(revno, known_pair)
687
response = self._call(
688
'Repository.get_rev_id_for_revno', path, revno, known_pair)
689
except errors.UnknownSmartMethod:
690
self._client._medium._remember_remote_is_before((1, 17))
691
return self._get_rev_id_for_revno_vfs(revno, known_pair)
692
if response[0] == 'ok':
693
return True, response[1]
694
elif response[0] == 'history-incomplete':
695
known_pair = response[1:3]
696
for fallback in self._fallback_repositories:
697
found, result = fallback.get_rev_id_for_revno(revno, known_pair)
702
# Not found in any fallbacks
703
return False, known_pair
705
raise errors.UnexpectedSmartServerResponse(response)
678
707
def _ensure_real(self):
679
708
"""Ensure that there is a _real_repository set.
1895
1924
self._ensure_real()
1896
1925
return self._custom_format.supports_stacking()
1927
def supports_set_append_revisions_only(self):
1929
return self._custom_format.supports_set_append_revisions_only()
1899
1932
class RemoteBranch(branch.Branch, _RpcHelper):
1900
1933
"""Branch stored on a server accessed by HPSS RPC.
1919
1952
# We intentionally don't call the parent class's __init__, because it
1920
1953
# will try to assign to self.tags, which is a property in this subclass.
1921
1954
# And the parent's __init__ doesn't do much anyway.
1922
self._revision_id_to_revno_cache = None
1923
self._partial_revision_id_to_revno_cache = {}
1924
self._revision_history_cache = None
1925
self._last_revision_info_cache = None
1926
self._merge_sorted_revisions_cache = None
1927
1955
self.bzrdir = remote_bzrdir
1928
1956
if _client is not None:
1929
1957
self._client = _client
1981
2011
except (errors.NotStacked, errors.UnstackableBranchFormat,
1982
2012
errors.UnstackableRepositoryFormat), e:
2014
self._is_stacked = True
1984
2015
self._activate_fallback_location(fallback_url)
1986
2017
def _get_config(self):
2088
2119
raise errors.UnexpectedSmartServerResponse(response)
2089
2120
return response[1]
2122
def set_stacked_on_url(self, url):
2123
branch.Branch.set_stacked_on_url(self, url)
2125
self._is_stacked = False
2127
self._is_stacked = True
2091
2129
def _vfs_get_tags_bytes(self):
2092
2130
self._ensure_real()
2093
2131
return self._real_branch._get_tags_bytes()
2220
2258
raise NotImplementedError(self.dont_leave_lock_in_place)
2221
2259
self._leave_lock = False
2261
def get_rev_id(self, revno, history=None):
2263
return _mod_revision.NULL_REVISION
2264
last_revision_info = self.last_revision_info()
2265
ok, result = self.repository.get_rev_id_for_revno(
2266
revno, last_revision_info)
2269
missing_parent = result[1]
2270
# Either the revision named by the server is missing, or its parent
2271
# is. Call get_parent_map to determine which, so that we report a
2273
parent_map = self.repository.get_parent_map([missing_parent])
2274
if missing_parent in parent_map:
2275
missing_parent = parent_map[missing_parent]
2276
raise errors.RevisionNotPresent(missing_parent, self.repository)
2223
2278
def _last_revision_info(self):
2224
2279
response = self._call('Branch.last_revision_info', self._remote_path())
2225
2280
if response[0] != 'ok':
2231
2286
def _gen_revision_history(self):
2232
2287
"""See Branch._gen_revision_history()."""
2288
if self._is_stacked:
2290
return self._real_branch._gen_revision_history()
2233
2291
response_tuple, response_handler = self._call_expecting_body(
2234
2292
'Branch.revision_history', self._remote_path())
2235
2293
if response_tuple[0] != 'ok':