~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/controldir.py

  • Committer: Jelmer Vernooij
  • Date: 2011-02-24 12:08:37 UTC
  • mto: (5676.1.5 per_interrepo-extra)
  • mto: This revision was merged to the branch mainline in revision 5686.
  • Revision ID: jelmer@samba.org-20110224120837-73x5dp7h8w6fusfz
Refactor, move to bzrlib.controldir.

Show diffs side-by-side

added added

removed removed

Lines of Context:
622
622
        raise NotImplementedError(self.clone_on_transport)
623
623
 
624
624
 
 
625
class MetaComponentFormat(object):
 
626
    """A component that can live inside of a .bzr meta directory."""
 
627
 
 
628
    def get_format_string(self):
 
629
        """The format string to be used."""
 
630
        raise NotImplementedError(self.get_format_string)
 
631
 
 
632
 
 
633
class ControlDirComponentFormatRegistry(registry.FormatRegistry):
 
634
    """A registry for BzrDirMeta components."""
 
635
 
 
636
    def __init__(self, other_registry=None):
 
637
        super(ControlDirComponentFormatRegistry, self).__init__(other_registry)
 
638
        self._extra_formats = []
 
639
 
 
640
    def register(self, format):
 
641
        """Register a new format."""
 
642
        super(ControlDirComponentFormatRegistry, self).register(
 
643
            format.get_format_string(), format)
 
644
 
 
645
    def remove(self, format):
 
646
        """Remove a registered format."""
 
647
        super(ControlDirComponentFormatRegistry, self).remove(
 
648
            format.get_format_string())
 
649
 
 
650
    def register_extra(self, format):
 
651
        """Register a format that can not be used in a metadir.
 
652
 
 
653
        This is mainly useful to allow custom repository formats, such as older
 
654
        Bazaar formats and foreign formats, to be tested.
 
655
        """
 
656
        self._extra_formats.append(registry._ObjectGetter(format))
 
657
 
 
658
    def remove_extra(self, format):
 
659
        """Remove an extra format.
 
660
        """
 
661
        self._extra_formats.remove(registry._ObjectGetter(format))
 
662
 
 
663
    def register_extra_lazy(self, module_name, member_name):
 
664
        """Register a format lazily.
 
665
        """
 
666
        self._extra_formats.append(
 
667
            registry._LazyObjectGetter(module_name, member_name))
 
668
 
 
669
    def _get_extra(self):
 
670
        """Return all "extra" formats, not usable in meta directories."""
 
671
        result = []
 
672
        for getter in self._extra_formats:
 
673
            f = getter.get_obj()
 
674
            if callable(f):
 
675
                f = f()
 
676
            result.append(f)
 
677
        return result
 
678
 
 
679
    def _get_all(self):
 
680
        """Return all formats, even those not usable in metadirs.
 
681
        """
 
682
        result = []
 
683
        for name in self.keys():
 
684
            fmt = self.get(name)
 
685
            if callable(fmt):
 
686
                fmt = fmt()
 
687
            result.append(fmt)
 
688
        return result + self._get_extra()
 
689
 
 
690
 
625
691
class ControlDirFormat(object):
626
692
    """An encapsulation of the initialization and open routines for a format.
627
693
 
879
945
    """Registry of user-selectable ControlDir subformats.
880
946
 
881
947
    Differs from ControlDirFormat._formats in that it provides sub-formats,
882
 
    e.g. ControlDirMeta1 with weave repository.  Also, it's more user-oriented.
 
948
    e.g. BzrDirMeta1 with weave repository.  Also, it's more user-oriented.
883
949
    """
884
950
 
885
951
    def __init__(self):