~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/repository.py

  • Committer: Martin Pool
  • Date: 2007-02-07 12:41:45 UTC
  • mto: This revision was merged to the branch mainline in revision 2283.
  • Revision ID: mbp@sourcefrog.net-20070207124145-qufbufe41sm6fqrf
Get rid of RepositoryFormat*_instance objects.  Instead the format
registry can hold either format objects or factories that create them, and
its get() method calls that if needed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
858
858
class RepositoryFormatRegistry(registry.Registry):
859
859
    """Registry of RepositoryFormats.
860
860
    """
 
861
 
 
862
    def get(self, format_string):
 
863
        r = registry.Registry.get(self, format_string)
 
864
        if callable(r):
 
865
            r = r()
 
866
        return r
861
867
    
862
868
 
863
869
format_registry = RepositoryFormatRegistry()
864
 
"""Registry of formats, indexed by their identifying format string."""
 
870
"""Registry of formats, indexed by their identifying format string.
 
871
 
 
872
This can contain either format instances themselves, or classes/factories that
 
873
can be called to obtain one.
 
874
"""
865
875
 
866
876
 
867
877
class RepositoryFormat(object):
891
901
    def __str__(self):
892
902
        return "<%s>" % self.__class__.__name__
893
903
 
 
904
    def __eq__(self, other):
 
905
        # format objects are generally stateless
 
906
        return isinstance(other, self.__class__)
 
907
 
894
908
    @classmethod
895
909
    def find_format(klass, a_bzrdir):
896
910
        """Return the format for the repository object in a_bzrdir.
1033
1047
    """Common base class for the new repositories using the metadir layout."""
1034
1048
 
1035
1049
    rich_root_data = False
 
1050
    _matchingbzrdir = bzrdir.BzrDirMetaFormat1()
1036
1051
 
1037
1052
    def __init__(self):
1038
1053
        super(MetaDirRepositoryFormat, self).__init__()
1039
 
        self._matchingbzrdir = bzrdir.BzrDirMetaFormat1()
1040
1054
 
1041
1055
    def _create_control_files(self, a_bzrdir):
1042
1056
        """Create the required files and the initial control_files object."""
1067
1081
 
1068
1082
# formats which have no format string are not discoverable
1069
1083
# and not independently creatable, so are not registered.  They're 
1070
 
# all in bzrlib.repofmt.weaverepo now.
 
1084
# all in bzrlib.repofmt.weaverepo now.  When an instance of one of these is
 
1085
# needed, it's constructed directly by the BzrDir.  Non-native formats where
 
1086
# the repository is not separately opened are similar.
 
1087
 
1071
1088
format_registry.register_lazy(
1072
1089
    'Bazaar-NG Repository format 7',
1073
1090
    'bzrlib.repofmt.weaverepo',
1074
 
    'RepositoryFormat7_instance'
 
1091
    'RepositoryFormat7'
1075
1092
    )
1076
1093
# KEEP in sync with bzrdir.format_registry default, which controls the overall
1077
1094
# default control directory format
1079
1096
format_registry.register_lazy(
1080
1097
    'Bazaar-NG Knit Repository Format 1',
1081
1098
    'bzrlib.repofmt.knitrepo',
1082
 
    'RepositoryFormatKnit1_instance',
 
1099
    'RepositoryFormatKnit1',
1083
1100
    )
1084
1101
format_registry.default_key = 'Bazaar-NG Knit Repository Format 1'
1085
1102
 
1086
1103
format_registry.register_lazy(
1087
1104
    'Bazaar Knit Repository Format 2\n',
1088
1105
    'bzrlib.repofmt.knitrepo',
1089
 
    'RepositoryFormatKnit2_instance',
 
1106
    'RepositoryFormatKnit2',
1090
1107
    )
1091
1108
 
1092
1109