Rev 6208: (jelmer) Support upgrading between the 2a and development-colo formats. in file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/
Patch Queue Manager
pqm at pqm.ubuntu.com
Wed Oct 12 13:06:10 UTC 2011
At file:///srv/pqm.bazaar-vcs.org/archives/thelove/bzr/%2Btrunk/
------------------------------------------------------------
revno: 6208 [merge]
revision-id: pqm at pqm.ubuntu.com-20111012130609-iqfvfq1pghcs1zz2
parent: pqm at pqm.ubuntu.com-20111010172112-zj6ufki2aonpr4ut
parent: jelmer at samba.org-20111011201809-apxml9aoaakkie53
committer: Patch Queue Manager <pqm at pqm.ubuntu.com>
branch nick: +trunk
timestamp: Wed 2011-10-12 13:06:09 +0000
message:
(jelmer) Support upgrading between the 2a and development-colo formats.
(Jelmer Vernooij)
modified:
bzrlib/bzrdir.py bzrdir.py-20060131065624-156dfea39c4387cb
bzrlib/tests/test_bzrdir.py test_bzrdir.py-20060131065654-deba40eef51cf220
=== modified file 'bzrlib/bzrdir.py'
--- a/bzrlib/bzrdir.py 2011-10-05 14:12:34 +0000
+++ b/bzrlib/bzrdir.py 2011-10-11 20:18:09 +0000
@@ -1269,7 +1269,8 @@
def needs_format_conversion(self, format):
"""See BzrDir.needs_format_conversion()."""
- if not isinstance(self._format, format.__class__):
+ if (not isinstance(self._format, format.__class__) or
+ self._format.get_format_string() != format.get_format_string()):
# it is not a meta dir format, conversion is needed.
return True
# we might want to push this down to the repository?
@@ -1871,6 +1872,12 @@
"""See BzrDirFormat.get_converter()."""
if format is None:
format = BzrDirFormat.get_default_format()
+ if (type(self) is BzrDirMetaFormat1 and
+ type(format) is BzrDirMetaFormat1Colo):
+ return ConvertMetaToColo(format)
+ if (type(self) is BzrDirMetaFormat1Colo and
+ type(format) is BzrDirMetaFormat1):
+ return ConvertMetaRemoveColo(format)
if not isinstance(self, format.__class__):
# converting away from metadir is not implemented
raise NotImplementedError(self.get_converter)
@@ -2056,6 +2063,49 @@
return to_convert
+class ConvertMetaToColo(controldir.Converter):
+ """Add colocated branch support."""
+
+ def __init__(self, target_format):
+ """Create a converter.that upgrades a metadir to the colo format.
+
+ :param target_format: The final metadir format that is desired.
+ """
+ self.target_format = target_format
+
+ def convert(self, to_convert, pb):
+ """See Converter.convert()."""
+ to_convert.transport.put_bytes('branch-format',
+ self.target_format.get_format_string())
+ return BzrDir.open_from_transport(to_convert.root_transport)
+
+
+class ConvertMetaRemoveColo(controldir.Converter):
+ """Remove colocated branch support from a bzrdir."""
+
+ def __init__(self, target_format):
+ """Create a converter.that downgrades a colocated branch metadir
+ to a regular metadir.
+
+ :param target_format: The final metadir format that is desired.
+ """
+ self.target_format = target_format
+
+ def convert(self, to_convert, pb):
+ """See Converter.convert()."""
+ to_convert.control_files.lock_write()
+ try:
+ branches = to_convert.list_branches()
+ if len(branches) > 1:
+ raise errors.BzrError("remove all but a single "
+ "colocated branch when downgrading")
+ finally:
+ to_convert.control_files.unlock()
+ to_convert.transport.put_bytes('branch-format',
+ self.target_format.get_format_string())
+ return BzrDir.open_from_transport(to_convert.root_transport)
+
+
controldir.ControlDirFormat.register_server_prober(RemoteBzrProber)
=== modified file 'bzrlib/tests/test_bzrdir.py'
--- a/bzrlib/tests/test_bzrdir.py 2011-10-05 14:12:34 +0000
+++ b/bzrlib/tests/test_bzrdir.py 2011-10-11 20:18:09 +0000
@@ -1404,3 +1404,29 @@
def test_supports_colo(self):
format = bzrdir.BzrDirMetaFormat1Colo()
self.assertTrue(format.colocated_branches)
+
+ def test_upgrade_from_2a(self):
+ tree = self.make_branch_and_tree('.', format='2a')
+ format = bzrdir.BzrDirMetaFormat1Colo()
+ self.assertTrue(tree.bzrdir.needs_format_conversion(format))
+ converter = tree.bzrdir._format.get_converter(format)
+ result = converter.convert(tree.bzrdir, None)
+ self.assertIsInstance(result._format, bzrdir.BzrDirMetaFormat1Colo)
+ self.assertFalse(result.needs_format_conversion(format))
+
+ def test_downgrade_to_2a(self):
+ tree = self.make_branch_and_tree('.', format='development-colo')
+ format = bzrdir.BzrDirMetaFormat1()
+ self.assertTrue(tree.bzrdir.needs_format_conversion(format))
+ converter = tree.bzrdir._format.get_converter(format)
+ result = converter.convert(tree.bzrdir, None)
+ self.assertIsInstance(result._format, bzrdir.BzrDirMetaFormat1)
+ self.assertFalse(result.needs_format_conversion(format))
+
+ def test_downgrade_to_2a_too_many_branches(self):
+ tree = self.make_branch_and_tree('.', format='development-colo')
+ tree.bzrdir.create_branch(name="another-colocated-branch")
+ converter = tree.bzrdir._format.get_converter(
+ bzrdir.BzrDirMetaFormat1())
+ self.assertRaises(errors.BzrError, converter.convert, tree.bzrdir,
+ None)
More information about the bazaar-commits
mailing list