1
# Copyright (C) 2005, 2008 Canonical Ltd
1
# Copyright (C) 2005, 2008, 2009 Canonical Ltd
3
3
# This program is free software; you can redistribute it and/or modify
4
4
# it under the terms of the GNU General Public License as published by
17
17
"""bzr upgrade logic."""
19
# change upgrade from .bzr to create a '.bzr-new', then do a bait and switch.
22
from bzrlib.bzrdir import ConvertBzrDir4To5, ConvertBzrDir5To6, BzrDir, BzrDirFormat4, BzrDirFormat5, BzrDirFormat
20
from bzrlib.bzrdir import BzrDir, BzrDirFormat
23
21
import bzrlib.errors as errors
24
22
from bzrlib.remote import RemoteBzrDir
25
23
from bzrlib.transport import get_transport
29
27
class Convert(object):
31
29
def __init__(self, url, format):
31
format = BzrDirFormat.get_default_format()
32
32
self.format = format
33
33
self.bzrdir = BzrDir.open_unsupported(url)
34
34
if isinstance(self.bzrdir, RemoteBzrDir):
61
61
if not self.bzrdir.can_convert_format():
62
62
raise errors.BzrError("cannot upgrade from bzrdir format %s" %
63
63
self.bzrdir._format)
64
if self.format is None:
65
target_format = BzrDirFormat.get_default_format()
67
target_format = self.format
68
self.bzrdir.check_conversion_target(target_format)
64
self.bzrdir.check_conversion_target(self.format)
69
65
self.pb.note('starting upgrade of %s', self.transport.base)
70
self._backup_control_dir()
66
self.bzrdir.backup_bzrdir()
71
67
while self.bzrdir.needs_format_conversion(self.format):
72
68
converter = self.bzrdir._format.get_converter(self.format)
73
69
self.bzrdir = converter.convert(self.bzrdir, self.pb)
74
70
self.pb.note("finished")
76
def _backup_control_dir(self):
77
self.pb.note('making backup of tree history')
78
old_path, new_path = self.bzrdir.backup_bzrdir()
79
self.pb.note('%s has been backed up to %s', old_path, new_path)
80
self.pb.note('if conversion fails, you can move this directory back to .bzr')
81
self.pb.note('if it succeeds, you can remove this directory if you wish')
83
73
def upgrade(url, format=None):
84
74
"""Upgrade to format, or the default bzrdir format if not supplied."""