~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/bzrdir.py

  • Committer: Jelmer Vernooij
  • Date: 2011-10-13 14:12:19 UTC
  • mfrom: (6212 +trunk)
  • mto: This revision was merged to the branch mainline in revision 6214.
  • Revision ID: jelmer@samba.org-20111013141219-ro2enod24w19vkg6
MergeĀ lp:bzr.

Show diffs side-by-side

added added

removed removed

Lines of Context:
909
909
 
910
910
    def needs_format_conversion(self, format):
911
911
        """See BzrDir.needs_format_conversion()."""
912
 
        if not isinstance(self._format, format.__class__):
 
912
        if (not isinstance(self._format, format.__class__) or
 
913
            self._format.get_format_string() != format.get_format_string()):
913
914
            # it is not a meta dir format, conversion is needed.
914
915
            return True
915
916
        # we might want to push this down to the repository?
1368
1369
        :return: None.
1369
1370
        """
1370
1371
 
 
1372
    def supports_transport(self, transport):
 
1373
        # bzr formats can be opened over all known transports
 
1374
        return True
 
1375
 
1371
1376
 
1372
1377
class BzrDirMetaFormat1(BzrDirFormat):
1373
1378
    """Bzr meta control format 1
1511
1516
        """See BzrDirFormat.get_converter()."""
1512
1517
        if format is None:
1513
1518
            format = BzrDirFormat.get_default_format()
 
1519
        if (type(self) is BzrDirMetaFormat1 and
 
1520
            type(format) is BzrDirMetaFormat1Colo):
 
1521
            return ConvertMetaToColo(format)
 
1522
        if (type(self) is BzrDirMetaFormat1Colo and
 
1523
            type(format) is BzrDirMetaFormat1):
 
1524
            return ConvertMetaRemoveColo(format)
1514
1525
        if not isinstance(self, format.__class__):
1515
1526
            # converting away from metadir is not implemented
1516
1527
            raise NotImplementedError(self.get_converter)
1696
1707
        return to_convert
1697
1708
 
1698
1709
 
 
1710
class ConvertMetaToColo(controldir.Converter):
 
1711
    """Add colocated branch support."""
 
1712
 
 
1713
    def __init__(self, target_format):
 
1714
        """Create a converter.that upgrades a metadir to the colo format.
 
1715
 
 
1716
        :param target_format: The final metadir format that is desired.
 
1717
        """
 
1718
        self.target_format = target_format
 
1719
 
 
1720
    def convert(self, to_convert, pb):
 
1721
        """See Converter.convert()."""
 
1722
        to_convert.transport.put_bytes('branch-format',
 
1723
            self.target_format.get_format_string())
 
1724
        return BzrDir.open_from_transport(to_convert.root_transport)
 
1725
 
 
1726
 
 
1727
class ConvertMetaRemoveColo(controldir.Converter):
 
1728
    """Remove colocated branch support from a bzrdir."""
 
1729
 
 
1730
    def __init__(self, target_format):
 
1731
        """Create a converter.that downgrades a colocated branch metadir
 
1732
        to a regular metadir.
 
1733
 
 
1734
        :param target_format: The final metadir format that is desired.
 
1735
        """
 
1736
        self.target_format = target_format
 
1737
 
 
1738
    def convert(self, to_convert, pb):
 
1739
        """See Converter.convert()."""
 
1740
        to_convert.control_files.lock_write()
 
1741
        try:
 
1742
            branches = to_convert.list_branches()
 
1743
            if len(branches) > 1:
 
1744
                raise errors.BzrError("remove all but a single "
 
1745
                    "colocated branch when downgrading")
 
1746
        finally:
 
1747
            to_convert.control_files.unlock()
 
1748
        to_convert.transport.put_bytes('branch-format',
 
1749
            self.target_format.get_format_string())
 
1750
        return BzrDir.open_from_transport(to_convert.root_transport)
 
1751
 
 
1752
 
1699
1753
controldir.ControlDirFormat.register_server_prober(RemoteBzrProber)
1700
1754
 
1701
1755