~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/branch.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2009-03-24 06:40:26 UTC
  • mfrom: (4160.2.16 bzrdir-open-gaol)
  • Revision ID: pqm@pqm.ubuntu.com-20090324064026-a5a7mmoiaev5mpc9
(andrew) Strengthen the smart server's jail,
        and add ignore_fallbacks parameter to BzrDir.open_branch.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1318
1318
        """
1319
1319
        raise NotImplementedError(self.network_name)
1320
1320
 
1321
 
    def open(self, a_bzrdir, _found=False):
 
1321
    def open(self, a_bzrdir, _found=False, ignore_fallbacks=False):
1322
1322
        """Return the branch object for a_bzrdir
1323
1323
 
1324
 
        _found is a private parameter, do not use it. It is used to indicate
1325
 
               if format probing has already be done.
 
1324
        :param a_bzrdir: A BzrDir that contains a branch.
 
1325
        :param _found: a private parameter, do not use it. It is used to
 
1326
            indicate if format probing has already be done.
 
1327
        :param ignore_fallbacks: when set, no fallback branches will be opened
 
1328
            (if there are any).  Default is to open fallbacks.
1326
1329
        """
1327
1330
        raise NotImplementedError(self.open)
1328
1331
 
1500
1503
        """The network name for this format is the control dirs disk label."""
1501
1504
        return self._matchingbzrdir.get_format_string()
1502
1505
 
1503
 
    def open(self, a_bzrdir, _found=False):
1504
 
        """Return the branch object for a_bzrdir
1505
 
 
1506
 
        _found is a private parameter, do not use it. It is used to indicate
1507
 
               if format probing has already be done.
1508
 
        """
 
1506
    def open(self, a_bzrdir, _found=False, ignore_fallbacks=False):
 
1507
        """See BranchFormat.open()."""
1509
1508
        if not _found:
1510
1509
            # we are being called directly and must probe.
1511
1510
            raise NotImplementedError
1532
1531
        """
1533
1532
        return self.get_format_string()
1534
1533
 
1535
 
    def open(self, a_bzrdir, _found=False):
1536
 
        """Return the branch object for a_bzrdir.
1537
 
 
1538
 
        _found is a private parameter, do not use it. It is used to indicate
1539
 
               if format probing has already be done.
1540
 
        """
 
1534
    def open(self, a_bzrdir, _found=False, ignore_fallbacks=False):
 
1535
        """See BranchFormat.open()."""
1541
1536
        if not _found:
1542
1537
            format = BranchFormat.find_format(a_bzrdir)
1543
1538
            if format.__class__ != self.__class__:
1550
1545
            return self._branch_class()(_format=self,
1551
1546
                              _control_files=control_files,
1552
1547
                              a_bzrdir=a_bzrdir,
1553
 
                              _repository=a_bzrdir.find_repository())
 
1548
                              _repository=a_bzrdir.find_repository(),
 
1549
                              ignore_fallbacks=ignore_fallbacks)
1554
1550
        except errors.NoSuchFile:
1555
1551
            raise errors.NotBranchError(path=transport.base)
1556
1552
 
1736
1732
        return clone
1737
1733
 
1738
1734
    def open(self, a_bzrdir, _found=False, location=None,
1739
 
             possible_transports=None):
 
1735
             possible_transports=None, ignore_fallbacks=False):
1740
1736
        """Return the branch that the branch reference in a_bzrdir points at.
1741
1737
 
1742
 
        _found is a private parameter, do not use it. It is used to indicate
1743
 
               if format probing has already be done.
 
1738
        :param a_bzrdir: A BzrDir that contains a branch.
 
1739
        :param _found: a private parameter, do not use it. It is used to
 
1740
            indicate if format probing has already be done.
 
1741
        :param ignore_fallbacks: when set, no fallback branches will be opened
 
1742
            (if there are any).  Default is to open fallbacks.
 
1743
        :param location: The location of the referenced branch.  If
 
1744
            unspecified, this will be determined from the branch reference in
 
1745
            a_bzrdir.
 
1746
        :param possible_transports: An optional reusable transports list.
1744
1747
        """
1745
1748
        if not _found:
1746
1749
            format = BranchFormat.find_format(a_bzrdir)
1751
1754
            location = self.get_reference(a_bzrdir)
1752
1755
        real_bzrdir = bzrdir.BzrDir.open(
1753
1756
            location, possible_transports=possible_transports)
1754
 
        result = real_bzrdir.open_branch()
 
1757
        result = real_bzrdir.open_branch(ignore_fallbacks=ignore_fallbacks)
1755
1758
        # this changes the behaviour of result.clone to create a new reference
1756
1759
        # rather than a copy of the content of the branch.
1757
1760
        # I did not use a proxy object because that needs much more extensive
1804
1807
    """
1805
1808
 
1806
1809
    def __init__(self, _format=None,
1807
 
                 _control_files=None, a_bzrdir=None, _repository=None):
 
1810
                 _control_files=None, a_bzrdir=None, _repository=None,
 
1811
                 ignore_fallbacks=False):
1808
1812
        """Create new branch object at a particular location."""
1809
1813
        if a_bzrdir is None:
1810
1814
            raise ValueError('a_bzrdir must be supplied')
2304
2308
            self._get_fallback_repository(url))
2305
2309
 
2306
2310
    def _open_hook(self):
 
2311
        if self._ignore_fallbacks:
 
2312
            return
2307
2313
        try:
2308
2314
            url = self.get_stacked_on_url()
2309
2315
        except (errors.UnstackableRepositoryFormat, errors.NotStacked,
2325
2331
                self.repository.base)
2326
2332
 
2327
2333
    def __init__(self, *args, **kwargs):
 
2334
        self._ignore_fallbacks = kwargs.get('ignore_fallbacks', False)
2328
2335
        super(BzrBranch7, self).__init__(*args, **kwargs)
2329
2336
        self._last_revision_info_cache = None
2330
2337
        self._partial_revision_history_cache = []