13
13
# You should have received a copy of the GNU General Public License
14
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17
17
"""Tests for upgrade of old trees.
19
This file contains canned versions of some old trees, which are instantiated
19
This file contains canned versions of some old trees, which are instantiated
20
20
and then upgraded to the new format."""
22
22
# TODO queue for upgrade:
81
81
# check a backup was made:
82
backup_dir = 'backup.bzr.~1~'
83
82
transport = get_transport(b.base)
84
transport.stat(backup_dir)
85
transport.stat(backup_dir + '/README')
86
transport.stat(backup_dir + '/branch-format')
87
transport.stat(backup_dir + '/revision-history')
88
transport.stat(backup_dir + '/merged-patches')
89
transport.stat(backup_dir + '/pending-merged-patches')
90
transport.stat(backup_dir + '/pending-merges')
91
transport.stat(backup_dir + '/branch-name')
92
transport.stat(backup_dir + '/branch-lock')
93
transport.stat(backup_dir + '/inventory')
94
transport.stat(backup_dir + '/stat-cache')
95
transport.stat(backup_dir + '/text-store')
96
transport.stat(backup_dir + '/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
97
transport.stat(backup_dir + '/text-store/foo-20051004035756-4081373d897c3453.gz')
98
transport.stat(backup_dir + '/inventory-store/')
99
transport.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
100
transport.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
101
transport.stat(backup_dir + '/revision-store/')
102
transport.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
103
transport.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
83
transport.stat('backup.bzr')
84
transport.stat('backup.bzr/README')
85
transport.stat('backup.bzr/branch-format')
86
transport.stat('backup.bzr/revision-history')
87
transport.stat('backup.bzr/merged-patches')
88
transport.stat('backup.bzr/pending-merged-patches')
89
transport.stat('backup.bzr/pending-merges')
90
transport.stat('backup.bzr/branch-name')
91
transport.stat('backup.bzr/branch-lock')
92
transport.stat('backup.bzr/inventory')
93
transport.stat('backup.bzr/stat-cache')
94
transport.stat('backup.bzr/text-store')
95
transport.stat('backup.bzr/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
96
transport.stat('backup.bzr/text-store/foo-20051004035756-4081373d897c3453.gz')
97
transport.stat('backup.bzr/inventory-store/')
98
transport.stat('backup.bzr/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
99
transport.stat('backup.bzr/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
100
transport.stat('backup.bzr/revision-store/')
101
transport.stat('backup.bzr/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
102
transport.stat('backup.bzr/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
105
104
def test_upgrade_with_ghosts(self):
106
105
"""Upgrade v0.0.4 tree containing ghost references.
108
107
That is, some of the parents of revisions mentioned in the branch
109
aren't present in the branch's storage.
108
aren't present in the branch's storage.
111
This shouldn't normally happen in branches created entirely in
110
This shouldn't normally happen in branches created entirely in
112
111
bzr, but can happen in branches imported from baz and arch, or from
113
other systems, where the importer knows about a revision but not
112
other systems, where the importer knows about a revision but not
115
114
eq = self.assertEquals
116
115
self.build_tree_contents(_ghost_template)
126
125
old_repodir = bzrlib.bzrdir.BzrDir.open_unsupported('.')
127
126
old_repo_format = old_repodir.open_repository()._format
129
# this is the path to the literal file. As format changes
128
# this is the path to the literal file. As format changes
130
129
# occur it needs to be updated. FIXME: ask the store for the
132
131
repo = bzrlib.repository.Repository.open('.')
133
132
# it should have changed the format
134
133
self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
135
# and we should be able to read the names for the file id
134
# and we should be able to read the names for the file id
136
135
# 'dir-20051005095101-da1441ea3fa6917a'
138
137
self.addCleanup(repo.unlock)
158
157
self.assertFalse(transport.has('.bzr/stat-cache'))
159
158
# XXX: upgrade fails if a backup.bzr is already present
160
159
# -- David Allouche 2006-08-11
161
transport.delete_tree('backup.bzr.~1~')
160
transport.delete_tree('backup.bzr')
162
161
# At this point, we have a format6 branch without checkout files.
163
162
upgrade('.', bzrdir.BzrDirMetaFormat1())
164
163
# The upgrade should not have set up a working tree.
173
172
['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
174
173
'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
176
def test_upgrade_rich_root(self):
177
tree = self.make_branch_and_tree('tree', format='rich-root')
178
rev_id = tree.commit('first post')
181
175
def test_convert_branch5_branch6(self):
182
176
branch = self.make_branch('branch', format='knit')
183
177
branch.set_revision_history(['AB', 'CD'])
186
180
branch.set_push_location('file:///IJ')
187
181
target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
188
182
converter = branch.bzrdir._format.get_converter(target)
189
converter.convert(branch.bzrdir, None)
183
converter.convert(branch.bzrdir, progress.DummyProgress())
190
184
new_branch = _mod_branch.Branch.open(self.get_url('branch'))
191
185
self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6)
192
186
self.assertEqual('CD', new_branch.last_revision())
199
193
branch2 = self.make_branch('branch2', format='knit')
200
194
converter = branch2.bzrdir._format.get_converter(target)
201
converter.convert(branch2.bzrdir, None)
195
converter.convert(branch2.bzrdir, progress.DummyProgress())
202
196
branch2 = _mod_branch.Branch.open(self.get_url('branch'))
203
197
self.assertIs(branch2.__class__, _mod_branch.BzrBranch6)
205
def test_convert_branch7_branch8(self):
206
branch = self.make_branch('branch', format='1.9')
207
target = bzrdir.format_registry.make_bzrdir('1.9')
208
target.set_branch_format(_mod_branch.BzrBranchFormat8())
209
converter = branch.bzrdir._format.get_converter(target)
210
converter.convert(branch.bzrdir, None)
211
branch = _mod_branch.Branch.open(self.get_url('branch'))
212
self.assertIs(branch.__class__, _mod_branch.BzrBranch8)
213
self.assertEqual({}, branch._get_all_reference_info())
215
199
def test_convert_knit_dirstate_empty(self):
216
200
# test that asking for an upgrade from knit to dirstate works.
217
201
tree = self.make_branch_and_tree('tree', format='knit')
218
202
target = bzrdir.format_registry.make_bzrdir('dirstate')
219
203
converter = tree.bzrdir._format.get_converter(target)
220
converter.convert(tree.bzrdir, None)
204
converter.convert(tree.bzrdir, progress.DummyProgress())
221
205
new_tree = workingtree.WorkingTree.open('tree')
222
206
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
223
207
self.assertEqual('null:', new_tree.last_revision())
230
214
tree.add(['file'], ['file-id'])
231
215
target = bzrdir.format_registry.make_bzrdir('dirstate')
232
216
converter = tree.bzrdir._format.get_converter(target)
233
converter.convert(tree.bzrdir, None)
217
converter.convert(tree.bzrdir, progress.DummyProgress())
234
218
new_tree = workingtree.WorkingTree.open('tree')
235
219
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
236
220
self.assertEqual('null:', new_tree.last_revision())
241
225
rev_id = tree.commit('first post')
242
226
target = bzrdir.format_registry.make_bzrdir('dirstate')
243
227
converter = tree.bzrdir._format.get_converter(target)
244
converter.convert(tree.bzrdir, None)
228
converter.convert(tree.bzrdir, progress.DummyProgress())
245
229
new_tree = workingtree.WorkingTree.open('tree')
246
230
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
247
231
self.assertEqual(rev_id, new_tree.last_revision())
258
242
tree.merge_from_branch(merge_tree.branch)
259
243
target = bzrdir.format_registry.make_bzrdir('dirstate')
260
244
converter = tree.bzrdir._format.get_converter(target)
261
converter.convert(tree.bzrdir, None)
245
converter.convert(tree.bzrdir, progress.DummyProgress())
262
246
new_tree = workingtree.WorkingTree.open('tree')
263
247
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
264
248
self.assertEqual(rev_id2, new_tree.last_revision())