1
# Copyright (C) 2006 Canonical Ltd
1
# Copyright (C) 2006, 2007 Canonical Ltd
2
2
# Authors: Robert Collins <robert.collins@canonical.com>
3
# -*- coding: utf-8 -*-
5
5
# This program is free software; you can redistribute it and/or modify
6
6
# it under the terms of the GNU General Public License as published by
24
import bzrlib.bzrdir as bzrdir
25
import bzrlib.repository as repository
26
from bzrlib.tests import TestCaseWithTransport
27
from bzrlib.tests.blackbox import TestUIFactory
28
from bzrlib.tests import (
30
TestCaseWithTransport,
28
33
from bzrlib.tests.test_sftp_transport import TestCaseWithSFTPServer
29
34
from bzrlib.transport import get_transport
30
import bzrlib.ui as ui
35
from bzrlib.repofmt.knitrepo import (
36
RepositoryFormatKnit1,
33
40
class TestWithUpgradableBranches(TestCaseWithTransport):
36
43
super(TestWithUpgradableBranches, self).setUp()
37
44
self.old_format = bzrdir.BzrDirFormat.get_default_format()
38
self.old_repo_format = \
39
bzrlib.repository.RepositoryFormat.get_default_format()
40
45
self.old_ui_factory = ui.ui_factory
41
46
self.addCleanup(self.restoreDefaults)
43
48
ui.ui_factory = TestUIFactory()
44
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirMetaFormat1())
45
bzrlib.repository.RepositoryFormat.set_default_format(
46
bzrlib.repository.RepositoryFormat7())
47
# FIXME RBC 20060120 we should be able to do this via ui calls only.
48
49
# setup a format 5 branch we can upgrade from.
49
t = get_transport(self.get_url())
50
t.mkdir('format_5_branch')
51
bzrdir.BzrDirFormat5().initialize(self.get_url('format_5_branch'))
52
bzrdir.BzrDir.create_standalone_workingtree('current_format_branch')
53
d = bzrdir.BzrDir.create('metadir_weave_branch')
56
d.create_workingtree()
57
self.run_bzr('checkout',
59
self.get_url('current_format_branch'),
60
'current_format_checkout')
50
self.make_branch_and_tree('format_5_branch',
51
format=bzrdir.BzrDirFormat5())
53
current_tree = self.make_branch_and_tree('current_format_branch',
55
self.make_branch_and_tree('metadir_weave_branch', format='metaweave')
56
current_tree.branch.create_checkout(
57
self.get_url('current_format_checkout'), lightweight=True)
62
59
def restoreDefaults(self):
63
bzrdir.BzrDirFormat.set_default_format(self.old_format)
64
bzrlib.repository.RepositoryFormat.set_default_format(
66
60
ui.ui_factory = self.old_ui_factory
61
bzrdir.BzrDirFormat._set_default_format(self.old_format)
68
63
def test_readonly_url_error(self):
69
64
(out, err) = self.run_bzr_captured(
111
106
# users can force an upgrade to metadir format.
112
107
url = get_transport(self.get_url('format_5_branch')).base
113
108
# check --format takes effect
114
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirFormat5())
109
bzrdir.BzrDirFormat._set_default_format(bzrdir.BzrDirFormat5())
115
110
(out, err) = self.run_bzr_captured(
116
111
['upgrade', '--format=metaweave', url])
117
112
self.assertEqualDiff("""starting upgrade of %s
136
131
url = get_transport(self.get_url('metadir_weave_branch')).base
137
132
# check --format takes effect
138
bzrdir.BzrDirFormat.set_default_format(bzrdir.BzrDirFormat5())
133
bzrdir.BzrDirFormat._set_default_format(bzrdir.BzrDirFormat5())
139
134
(out, err) = self.run_bzr_captured(
140
135
['upgrade', '--format=knit', url])
141
136
self.assertEqualDiff("""starting upgrade of %s
152
147
self.assertTrue(isinstance(converted_dir._format,
153
148
bzrdir.BzrDirMetaFormat1))
154
149
self.assertTrue(isinstance(converted_dir.open_repository()._format,
155
repository.RepositoryFormatKnit1))
150
RepositoryFormatKnit1))
157
152
def test_upgrade_repo(self):
158
153
self.run_bzr('init-repository', '--format=metaweave', 'repo')
189
184
""" % (url, url, url), out)
190
185
self.assertEqual('', err)
188
class UpgradeRecommendedTests(TestCaseInTempDir):
190
def test_recommend_upgrade_wt4(self):
191
# using a deprecated format gives a warning
192
self.run_bzr('init', '--knit', 'a')
193
out, err = self.run_bzr('status', 'a')
194
self.assertContainsRe(err, 'bzr upgrade .*[/\\\\]a')
196
def test_no_upgrade_recommendation_from_bzrdir(self):
197
# we should only get a recommendation to upgrade when we're accessing
198
# the actual workingtree, not when we only open a bzrdir that contains
200
self.run_bzr('init', '--knit', 'a')
201
out, err = self.run_bzr('checkout', 'a', 'b')
202
if err.find('upgrade') > -1:
203
self.fail("message shouldn't suggest upgrade:\n%s" % err)