~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

  • Committer: Robert Collins
  • Date: 2006-05-30 12:47:26 UTC
  • mto: (1769.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 1770.
  • Revision ID: robertc@robertcollins.net-20060530124726-1452571a34787c78
Support non '.bzr' control directories in bzrdir.

Show diffs side-by-side

added added

removed removed

Lines of Context:
931
931
    _formats = {}
932
932
    """The known formats."""
933
933
 
 
934
    _control_formats = set()
 
935
    """The core control formats - .bzr, ...."""
 
936
 
934
937
    _lock_file_name = 'branch-lock'
935
938
 
936
939
    # _lock_class must be set in subclasses to the lock type, typ.
938
941
 
939
942
    @classmethod
940
943
    def find_format(klass, transport):
941
 
        """Return the format registered for URL."""
 
944
        """Return the format present at transport."""
 
945
        for format in klass._control_formats:
 
946
            try:
 
947
                return format.probe_transport(transport)
 
948
            except errors.NotBranchError:
 
949
                # this format does not find a control dir here.
 
950
                pass
 
951
        raise errors.NotBranchError(path=transport.base)
 
952
 
 
953
    @classmethod
 
954
    def probe_transport(klass, transport):
 
955
        """Return the .bzrdir style transport present at URL."""
942
956
        try:
943
957
            format_string = transport.get(".bzr/branch-format").read()
944
958
            return klass._formats[format_string]
1044
1058
        klass._formats[format.get_format_string()] = format
1045
1059
 
1046
1060
    @classmethod
 
1061
    def register_control_format(klass, format):
 
1062
        """Register a format that does not use '.bzrdir' for its control dir.
 
1063
 
 
1064
        TODO: This should be pulled up into a 'ControlDirFormat' base class
 
1065
        which BzrDirFormat can inherit from, and renamed to register_format 
 
1066
        there. It has been done without that for now for simplicity of
 
1067
        implementation.
 
1068
        """
 
1069
        klass._control_formats.add(format)
 
1070
 
 
1071
    @classmethod
1047
1072
    def set_default_format(klass, format):
1048
1073
        klass._default_format = format
1049
1074
 
1055
1080
        assert klass._formats[format.get_format_string()] is format
1056
1081
        del klass._formats[format.get_format_string()]
1057
1082
 
 
1083
    @classmethod
 
1084
    def unregister_control_format(klass, format):
 
1085
        klass._control_formats.remove(format)
 
1086
 
 
1087
 
 
1088
# register BzrDirFormat as a control format
 
1089
BzrDirFormat.register_control_format(BzrDirFormat)
 
1090
 
1058
1091
 
1059
1092
class BzrDirFormat4(BzrDirFormat):
1060
1093
    """Bzr dir format 4.