643
641
return self._custom_format._serializer
646
class RemoteRepository(_RpcHelper, lock._RelockDebugMixin,
647
bzrdir.ControlComponent):
644
class RemoteRepository(_RpcHelper, lock._RelockDebugMixin):
648
645
"""Repository accessed over rpc.
650
647
For the moment most operations are performed using local transport-backed
693
690
# Additional places to query for data.
694
691
self._fallback_repositories = []
697
def user_transport(self):
698
return self.bzrdir.user_transport
701
def control_transport(self):
702
# XXX: Normally you shouldn't directly get at the remote repository
703
# transport, but I'm not sure it's worth making this method
704
# optional -- mbp 2010-04-21
705
return self.bzrdir.get_repository_transport(None)
707
693
def __str__(self):
708
694
return "%s(%s)" % (self.__class__.__name__, self.base)
917
903
parents_provider = self._make_parents_provider(other_repository)
918
904
return graph.Graph(parents_provider)
921
def get_known_graph_ancestry(self, revision_ids):
922
"""Return the known graph for a set of revision ids and their ancestors.
924
st = static_tuple.StaticTuple
925
revision_keys = [st(r_id).intern() for r_id in revision_ids]
926
known_graph = self.revisions.get_known_graph_ancestry(revision_keys)
927
return graph.GraphThunkIdsToKeys(known_graph)
929
906
def gather_stats(self, revid=None, committers=None):
930
907
"""See Repository.gather_stats()."""
931
908
path = self.bzrdir._path_for_remote_call(self._client)
1240
1217
# state, so always add a lock here. If a caller passes us a locked
1241
1218
# repository, they are responsible for unlocking it later.
1242
1219
repository.lock_read()
1243
self._check_fallback_repository(repository)
1244
1220
self._fallback_repositories.append(repository)
1245
1221
# If self._real_repository was parameterised already (e.g. because a
1246
1222
# _real_branch had its get_stacked_on_url method called), then the
1247
1223
# repository to be added may already be in the _real_repositories list.
1248
1224
if self._real_repository is not None:
1249
fallback_locations = [repo.user_url for repo in
1225
fallback_locations = [repo.bzrdir.root_transport.base for repo in
1250
1226
self._real_repository._fallback_repositories]
1251
if repository.user_url not in fallback_locations:
1227
if repository.bzrdir.root_transport.base not in fallback_locations:
1252
1228
self._real_repository.add_fallback_repository(repository)
1254
def _check_fallback_repository(self, repository):
1255
"""Check that this repository can fallback to repository safely.
1257
Raise an error if not.
1259
:param repository: A repository to fallback to.
1261
return _mod_repository.InterRepository._assert_same_model(
1264
1230
def add_inventory(self, revid, inv, parents):
1265
1231
self._ensure_real()
1266
1232
return self._real_repository.add_inventory(revid, inv, parents)
1268
1234
def add_inventory_by_delta(self, basis_revision_id, delta, new_revision_id,
1269
parents, basis_inv=None, propagate_caches=False):
1270
1236
self._ensure_real()
1271
1237
return self._real_repository.add_inventory_by_delta(basis_revision_id,
1272
delta, new_revision_id, parents, basis_inv=basis_inv,
1273
propagate_caches=propagate_caches)
1238
delta, new_revision_id, parents)
1275
1240
def add_revision(self, rev_id, rev, inv=None, config=None):
1276
1241
self._ensure_real()
1619
1584
return self._real_repository.inventories
1621
1586
@needs_write_lock
1622
def pack(self, hint=None, clean_obsolete_packs=False):
1587
def pack(self, hint=None):
1623
1588
"""Compress the data within the repository.
1625
1590
This is not currently implemented within the smart server.
1627
1592
self._ensure_real()
1628
return self._real_repository.pack(hint=hint, clean_obsolete_packs=clean_obsolete_packs)
1593
return self._real_repository.pack(hint=hint)
1631
1596
def revisions(self):
2193
2158
self._real_branch = None
2194
2159
# Fill out expected attributes of branch for bzrlib API users.
2195
2160
self._clear_cached_state()
2196
# TODO: deprecate self.base in favor of user_url
2197
self.base = self.bzrdir.user_url
2161
self.base = self.bzrdir.root_transport.base
2198
2162
self._name = name
2199
2163
self._control_files = None
2200
2164
self._lock_mode = None