~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repository.py

Allow for optimised InterRepository selection.

Show diffs side-by-side

added added

removed removed

Lines of Context:
890
890
    InterRepository.get(other).method_name(parameters).
891
891
    """
892
892
 
 
893
    _optimisers = set()
 
894
    """The available optimised InterRepository types."""
 
895
 
893
896
    def __init__(self, source, target):
894
897
        """Construct a default InterRepository instance. Please use 'get'.
895
898
        
911
914
        If an optimised InterRepository worker exists it will be used otherwise
912
915
        a default InterRepository instance will be created.
913
916
        """
 
917
        for provider in klass._optimisers:
 
918
            if provider.is_compatible(repository_source, repository_target):
 
919
                return provider(repository_source, repository_target)
914
920
        return InterRepository(repository_source, repository_target)
915
921
 
 
922
    @classmethod
 
923
    def register_optimiser(klass, optimiser):
 
924
        """Register an InterRepository optimiser."""
 
925
        klass._optimisers.add(optimiser)
 
926
 
 
927
    @classmethod
 
928
    def unregister_optimiser(klass, optimiser):
 
929
        """Unregister an InterRepository optimiser."""
 
930
        klass._optimisers.remove(optimiser)
 
931
 
916
932
 
917
933
class RepositoryTestProviderAdapter(object):
918
934
    """A tool to generate a suite testing multiple repository formats at once.