2858
2859
return path[:-len(suffix)]
2862
class WorkingTreeFormatRegistry(registry.FormatRegistry):
2863
"""Registry for working tree formats."""
2865
def __init__(self, other_registry=None):
2866
super(WorkingTreeFormatRegistry, self).__init__(other_registry)
2867
self._extra_formats = []
2868
self._default_format = None
2870
def register(self, format):
2871
"""Register a new repository format."""
2872
super(WorkingTreeFormatRegistry, self).register(
2873
format.get_format_string(), format)
2875
def remove(self, format):
2876
"""Remove a registered repository format."""
2877
super(WorkingTreeFormatRegistry, self).remove(format.get_format_string())
2879
def register_extra(self, format):
2880
"""Register a repository format that can not be used in a metadir.
2882
This is mainly useful to allow custom repository formats, such as older
2883
Bazaar formats and foreign formats, to be tested.
2885
self._extra_formats.append(registry._ObjectGetter(format))
2887
def remove_extra(self, format):
2888
"""Remove an extra repository format.
2890
self._extra_formats.remove(registry._ObjectGetter(format))
2892
def register_extra_lazy(self, module_name, member_name):
2893
"""Register a repository format lazily.
2895
self._extra_formats.append(
2896
registry._LazyObjectGetter(module_name, member_name))
2898
def get_default(self):
2899
"""Return the current default format."""
2900
return self._default_format
2902
def set_default(self, format):
2903
self._default_format = format
2905
def _get_extra(self):
2907
for getter in self._extra_formats:
2908
f = getter.get_obj()
2915
"""Return all repository formats, even those not usable in metadirs.
2917
return [self.get(k) for k in self.keys()] + self._get_extra()
2920
format_registry = WorkingTreeFormatRegistry()
2861
2923
class WorkingTreeFormat(object):
2862
2924
"""An encapsulation of the initialization and open routines for a format.
2903
2956
transport = a_bzrdir.get_workingtree_transport(None)
2904
2957
format_string = transport.get_bytes("format")
2905
return klass._formats[format_string]
2958
return format_registry.get(format_string)
2906
2959
except errors.NoSuchFile:
2907
2960
raise errors.NoWorkingTree(base=transport.base)
2908
2961
except KeyError:
2916
2969
return not (self == other)
2972
@symbol_versioning.deprecated_method(
2973
symbol_versioning.deprecated_in((2, 4, 0)))
2919
2974
def get_default_format(klass):
2920
2975
"""Return the current default format."""
2921
return klass._default_format
2976
return format_registry.get_default()
2923
2978
def get_format_string(self):
2924
2979
"""Return the ASCII format string that identifies this format."""
3004
@symbol_versioning.deprecated_method(
3005
symbol_versioning.deprecated_in((2, 4, 0)))
2949
3006
def register_format(klass, format):
2950
klass._formats[format.get_format_string()] = format
3007
format_registry.register(format)
3010
@symbol_versioning.deprecated_method(
3011
symbol_versioning.deprecated_in((2, 4, 0)))
2953
3012
def register_extra_format(klass, format):
2954
klass._extra_formats.append(format)
3013
format_registry.register_extra(format)
3016
@symbol_versioning.deprecated_method(
3017
symbol_versioning.deprecated_in((2, 4, 0)))
2957
3018
def unregister_extra_format(klass, format):
2958
klass._extra_formats.remove(format)
3019
format_registry.unregister_extra(format)
3022
@symbol_versioning.deprecated_method(
3023
symbol_versioning.deprecated_in((2, 4, 0)))
2961
3024
def get_formats(klass):
2962
return klass._formats.values() + klass._extra_formats
3025
return format_registry._get_all()
3028
@symbol_versioning.deprecated_method(
3029
symbol_versioning.deprecated_in((2, 4, 0)))
2965
3030
def set_default_format(klass, format):
2966
klass._default_format = format
3031
format_registry.set_default(format)
3034
@symbol_versioning.deprecated_method(
3035
symbol_versioning.deprecated_in((2, 4, 0)))
2969
3036
def unregister_format(klass, format):
2970
del klass._formats[format.get_format_string()]
3037
format_registry.remove(format)
2973
3040
class WorkingTreeFormat2(WorkingTreeFormat):
3196
3263
__default_format = WorkingTreeFormat6()
3197
WorkingTreeFormat.register_format(__default_format)
3198
WorkingTreeFormat.register_format(WorkingTreeFormat5())
3199
WorkingTreeFormat.register_format(WorkingTreeFormat4())
3200
WorkingTreeFormat.register_format(WorkingTreeFormat3())
3201
WorkingTreeFormat.set_default_format(__default_format)
3264
format_registry.register_lazy("Bazaar Working Tree Format 4 (bzr 0.15)\n",
3265
"bzrlib.workingtree_4", "WorkingTreeFormat4")
3266
format_registry.register_lazy("Bazaar Working Tree Format 5 (bzr 1.11)\n",
3267
"bzrlib.workingtree_4", "WorkingTreeFormat5")
3268
format_registry.register_lazy("Bazaar Working Tree Format 6 (bzr 1.14)\n",
3269
"bzrlib.workingtree_4", "WorkingTreeFormat6")
3270
format_registry.register(WorkingTreeFormat3())
3271
format_registry.set_default(__default_format)
3202
3272
# Register extra formats which have no format string are not discoverable
3203
3273
# and not independently creatable. They are implicitly created as part of
3204
3274
# e.g. older Bazaar formats or foreign formats.
3205
WorkingTreeFormat.register_extra_format(WorkingTreeFormat2())
3275
format_registry.register_extra(WorkingTreeFormat2())