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
17
19
"""Black box tests for the upgrade ui."""
21
23
from bzrlib import (
26
28
from bzrlib.tests import (
29
30
TestCaseWithTransport,
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,
40
43
super(TestWithUpgradableBranches, self).setUp()
41
self.addCleanup(bzrdir.BzrDirFormat._set_default_format,
42
bzrdir.BzrDirFormat.get_default_format())
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)
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())
45
53
current_tree = self.make_branch_and_tree('current_format_branch',
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)
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())
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)
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")
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)
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
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,
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)
89
90
def test_upgrade_checkout(self):
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
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
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))
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
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
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
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')
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)
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'))
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
175
(out, err) = self.run_bzr(
176
['upgrade', '--format=metaweave', url])
177
self.assertEqualDiff("""starting upgrade of %s
178
making backup of %s.bzr
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
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))
192
155
class SFTPTests(TestCaseWithSFTPServer):
193
156
"""Tests for upgrade over sftp."""
159
super(SFTPTests, self).setUp()
160
self.old_ui_factory = ui.ui_factory
161
self.addCleanup(self.restoreDefaults)
163
ui.ui_factory = TestUIFactory()
165
def restoreDefaults(self):
166
ui.ui_factory = self.old_ui_factory
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())
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
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
208
""" % (url, url, url,backup_dir), out)
182
""" % (url, url, url), out)
209
183
self.assertEqual('', err)
212
class UpgradeRecommendedTests(TestCaseWithTransport):
186
class UpgradeRecommendedTests(TestCaseInTempDir):
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)
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')