115
113
def test_upgrade_makes_dir_weaves(self):
116
114
self.build_tree_contents(_upgrade_dir_template)
117
old_repodir = bzrlib.bzrdir.BzrDir.open_unsupported('.')
118
old_repo_format = old_repodir.open_repository()._format
120
116
# this is the path to the literal file. As format changes
121
117
# occur it needs to be updated. FIXME: ask the store for the
123
repo = bzrlib.repository.Repository.open('.')
124
# it should have changed the format
125
self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
126
# and we should be able to read the names for the file id
127
# 'dir-20051005095101-da1441ea3fa6917a'
130
repo.text_store.get_weave(
131
'dir-20051005095101-da1441ea3fa6917a',
132
repo.get_transaction()))
119
self.failUnlessExists(
120
'.bzr/weaves/de/dir-20051005095101-da1441ea3fa6917a.weave')
134
122
def test_upgrade_to_meta_sets_workingtree_last_revision(self):
135
123
self.build_tree_contents(_upgrade_dir_template)
136
124
upgrade('.', bzrdir.BzrDirMetaFormat1())
137
125
tree = workingtree.WorkingTree.open('.')
138
self.assertEqual([tree.branch.revision_history()[-1]],
139
tree.get_parent_ids())
141
def test_upgrade_v6_to_meta_no_workingtree(self):
142
# Some format6 branches do not have checkout files. Upgrading
143
# such a branch to metadir must not setup a working tree.
144
self.build_tree_contents(_upgrade1_template)
145
upgrade('.', bzrdir.BzrDirFormat6())
146
transport = get_transport('.')
147
transport.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
148
assert not transport.has('.bzr/stat-cache')
149
# XXX: upgrade fails if a .bzr.backup is already present
150
# -- David Allouche 2006-08-11
151
transport.delete_tree('.bzr.backup')
152
# At this point, we have a format6 branch without checkout files.
153
upgrade('.', bzrdir.BzrDirMetaFormat1())
154
# The upgrade should not have set up a working tree.
155
control = bzrdir.BzrDir.open('.')
156
self.assertFalse(control.has_workingtree())
157
# We have covered the scope of this test, we may as well check that
158
# upgrade has not eaten our data, even if it's a bit redundant with
160
self.failUnless(isinstance(control._format, bzrdir.BzrDirMetaFormat1))
161
branch = control.open_branch()
162
self.assertEquals(branch.revision_history(),
163
['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
164
'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
166
def test_convert_branch5_branch6(self):
167
branch = self.make_branch('branch', format='knit')
168
branch.set_revision_history(['AB', 'CD'])
169
branch.set_parent('file:///EF')
170
branch.set_bound_location('file:///GH')
171
branch.set_push_location('file:///IJ')
172
target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
173
converter = branch.bzrdir._format.get_converter(target)
174
converter.convert(branch.bzrdir, progress.DummyProgress())
175
new_branch = _mod_branch.Branch.open(self.get_url('branch'))
176
self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6)
177
self.assertEqual('CD', new_branch.last_revision())
178
self.assertEqual('file:///EF', new_branch.get_parent())
179
self.assertEqual('file:///GH', new_branch.get_bound_location())
180
branch_config = new_branch.get_config()._get_branch_data_config()
181
self.assertEqual('file:///IJ',
182
branch_config.get_user_option('push_location'))
184
branch2 = self.make_branch('branch2', format='knit')
185
converter = branch2.bzrdir._format.get_converter(target)
186
converter.convert(branch2.bzrdir, progress.DummyProgress())
187
branch2 = _mod_branch.Branch.open(self.get_url('branch'))
188
self.assertIs(branch2.__class__, _mod_branch.BzrBranch6)
190
def test_convert_knit_dirstate_empty(self):
191
# test that asking for an upgrade from knit to dirstate works.
192
tree = self.make_branch_and_tree('tree', format='knit')
193
target = bzrdir.format_registry.make_bzrdir('dirstate')
194
converter = tree.bzrdir._format.get_converter(target)
195
converter.convert(tree.bzrdir, progress.DummyProgress())
196
new_tree = workingtree.WorkingTree.open('tree')
197
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
198
self.assertEqual(None, new_tree.last_revision())
200
def test_convert_knit_dirstate_content(self):
201
# smoke test for dirstate conversion: we call dirstate primitives,
202
# and its there that the core logic is tested.
203
tree = self.make_branch_and_tree('tree', format='knit')
204
self.build_tree(['tree/file'])
205
tree.add(['file'], ['file-id'])
206
target = bzrdir.format_registry.make_bzrdir('dirstate')
207
converter = tree.bzrdir._format.get_converter(target)
208
converter.convert(tree.bzrdir, progress.DummyProgress())
209
new_tree = workingtree.WorkingTree.open('tree')
210
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
211
self.assertEqual(None, new_tree.last_revision())
213
def test_convert_knit_one_parent_dirstate(self):
214
# test that asking for an upgrade from knit to dirstate works.
215
tree = self.make_branch_and_tree('tree', format='knit')
216
rev_id = tree.commit('first post')
217
target = bzrdir.format_registry.make_bzrdir('dirstate')
218
converter = tree.bzrdir._format.get_converter(target)
219
converter.convert(tree.bzrdir, progress.DummyProgress())
220
new_tree = workingtree.WorkingTree.open('tree')
221
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
222
self.assertEqual(rev_id, new_tree.last_revision())
223
for path in ['basis-inventory-cache', 'inventory', 'last-revision',
224
'pending-merges', 'stat-cache']:
225
self.failIfExists('tree/.bzr/checkout/' + path)
227
def test_convert_knit_merges_dirstate(self):
228
tree = self.make_branch_and_tree('tree', format='knit')
229
rev_id = tree.commit('first post')
230
merge_tree = tree.bzrdir.sprout('tree2').open_workingtree()
231
rev_id2 = tree.commit('second post')
232
rev_id3 = merge_tree.commit('second merge post')
233
tree.merge_from_branch(merge_tree.branch)
234
target = bzrdir.format_registry.make_bzrdir('dirstate')
235
converter = tree.bzrdir._format.get_converter(target)
236
converter.convert(tree.bzrdir, progress.DummyProgress())
237
new_tree = workingtree.WorkingTree.open('tree')
238
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
239
self.assertEqual(rev_id2, new_tree.last_revision())
240
self.assertEqual([rev_id2, rev_id3], new_tree.get_parent_ids())
241
for path in ['basis-inventory-cache', 'inventory', 'last-revision',
242
'pending-merges', 'stat-cache']:
243
self.failIfExists('tree/.bzr/checkout/' + path)
126
self.assertEqual(tree.last_revision(),
127
tree.branch.revision_history()[-1])
246
130
_upgrade1_template = \