~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/blackbox/test_upgrade.py

  • Committer: Martin Albisetti
  • Date: 2008-05-06 00:21:18 UTC
  • mto: (3431.1.1 integration)
  • mto: This revision was merged to the branch mainline in revision 3432.
  • Revision ID: argentina@gmail.com-20080506002118-7w9ywklw4khddf3g
Added spanish index

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2006-2010 Canonical Ltd
 
1
# Copyright (C) 2006, 2007 Canonical Ltd
 
2
# Authors: Robert Collins <robert.collins@canonical.com>
 
3
#          and others
2
4
#
3
5
# This program is free software; you can redistribute it and/or modify
4
6
# it under the terms of the GNU General Public License as published by
12
14
#
13
15
# You should have received a copy of the GNU General Public License
14
16
# along with this program; if not, write to the Free Software
15
 
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
17
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
18
 
17
19
"""Black box tests for the upgrade ui."""
 
20
 
18
21
import os
19
 
import stat
20
22
 
21
23
from bzrlib import (
22
24
    bzrdir,
23
25
    repository,
24
 
    transport,
 
26
    ui,
25
27
    )
26
28
from bzrlib.tests import (
27
 
    features,
28
29
    TestCaseInTempDir,
29
30
    TestCaseWithTransport,
 
31
    TestUIFactory,
30
32
    )
31
33
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
 
34
from bzrlib.transport import get_transport
32
35
from bzrlib.repofmt.knitrepo import (
33
36
    RepositoryFormatKnit1,
34
37
    )
38
41
 
39
42
    def setUp(self):
40
43
        super(TestWithUpgradableBranches, self).setUp()
41
 
        self.addCleanup(bzrdir.BzrDirFormat._set_default_format,
42
 
                        bzrdir.BzrDirFormat.get_default_format())
43
 
 
44
 
    def make_current_format_branch_and_checkout(self):
 
44
        self.old_format = bzrdir.BzrDirFormat.get_default_format()
 
45
        self.old_ui_factory = ui.ui_factory
 
46
        self.addCleanup(self.restoreDefaults)
 
47
 
 
48
        ui.ui_factory = TestUIFactory()
 
49
        # setup a format 5 branch we can upgrade from.
 
50
        self.make_branch_and_tree('format_5_branch',
 
51
                                  format=bzrdir.BzrDirFormat5())
 
52
 
45
53
        current_tree = self.make_branch_and_tree('current_format_branch',
46
54
                                                 format='default')
 
55
        self.make_branch_and_tree('metadir_weave_branch', format='metaweave')
47
56
        current_tree.branch.create_checkout(
48
57
            self.get_url('current_format_checkout'), lightweight=True)
49
58
 
50
 
    def make_format_5_branch(self):
51
 
        # setup a format 5 branch we can upgrade from.
52
 
        self.make_branch_and_tree('format_5_branch',
53
 
                                  format=bzrdir.BzrDirFormat5())
54
 
 
55
 
    def make_metadir_weave_branch(self):
56
 
        self.make_branch_and_tree('metadir_weave_branch', format='metaweave')
 
59
    def restoreDefaults(self):
 
60
        ui.ui_factory = self.old_ui_factory
 
61
        bzrdir.BzrDirFormat._set_default_format(self.old_format)
57
62
 
58
63
    def test_readonly_url_error(self):
59
 
        self.make_format_5_branch()
60
64
        (out, err) = self.run_bzr(
61
65
            ['upgrade', self.get_readonly_url('format_5_branch')], retcode=3)
62
66
        self.assertEqual(out, "")
63
67
        self.assertEqual(err, "bzr: ERROR: Upgrade URL cannot work with readonly URLs.\n")
64
68
 
65
69
    def test_upgrade_up_to_date(self):
66
 
        self.make_current_format_branch_and_checkout()
67
70
        # when up to date we should get a message to that effect
68
71
        (out, err) = self.run_bzr('upgrade current_format_branch', retcode=3)
69
72
        self.assertEqual("", out)
70
 
        self.assertEqualDiff("bzr: ERROR: The branch format Meta "
71
 
                             "directory format 1 is already at the most "
 
73
        self.assertEqualDiff("bzr: ERROR: The branch format Bazaar-NG meta "
 
74
                             "directory, format 1 is already at the most "
72
75
                             "recent format.\n", err)
73
76
 
74
77
    def test_upgrade_up_to_date_checkout_warns_branch_left_alone(self):
75
 
        self.make_current_format_branch_and_checkout()
76
78
        # when upgrading a checkout, the branch location and a suggestion
77
 
        # to upgrade it should be emitted even if the checkout is up to
 
79
        # to upgrade it should be emitted even if the checkout is up to 
78
80
        # date
79
81
        (out, err) = self.run_bzr('upgrade current_format_checkout', retcode=3)
80
82
        self.assertEqual("This is a checkout. The branch (%s) needs to be "
81
83
                         "upgraded separately.\n"
82
 
                         % transport.get_transport(
83
 
                self.get_url('current_format_branch')).base,
 
84
                         % get_transport(self.get_url('current_format_branch')).base,
84
85
                         out)
85
 
        self.assertEqualDiff("bzr: ERROR: The branch format Meta "
86
 
                             "directory format 1 is already at the most "
 
86
        self.assertEqualDiff("bzr: ERROR: The branch format Bazaar-NG meta "
 
87
                             "directory, format 1 is already at the most "
87
88
                             "recent format.\n", err)
88
89
 
89
90
    def test_upgrade_checkout(self):
91
92
        pass
92
93
 
93
94
    def test_upgrade_repository_scans_branches(self):
94
 
        # we should get individual upgrade notes for each branch even the
 
95
        # we should get individual upgrade notes for each branch even the 
95
96
        # anonymous branch
96
97
        pass
97
98
 
101
102
 
102
103
    def test_upgrade_explicit_metaformat(self):
103
104
        # users can force an upgrade to metadir format.
104
 
        self.make_format_5_branch()
105
 
        url = transport.get_transport(self.get_url('format_5_branch')).base
 
105
        url = get_transport(self.get_url('format_5_branch')).base
106
106
        # check --format takes effect
107
107
        bzrdir.BzrDirFormat._set_default_format(bzrdir.BzrDirFormat5())
108
 
        backup_dir = 'backup.bzr.~1~'
109
108
        (out, err) = self.run_bzr(
110
109
            ['upgrade', '--format=metaweave', url])
111
110
        self.assertEqualDiff("""starting upgrade of %s
112
 
making backup of %s.bzr
113
 
  to %s%s
 
111
making backup of tree history
 
112
%s.bzr has been backed up to %sbackup.bzr
 
113
if conversion fails, you can move this directory back to .bzr
 
114
if it succeeds, you can remove this directory if you wish
114
115
starting upgrade from format 5 to 6
115
116
adding prefixes to weaves
116
117
adding prefixes to revision-store
117
118
starting upgrade from format 6 to metadir
118
119
finished
119
 
""" % (url, url, url, backup_dir), out)
 
120
""" % (url, url, url), out)
120
121
        self.assertEqualDiff("", err)
121
122
        self.assertTrue(isinstance(
122
123
            bzrdir.BzrDir.open(self.get_url('format_5_branch'))._format,
123
124
            bzrdir.BzrDirMetaFormat1))
124
125
 
125
126
    def test_upgrade_explicit_knit(self):
126
 
        # users can force an upgrade to knit format from a metadir weave
 
127
        # users can force an upgrade to knit format from a metadir weave 
127
128
        # branch
128
 
        self.make_metadir_weave_branch()
129
 
        url = transport.get_transport(self.get_url('metadir_weave_branch')).base
 
129
        url = get_transport(self.get_url('metadir_weave_branch')).base
130
130
        # check --format takes effect
131
131
        bzrdir.BzrDirFormat._set_default_format(bzrdir.BzrDirFormat5())
132
 
        backup_dir = 'backup.bzr.~1~'
133
132
        (out, err) = self.run_bzr(
134
133
            ['upgrade', '--format=knit', url])
135
134
        self.assertEqualDiff("""starting upgrade of %s
136
 
making backup of %s.bzr
137
 
  to %s%s
 
135
making backup of tree history
 
136
%s.bzr has been backed up to %sbackup.bzr
 
137
if conversion fails, you can move this directory back to .bzr
 
138
if it succeeds, you can remove this directory if you wish
138
139
starting repository conversion
139
140
repository converted
140
141
finished
141
 
""" % (url, url, url, backup_dir), out)
 
142
""" % (url, url, url), out)
142
143
        self.assertEqualDiff("", err)
143
144
        converted_dir = bzrdir.BzrDir.open(self.get_url('metadir_weave_branch'))
144
145
        self.assertTrue(isinstance(converted_dir._format,
150
151
        self.run_bzr('init-repository --format=metaweave repo')
151
152
        self.run_bzr('upgrade --format=knit repo')
152
153
 
153
 
    def test_upgrade_permission_check(self):
154
 
        """'backup.bzr' should retain permissions of .bzr. Bug #262450"""
155
 
        self.requireFeature(features.posix_permissions_feature)
156
 
        old_perms = stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR
157
 
        backup_dir = 'backup.bzr.~1~'
158
 
        self.run_bzr('init --format=1.6')
159
 
        os.chmod('.bzr', old_perms)
160
 
        self.run_bzr('upgrade')
161
 
        new_perms = os.stat(backup_dir).st_mode & 0777
162
 
        self.assertTrue(new_perms == old_perms)
163
 
 
164
 
 
165
 
    def test_upgrade_with_existing_backup_dir(self):
166
 
        self.make_format_5_branch()
167
 
        t = transport.get_transport(self.get_url('format_5_branch'))
168
 
        url = t.base
169
 
        bzrdir.BzrDirFormat._set_default_format(bzrdir.BzrDirFormat5())
170
 
        backup_dir1 = 'backup.bzr.~1~'
171
 
        backup_dir2 = 'backup.bzr.~2~'
172
 
        # explicitly create backup_dir1. bzr should create the .~2~ directory
173
 
        # as backup
174
 
        t.mkdir(backup_dir1)
175
 
        (out, err) = self.run_bzr(
176
 
            ['upgrade', '--format=metaweave', url])
177
 
        self.assertEqualDiff("""starting upgrade of %s
178
 
making backup of %s.bzr
179
 
  to %s%s
180
 
starting upgrade from format 5 to 6
181
 
adding prefixes to weaves
182
 
adding prefixes to revision-store
183
 
starting upgrade from format 6 to metadir
184
 
finished
185
 
""" % (url, url, url, backup_dir2), out)
186
 
        self.assertEqualDiff("", err)
187
 
        self.assertTrue(isinstance(
188
 
            bzrdir.BzrDir.open(self.get_url('format_5_branch'))._format,
189
 
            bzrdir.BzrDirMetaFormat1))
190
 
        self.assertTrue(t.has(backup_dir2))
191
154
 
192
155
class SFTPTests(TestCaseWithSFTPServer):
193
156
    """Tests for upgrade over sftp."""
194
157
 
 
158
    def setUp(self):
 
159
        super(SFTPTests, self).setUp()
 
160
        self.old_ui_factory = ui.ui_factory
 
161
        self.addCleanup(self.restoreDefaults)
 
162
 
 
163
        ui.ui_factory = TestUIFactory()
 
164
 
 
165
    def restoreDefaults(self):
 
166
        ui.ui_factory = self.old_ui_factory
 
167
 
195
168
    def test_upgrade_url(self):
196
169
        self.run_bzr('init --format=weave')
197
 
        t = transport.get_transport(self.get_url())
 
170
        t = get_transport(self.get_url())
198
171
        url = t.base
199
172
        out, err = self.run_bzr(['upgrade', '--format=knit', url])
200
 
        backup_dir = 'backup.bzr.~1~'
201
173
        self.assertEqualDiff("""starting upgrade of %s
202
 
making backup of %s.bzr
203
 
  to %s%s
 
174
making backup of tree history
 
175
%s.bzr has been backed up to %sbackup.bzr
 
176
if conversion fails, you can move this directory back to .bzr
 
177
if it succeeds, you can remove this directory if you wish
204
178
starting upgrade from format 6 to metadir
205
179
starting repository conversion
206
180
repository converted
207
181
finished
208
 
""" % (url, url, url,backup_dir), out)
 
182
""" % (url, url, url), out)
209
183
        self.assertEqual('', err)
210
184
 
211
185
 
212
 
class UpgradeRecommendedTests(TestCaseWithTransport):
 
186
class UpgradeRecommendedTests(TestCaseInTempDir):
213
187
 
214
188
    def test_recommend_upgrade_wt4(self):
215
189
        # using a deprecated format gives a warning
225
199
        out, err = self.run_bzr('revno a')
226
200
        if err.find('upgrade') > -1:
227
201
            self.fail("message shouldn't suggest upgrade:\n%s" % err)
228
 
 
229
 
    def test_upgrade_shared_repo(self):
230
 
        repo = self.make_repository('repo', format='2a', shared=True)
231
 
        branch = self.make_branch_and_tree('repo/branch', format="pack-0.92")
232
 
        self.get_transport('repo/branch/.bzr/repository').delete_tree('.')
233
 
        out, err = self.run_bzr(['upgrade'], working_dir='repo/branch')