~bzr-pqm/bzr/bzr.dev

4988.10.5 by John Arbash Meinel
Merge bzr.dev 5021 to resolve NEWS
1
# Copyright (C) 2005, 2006, 2008, 2009, 2010 Canonical Ltd
1267 by Martin Pool
- notes on conversion of existing history to weaves
2
#
1080 by Martin Pool
- test tool for converting history to weave files
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
1267 by Martin Pool
- notes on conversion of existing history to weaves
7
#
1080 by Martin Pool
- test tool for converting history to weave files
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
1267 by Martin Pool
- notes on conversion of existing history to weaves
12
#
1080 by Martin Pool
- test tool for converting history to weave files
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
4183.7.1 by Sabin Iacob
update FSF mailing address
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
1080 by Martin Pool
- test tool for converting history to weave files
16
1534.4.34 by Robert Collins
Fix remaining uses of deprecated apis within bzrlib.
17
"""bzr upgrade logic."""
18
3943.2.1 by Martin Pool
doc/import cleanups
19
4988.11.1 by Jelmer Vernooij
Remove unused imports.
20
from bzrlib.bzrdir import BzrDir, format_registry
1534.4.44 by Robert Collins
Make a new BzrDir format that uses a versioned branch format in a branch/ subdirectory.
21
import bzrlib.errors as errors
3577.4.1 by Andrew Bennetts
Make 'bzr upgrade' work over HPSS.
22
from bzrlib.remote import RemoteBzrDir
1534.5.9 by Robert Collins
Advise users running upgrade on a checkout to also run it on the branch.
23
import bzrlib.ui as ui
1534.5.6 by Robert Collins
split out converter logic into per-format objects.
24
25
26
class Convert(object):
27
4119.7.1 by Jelmer Vernooij
Make upgrade default to a rich-root-capable format if the source format uses rich roots.
28
    def __init__(self, url, format=None):
1534.5.13 by Robert Collins
Correct buggy test.
29
        self.format = format
1534.5.7 by Robert Collins
Start factoring out the upgrade policy logic.
30
        self.bzrdir = BzrDir.open_unsupported(url)
4634.144.9 by Martin Pool
Suppress user warnings about cross-format fetch during upgrade
31
        # XXX: Change to cleanup
32
        warning_id = 'cross_format_fetch'
4634.144.11 by Martin Pool
Rename squelched to suppressed
33
        saved_warning = warning_id in ui.ui_factory.suppressed_warnings
3577.4.1 by Andrew Bennetts
Make 'bzr upgrade' work over HPSS.
34
        if isinstance(self.bzrdir, RemoteBzrDir):
35
            self.bzrdir._ensure_real()
36
            self.bzrdir = self.bzrdir._real_bzrdir
1534.5.7 by Robert Collins
Start factoring out the upgrade policy logic.
37
        if self.bzrdir.root_transport.is_readonly():
38
            raise errors.UpgradeReadonly
39
        self.transport = self.bzrdir.root_transport
4634.144.11 by Martin Pool
Rename squelched to suppressed
40
        ui.ui_factory.suppressed_warnings.add(warning_id)
1594.1.3 by Robert Collins
Fixup pb usage to use nested_progress_bar.
41
        try:
42
            self.convert()
43
        finally:
4634.144.9 by Martin Pool
Suppress user warnings about cross-format fetch during upgrade
44
            if not saved_warning:
4634.144.11 by Martin Pool
Rename squelched to suppressed
45
                ui.ui_factory.suppressed_warnings.remove(warning_id)
1534.5.6 by Robert Collins
split out converter logic into per-format objects.
46
47
    def convert(self):
1558.7.2 by Aaron Bentley
Upgrade works in repositories
48
        try:
49
            branch = self.bzrdir.open_branch()
5158.6.9 by Martin Pool
Simplify various code to use user_url
50
            if branch.user_url != self.bzrdir.user_url:
4471.2.2 by Martin Pool
Deprecate ProgressTask.note
51
                ui.ui_factory.note("This is a checkout. The branch (%s) needs to be "
52
                             "upgraded separately." %
5158.6.9 by Martin Pool
Simplify various code to use user_url
53
                             branch.user_url)
3602.2.1 by Martin Pool
Fix and test for problem upgrading stacked branches
54
            del branch
55
        except (errors.NotBranchError, errors.IncompatibleRepositories):
3943.8.1 by Marius Kruger
remove all trailing whitespace from bzr source
56
            # might not be a format we can open without upgrading; see e.g.
3602.2.1 by Martin Pool
Fix and test for problem upgrading stacked branches
57
            # https://bugs.launchpad.net/bzr/+bug/253891
1558.7.2 by Aaron Bentley
Upgrade works in repositories
58
            pass
4119.7.1 by Jelmer Vernooij
Make upgrade default to a rich-root-capable format if the source format uses rich roots.
59
        if self.format is None:
4170.3.5 by Jelmer Vernooij
Fix upgrade if there is no local repository present.
60
            try:
61
                rich_root = self.bzrdir.find_repository()._format.rich_root_data
62
            except errors.NoRepositoryPresent:
63
                rich_root = False # assume no rich roots
64
            if rich_root:
4119.7.1 by Jelmer Vernooij
Make upgrade default to a rich-root-capable format if the source format uses rich roots.
65
                format_name = "default-rich-root"
66
            else:
67
                format_name = "default"
68
            format = format_registry.make_bzrdir(format_name)
69
        else:
70
            format = self.format
71
        if not self.bzrdir.needs_format_conversion(format):
1534.5.10 by Robert Collins
Make upgrade driver unaware of the specific formats in play.
72
            raise errors.UpToDateFormat(self.bzrdir._format)
1534.5.16 by Robert Collins
Review feedback.
73
        if not self.bzrdir.can_convert_format():
3602.2.1 by Martin Pool
Fix and test for problem upgrading stacked branches
74
            raise errors.BzrError("cannot upgrade from bzrdir format %s" %
1534.5.6 by Robert Collins
split out converter logic into per-format objects.
75
                           self.bzrdir._format)
4119.7.1 by Jelmer Vernooij
Make upgrade default to a rich-root-capable format if the source format uses rich roots.
76
        self.bzrdir.check_conversion_target(format)
4471.2.2 by Martin Pool
Deprecate ProgressTask.note
77
        ui.ui_factory.note('starting upgrade of %s' % self.transport.base)
78
3943.2.4 by Martin Pool
Move backup progress indicators from upgrade.py into backup_bzrdir, and tweak text
79
        self.bzrdir.backup_bzrdir()
4119.7.1 by Jelmer Vernooij
Make upgrade default to a rich-root-capable format if the source format uses rich roots.
80
        while self.bzrdir.needs_format_conversion(format):
81
            converter = self.bzrdir._format.get_converter(format)
4961.2.15 by Martin Pool
Remove more pb-passing
82
            self.bzrdir = converter.convert(self.bzrdir, None)
4471.2.2 by Martin Pool
Deprecate ProgressTask.note
83
        ui.ui_factory.note("finished")
1534.5.6 by Robert Collins
split out converter logic into per-format objects.
84
85
1534.5.13 by Robert Collins
Correct buggy test.
86
def upgrade(url, format=None):
87
    """Upgrade to format, or the default bzrdir format if not supplied."""
88
    Convert(url, format)