~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/controldir.py

  • Committer: Jelmer Vernooij
  • Date: 2012-01-06 22:44:57 UTC
  • mfrom: (6436 +trunk)
  • mto: (6437.3.11 2.5)
  • mto: This revision was merged to the branch mainline in revision 6444.
  • Revision ID: jelmer@samba.org-20120106224457-re0pcy0fz31xob77
Merge bzr.dev.

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
 
23
23
"""
24
24
 
 
25
from __future__ import absolute_import
 
26
 
25
27
from bzrlib.lazy_import import lazy_import
26
28
lazy_import(globals(), """
27
29
import textwrap
260
262
        """
261
263
        raise NotImplementedError(self.find_repository)
262
264
 
263
 
    def open_workingtree(self, _unsupported=False,
 
265
    def open_workingtree(self, unsupported=False,
264
266
                         recommend_upgrade=True, from_branch=None):
265
267
        """Open the workingtree object at this ControlDir if one is present.
266
268
 
328
330
        raise NotImplementedError(self.cloning_metadir)
329
331
 
330
332
    def checkout_metadir(self):
331
 
        """Produce a metadir suitable for checkouts of this controldir."""
 
333
        """Produce a metadir suitable for checkouts of this controldir.
 
334
 
 
335
        :returns: A ControlDirFormat with all component formats
 
336
            either set appropriately or set to None if that component
 
337
            should not be created.
 
338
        """
332
339
        return self.cloning_metadir()
333
340
 
334
341
    def sprout(self, url, revision_id=None, force_new_repo=False,
657
664
        return klass.open(base, _unsupported=True)
658
665
 
659
666
    @classmethod
660
 
    def open(klass, base, _unsupported=False, possible_transports=None):
 
667
    def open(klass, base, possible_transports=None, probers=None,
 
668
             _unsupported=False):
661
669
        """Open an existing controldir, rooted at 'base' (url).
662
670
 
663
671
        :param _unsupported: a private parameter to the ControlDir class.
664
672
        """
665
673
        t = _mod_transport.get_transport(base, possible_transports)
666
 
        return klass.open_from_transport(t, _unsupported=_unsupported)
 
674
        return klass.open_from_transport(t, probers=probers,
 
675
                _unsupported=_unsupported)
667
676
 
668
677
    @classmethod
669
678
    def open_from_transport(klass, transport, _unsupported=False,
670
 
                            _server_formats=True):
 
679
                            probers=None):
671
680
        """Open a controldir within a particular directory.
672
681
 
673
682
        :param transport: Transport containing the controldir.
679
688
        # the redirections.
680
689
        base = transport.base
681
690
        def find_format(transport):
682
 
            return transport, ControlDirFormat.find_format(
683
 
                transport, _server_formats=_server_formats)
 
691
            return transport, ControlDirFormat.find_format(transport,
 
692
                probers=probers)
684
693
 
685
694
        def redirected(transport, e, redirection_notice):
686
695
            redirected_transport = transport._redirected_to(e.source, e.target)
733
742
                return result, urlutils.unescape(a_transport.relpath(url))
734
743
            except errors.NotBranchError, e:
735
744
                pass
 
745
            except errors.PermissionDenied:
 
746
                pass
736
747
            try:
737
748
                new_t = a_transport.clone('..')
738
749
            except errors.InvalidURLJoin:
833
844
 
834
845
 
835
846
class ControlComponentFormat(object):
836
 
    """A component that can live inside of a .bzr meta directory."""
 
847
    """A component that can live inside of a control directory."""
837
848
 
838
849
    upgrade_recommended = False
839
850
 
1101
1112
        return self.get_format_description().rstrip()
1102
1113
 
1103
1114
    @classmethod
 
1115
    def all_probers(klass):
 
1116
        return klass._server_probers + klass._probers
 
1117
 
 
1118
    @classmethod
1104
1119
    def known_formats(klass):
1105
1120
        """Return all the known formats.
1106
1121
        """
1107
1122
        result = set()
1108
 
        for prober_kls in klass._probers + klass._server_probers:
 
1123
        for prober_kls in klass.all_probers():
1109
1124
            result.update(prober_kls.known_formats())
1110
1125
        return result
1111
1126
 
1112
1127
    @classmethod
1113
 
    def find_format(klass, transport, _server_formats=True):
 
1128
    def find_format(klass, transport, probers=None):
1114
1129
        """Return the format present at transport."""
1115
 
        if _server_formats:
1116
 
            _probers = klass._server_probers + klass._probers
1117
 
        else:
1118
 
            _probers = klass._probers
1119
 
        for prober_kls in _probers:
 
1130
        if probers is None:
 
1131
            probers = klass.all_probers()
 
1132
        for prober_kls in probers:
1120
1133
            prober = prober_kls()
1121
1134
            try:
1122
1135
                return prober.probe_transport(transport)