/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/remote.py

  • Committer: Jelmer Vernooij
  • Date: 2010-04-30 11:35:43 UTC
  • mfrom: (5195 +trunk)
  • mto: This revision was merged to the branch mainline in revision 5197.
  • Revision ID: jelmer@samba.org-20100430113543-tiqqhmqa3d8no4iu
merge bzr.dev

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
    lock,
28
28
    lockdir,
29
29
    repository,
 
30
    repository as _mod_repository,
30
31
    revision,
31
32
    revision as _mod_revision,
 
33
    static_tuple,
32
34
    symbol_versioning,
33
35
)
34
36
from bzrlib.branch import BranchReferenceFormat
641
643
        return self._custom_format._serializer
642
644
 
643
645
 
644
 
class RemoteRepository(_RpcHelper, lock._RelockDebugMixin):
 
646
class RemoteRepository(_RpcHelper, lock._RelockDebugMixin,
 
647
    bzrdir.ControlComponent):
645
648
    """Repository accessed over rpc.
646
649
 
647
650
    For the moment most operations are performed using local transport-backed
690
693
        # Additional places to query for data.
691
694
        self._fallback_repositories = []
692
695
 
 
696
    @property
 
697
    def user_transport(self):
 
698
        return self.bzrdir.user_transport
 
699
 
 
700
    @property
 
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)
 
706
        
693
707
    def __str__(self):
694
708
        return "%s(%s)" % (self.__class__.__name__, self.base)
695
709
 
903
917
        parents_provider = self._make_parents_provider(other_repository)
904
918
        return graph.Graph(parents_provider)
905
919
 
 
920
    @needs_read_lock
 
921
    def get_known_graph_ancestry(self, revision_ids):
 
922
        """Return the known graph for a set of revision ids and their ancestors.
 
923
        """
 
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)
 
928
 
906
929
    def gather_stats(self, revid=None, committers=None):
907
930
        """See Repository.gather_stats()."""
908
931
        path = self.bzrdir._path_for_remote_call(self._client)
1217
1240
            # state, so always add a lock here. If a caller passes us a locked
1218
1241
            # repository, they are responsible for unlocking it later.
1219
1242
            repository.lock_read()
 
1243
        self._check_fallback_repository(repository)
1220
1244
        self._fallback_repositories.append(repository)
1221
1245
        # If self._real_repository was parameterised already (e.g. because a
1222
1246
        # _real_branch had its get_stacked_on_url method called), then the
1223
1247
        # repository to be added may already be in the _real_repositories list.
1224
1248
        if self._real_repository is not None:
1225
 
            fallback_locations = [repo.bzrdir.root_transport.base for repo in
 
1249
            fallback_locations = [repo.user_url for repo in
1226
1250
                self._real_repository._fallback_repositories]
1227
 
            if repository.bzrdir.root_transport.base not in fallback_locations:
 
1251
            if repository.user_url not in fallback_locations:
1228
1252
                self._real_repository.add_fallback_repository(repository)
1229
1253
 
 
1254
    def _check_fallback_repository(self, repository):
 
1255
        """Check that this repository can fallback to repository safely.
 
1256
 
 
1257
        Raise an error if not.
 
1258
 
 
1259
        :param repository: A repository to fallback to.
 
1260
        """
 
1261
        return _mod_repository.InterRepository._assert_same_model(
 
1262
            self, repository)
 
1263
 
1230
1264
    def add_inventory(self, revid, inv, parents):
1231
1265
        self._ensure_real()
1232
1266
        return self._real_repository.add_inventory(revid, inv, parents)
1585
1619
        return self._real_repository.inventories
1586
1620
 
1587
1621
    @needs_write_lock
1588
 
    def pack(self, hint=None):
 
1622
    def pack(self, hint=None, clean_obsolete_packs=False):
1589
1623
        """Compress the data within the repository.
1590
1624
 
1591
1625
        This is not currently implemented within the smart server.
1592
1626
        """
1593
1627
        self._ensure_real()
1594
 
        return self._real_repository.pack(hint=hint)
 
1628
        return self._real_repository.pack(hint=hint, clean_obsolete_packs=clean_obsolete_packs)
1595
1629
 
1596
1630
    @property
1597
1631
    def revisions(self):
2159
2193
            self._real_branch = None
2160
2194
        # Fill out expected attributes of branch for bzrlib API users.
2161
2195
        self._clear_cached_state()
2162
 
        self.base = self.bzrdir.root_transport.base
 
2196
        # TODO: deprecate self.base in favor of user_url
 
2197
        self.base = self.bzrdir.user_url
2163
2198
        self._name = name
2164
2199
        self._control_files = None
2165
2200
        self._lock_mode = None