~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/workingtree.py

(jelmer) Factor out common code from BranchFormatRegistry,
 RepositoryFormatRegistry and WorkingTreeFormatRegistry into
 ControlComponentFormatRegistry. (Jelmer Vernooij)

Show diffs side-by-side

added added

removed removed

Lines of Context:
2859
2859
            return path[:-len(suffix)]
2860
2860
 
2861
2861
 
2862
 
class WorkingTreeFormatRegistry(registry.FormatRegistry):
 
2862
class WorkingTreeFormatRegistry(controldir.ControlComponentFormatRegistry):
2863
2863
    """Registry for working tree formats."""
2864
2864
 
2865
2865
    def __init__(self, other_registry=None):
2866
2866
        super(WorkingTreeFormatRegistry, self).__init__(other_registry)
2867
 
        self._extra_formats = []
2868
2867
        self._default_format = None
2869
2868
 
2870
 
    def register(self, format):
2871
 
        """Register a new repository format."""
2872
 
        super(WorkingTreeFormatRegistry, self).register(
2873
 
            format.get_format_string(), format)
2874
 
 
2875
 
    def remove(self, format):
2876
 
        """Remove a registered repository format."""
2877
 
        super(WorkingTreeFormatRegistry, self).remove(format.get_format_string())
2878
 
 
2879
 
    def register_extra(self, format):
2880
 
        """Register a repository format that can not be used in a metadir.
2881
 
 
2882
 
        This is mainly useful to allow custom repository formats, such as older
2883
 
        Bazaar formats and foreign formats, to be tested.
2884
 
        """
2885
 
        self._extra_formats.append(registry._ObjectGetter(format))
2886
 
 
2887
 
    def remove_extra(self, format):
2888
 
        """Remove an extra repository format.
2889
 
        """
2890
 
        self._extra_formats.remove(registry._ObjectGetter(format))
2891
 
 
2892
 
    def register_extra_lazy(self, module_name, member_name):
2893
 
        """Register a repository format lazily.
2894
 
        """
2895
 
        self._extra_formats.append(
2896
 
            registry._LazyObjectGetter(module_name, member_name))
2897
 
 
2898
2869
    def get_default(self):
2899
2870
        """Return the current default format."""
2900
2871
        return self._default_format
2902
2873
    def set_default(self, format):
2903
2874
        self._default_format = format
2904
2875
 
2905
 
    def _get_extra(self):
2906
 
        result = []
2907
 
        for getter in self._extra_formats:
2908
 
            f = getter.get_obj()
2909
 
            if callable(f):
2910
 
                f = f()
2911
 
            result.append(f)
2912
 
        return result
2913
 
 
2914
 
    def _get_all(self):
2915
 
        """Return all repository formats, even those not usable in metadirs.
2916
 
        """
2917
 
        return [self.get(k) for k in self.keys()] + self._get_extra()
2918
 
 
2919
2876
 
2920
2877
format_registry = WorkingTreeFormatRegistry()
2921
2878
 
2922
2879
 
2923
 
class WorkingTreeFormat(object):
 
2880
class WorkingTreeFormat(controldir.ControlComponentFormat):
2924
2881
    """An encapsulation of the initialization and open routines for a format.
2925
2882
 
2926
2883
    Formats provide three things: