~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/upgrade.py

  • Committer: Vincent Ladeuil
  • Date: 2010-04-23 08:51:52 UTC
  • mfrom: (5131.2.6 support_OO_flag)
  • mto: This revision was merged to the branch mainline in revision 5179.
  • Revision ID: v.ladeuil+lp@free.fr-20100423085152-uoewc1vnkwqhw0pj
Manually assign docstrings to command objects, so that they work with python -OO

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2005, 2008, 2009 Canonical Ltd
 
1
# Copyright (C) 2005, 2006, 2008, 2009, 2010 Canonical Ltd
2
2
#
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."""
18
18
 
19
19
 
20
 
from bzrlib.bzrdir import BzrDir, BzrDirFormat
 
20
from bzrlib.bzrdir import BzrDir, format_registry
21
21
import bzrlib.errors as errors
22
22
from bzrlib.remote import RemoteBzrDir
23
 
from bzrlib.transport import get_transport
24
23
import bzrlib.ui as ui
25
24
 
26
25
 
27
26
class Convert(object):
28
27
 
29
 
    def __init__(self, url, format):
30
 
        if format is None:
31
 
            format = BzrDirFormat.get_default_format()
 
28
    def __init__(self, url, format=None):
32
29
        self.format = format
33
30
        self.bzrdir = BzrDir.open_unsupported(url)
 
31
        # XXX: Change to cleanup
 
32
        warning_id = 'cross_format_fetch'
 
33
        saved_warning = warning_id in ui.ui_factory.suppressed_warnings
34
34
        if isinstance(self.bzrdir, RemoteBzrDir):
35
35
            self.bzrdir._ensure_real()
36
36
            self.bzrdir = self.bzrdir._real_bzrdir
37
37
        if self.bzrdir.root_transport.is_readonly():
38
38
            raise errors.UpgradeReadonly
39
39
        self.transport = self.bzrdir.root_transport
40
 
        self.pb = ui.ui_factory.nested_progress_bar()
 
40
        ui.ui_factory.suppressed_warnings.add(warning_id)
41
41
        try:
42
42
            self.convert()
43
43
        finally:
44
 
            self.pb.finished()
 
44
            if not saved_warning:
 
45
                ui.ui_factory.suppressed_warnings.remove(warning_id)
45
46
 
46
47
    def convert(self):
47
48
        try:
48
49
            branch = self.bzrdir.open_branch()
49
50
            if branch.bzrdir.root_transport.base != \
50
51
                self.bzrdir.root_transport.base:
51
 
                self.pb.note("This is a checkout. The branch (%s) needs to be "
52
 
                             "upgraded separately.",
 
52
                ui.ui_factory.note("This is a checkout. The branch (%s) needs to be "
 
53
                             "upgraded separately." %
53
54
                             branch.bzrdir.root_transport.base)
54
55
            del branch
55
56
        except (errors.NotBranchError, errors.IncompatibleRepositories):
56
57
            # might not be a format we can open without upgrading; see e.g.
57
58
            # https://bugs.launchpad.net/bzr/+bug/253891
58
59
            pass
59
 
        if not self.bzrdir.needs_format_conversion(self.format):
 
60
        if self.format is None:
 
61
            try:
 
62
                rich_root = self.bzrdir.find_repository()._format.rich_root_data
 
63
            except errors.NoRepositoryPresent:
 
64
                rich_root = False # assume no rich roots
 
65
            if rich_root:
 
66
                format_name = "default-rich-root"
 
67
            else:
 
68
                format_name = "default"
 
69
            format = format_registry.make_bzrdir(format_name)
 
70
        else:
 
71
            format = self.format
 
72
        if not self.bzrdir.needs_format_conversion(format):
60
73
            raise errors.UpToDateFormat(self.bzrdir._format)
61
74
        if not self.bzrdir.can_convert_format():
62
75
            raise errors.BzrError("cannot upgrade from bzrdir format %s" %
63
76
                           self.bzrdir._format)
64
 
        self.bzrdir.check_conversion_target(self.format)
65
 
        self.pb.note('starting upgrade of %s', self.transport.base)
 
77
        self.bzrdir.check_conversion_target(format)
 
78
        ui.ui_factory.note('starting upgrade of %s' % self.transport.base)
 
79
 
66
80
        self.bzrdir.backup_bzrdir()
67
 
        while self.bzrdir.needs_format_conversion(self.format):
68
 
            converter = self.bzrdir._format.get_converter(self.format)
69
 
            self.bzrdir = converter.convert(self.bzrdir, self.pb)
70
 
        self.pb.note("finished")
 
81
        while self.bzrdir.needs_format_conversion(format):
 
82
            converter = self.bzrdir._format.get_converter(format)
 
83
            self.bzrdir = converter.convert(self.bzrdir, None)
 
84
        ui.ui_factory.note("finished")
71
85
 
72
86
 
73
87
def upgrade(url, format=None):