63
67
'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
64
68
rt = b.repository.revision_tree(rh[0])
65
69
foo_id = 'foo-20051004035605-91e788d1875603ae'
66
eq(rt.get_file_text(foo_id), 'initial contents\n')
72
eq(rt.get_file_text(foo_id), 'initial contents\n')
67
75
rt = b.repository.revision_tree(rh[1])
68
eq(rt.get_file_text(foo_id), 'new contents\n')
78
eq(rt.get_file_text(foo_id), 'new contents\n')
69
81
# check a backup was made:
70
82
transport = get_transport(b.base)
71
transport.stat('.bzr.backup')
72
transport.stat('.bzr.backup/README')
73
transport.stat('.bzr.backup/branch-format')
74
transport.stat('.bzr.backup/revision-history')
75
transport.stat('.bzr.backup/merged-patches')
76
transport.stat('.bzr.backup/pending-merged-patches')
77
transport.stat('.bzr.backup/pending-merges')
78
transport.stat('.bzr.backup/branch-name')
79
transport.stat('.bzr.backup/branch-lock')
80
transport.stat('.bzr.backup/inventory')
81
transport.stat('.bzr.backup/stat-cache')
82
transport.stat('.bzr.backup/text-store')
83
transport.stat('.bzr.backup/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
84
transport.stat('.bzr.backup/text-store/foo-20051004035756-4081373d897c3453.gz')
85
transport.stat('.bzr.backup/inventory-store/')
86
transport.stat('.bzr.backup/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
87
transport.stat('.bzr.backup/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
88
transport.stat('.bzr.backup/revision-store/')
89
transport.stat('.bzr.backup/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
90
transport.stat('.bzr.backup/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')
92
104
def test_upgrade_with_ghosts(self):
93
105
"""Upgrade v0.0.4 tree containing ghost references.
121
133
self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
122
134
# and we should be able to read the names for the file id
123
135
# 'dir-20051005095101-da1441ea3fa6917a'
126
repo.text_store.get_weave(
127
'dir-20051005095101-da1441ea3fa6917a',
128
repo.get_transaction()))
137
self.addCleanup(repo.unlock)
138
text_keys = repo.texts.keys()
139
dir_keys = [key for key in text_keys if key[0] ==
140
'dir-20051005095101-da1441ea3fa6917a']
141
self.assertNotEqual([], dir_keys)
130
143
def test_upgrade_to_meta_sets_workingtree_last_revision(self):
131
144
self.build_tree_contents(_upgrade_dir_template)
132
145
upgrade('.', bzrdir.BzrDirMetaFormat1())
133
146
tree = workingtree.WorkingTree.open('.')
134
self.assertEqual(tree.last_revision(),
135
tree.branch.revision_history()[-1])
147
self.assertEqual([tree.branch.revision_history()[-1]],
148
tree.get_parent_ids())
150
def test_upgrade_v6_to_meta_no_workingtree(self):
151
# Some format6 branches do not have checkout files. Upgrading
152
# such a branch to metadir must not setup a working tree.
153
self.build_tree_contents(_upgrade1_template)
154
upgrade('.', bzrdir.BzrDirFormat6())
155
transport = get_transport('.')
156
transport.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
157
self.assertFalse(transport.has('.bzr/stat-cache'))
158
# XXX: upgrade fails if a backup.bzr is already present
159
# -- David Allouche 2006-08-11
160
transport.delete_tree('backup.bzr')
161
# At this point, we have a format6 branch without checkout files.
162
upgrade('.', bzrdir.BzrDirMetaFormat1())
163
# The upgrade should not have set up a working tree.
164
control = bzrdir.BzrDir.open('.')
165
self.assertFalse(control.has_workingtree())
166
# We have covered the scope of this test, we may as well check that
167
# upgrade has not eaten our data, even if it's a bit redundant with
169
self.failUnless(isinstance(control._format, bzrdir.BzrDirMetaFormat1))
170
branch = control.open_branch()
171
self.assertEquals(branch.revision_history(),
172
['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
173
'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
175
def test_convert_branch5_branch6(self):
176
branch = self.make_branch('branch', format='knit')
177
branch.set_revision_history(['AB', 'CD'])
178
branch.set_parent('file:///EF')
179
branch.set_bound_location('file:///GH')
180
branch.set_push_location('file:///IJ')
181
target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
182
converter = branch.bzrdir._format.get_converter(target)
183
converter.convert(branch.bzrdir, progress.DummyProgress())
184
new_branch = _mod_branch.Branch.open(self.get_url('branch'))
185
self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6)
186
self.assertEqual('CD', new_branch.last_revision())
187
self.assertEqual('file:///EF', new_branch.get_parent())
188
self.assertEqual('file:///GH', new_branch.get_bound_location())
189
branch_config = new_branch.get_config()._get_branch_data_config()
190
self.assertEqual('file:///IJ',
191
branch_config.get_user_option('push_location'))
193
branch2 = self.make_branch('branch2', format='knit')
194
converter = branch2.bzrdir._format.get_converter(target)
195
converter.convert(branch2.bzrdir, progress.DummyProgress())
196
branch2 = _mod_branch.Branch.open(self.get_url('branch'))
197
self.assertIs(branch2.__class__, _mod_branch.BzrBranch6)
199
def test_convert_knit_dirstate_empty(self):
200
# test that asking for an upgrade from knit to dirstate works.
201
tree = self.make_branch_and_tree('tree', format='knit')
202
target = bzrdir.format_registry.make_bzrdir('dirstate')
203
converter = tree.bzrdir._format.get_converter(target)
204
converter.convert(tree.bzrdir, progress.DummyProgress())
205
new_tree = workingtree.WorkingTree.open('tree')
206
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
207
self.assertEqual('null:', new_tree.last_revision())
209
def test_convert_knit_dirstate_content(self):
210
# smoke test for dirstate conversion: we call dirstate primitives,
211
# and its there that the core logic is tested.
212
tree = self.make_branch_and_tree('tree', format='knit')
213
self.build_tree(['tree/file'])
214
tree.add(['file'], ['file-id'])
215
target = bzrdir.format_registry.make_bzrdir('dirstate')
216
converter = tree.bzrdir._format.get_converter(target)
217
converter.convert(tree.bzrdir, progress.DummyProgress())
218
new_tree = workingtree.WorkingTree.open('tree')
219
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
220
self.assertEqual('null:', new_tree.last_revision())
222
def test_convert_knit_one_parent_dirstate(self):
223
# test that asking for an upgrade from knit to dirstate works.
224
tree = self.make_branch_and_tree('tree', format='knit')
225
rev_id = tree.commit('first post')
226
target = bzrdir.format_registry.make_bzrdir('dirstate')
227
converter = tree.bzrdir._format.get_converter(target)
228
converter.convert(tree.bzrdir, progress.DummyProgress())
229
new_tree = workingtree.WorkingTree.open('tree')
230
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
231
self.assertEqual(rev_id, new_tree.last_revision())
232
for path in ['basis-inventory-cache', 'inventory', 'last-revision',
233
'pending-merges', 'stat-cache']:
234
self.failIfExists('tree/.bzr/checkout/' + path)
236
def test_convert_knit_merges_dirstate(self):
237
tree = self.make_branch_and_tree('tree', format='knit')
238
rev_id = tree.commit('first post')
239
merge_tree = tree.bzrdir.sprout('tree2').open_workingtree()
240
rev_id2 = tree.commit('second post')
241
rev_id3 = merge_tree.commit('second merge post')
242
tree.merge_from_branch(merge_tree.branch)
243
target = bzrdir.format_registry.make_bzrdir('dirstate')
244
converter = tree.bzrdir._format.get_converter(target)
245
converter.convert(tree.bzrdir, progress.DummyProgress())
246
new_tree = workingtree.WorkingTree.open('tree')
247
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
248
self.assertEqual(rev_id2, new_tree.last_revision())
249
self.assertEqual([rev_id2, rev_id3], new_tree.get_parent_ids())
250
for path in ['basis-inventory-cache', 'inventory', 'last-revision',
251
'pending-merges', 'stat-cache']:
252
self.failIfExists('tree/.bzr/checkout/' + path)
138
255
_upgrade1_template = \