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
t = transport.get_transport(b.base)
85
t.stat(backup_dir + '/README')
86
t.stat(backup_dir + '/branch-format')
87
t.stat(backup_dir + '/revision-history')
88
t.stat(backup_dir + '/merged-patches')
89
t.stat(backup_dir + '/pending-merged-patches')
90
t.stat(backup_dir + '/pending-merges')
91
t.stat(backup_dir + '/branch-name')
92
t.stat(backup_dir + '/branch-lock')
93
t.stat(backup_dir + '/inventory')
94
t.stat(backup_dir + '/stat-cache')
95
t.stat(backup_dir + '/text-store')
96
t.stat(backup_dir + '/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
97
t.stat(backup_dir + '/text-store/foo-20051004035756-4081373d897c3453.gz')
98
t.stat(backup_dir + '/inventory-store/')
99
t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
100
t.stat(backup_dir + '/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
101
t.stat(backup_dir + '/revision-store/')
102
t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
103
t.stat(backup_dir + '/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
82
transport = get_transport(b.base)
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)
139
text_keys = repo.texts.keys()
140
dir_keys = [key for key in text_keys if key[0] ==
141
'dir-20051005095101-da1441ea3fa6917a']
142
self.assertNotEqual([], dir_keys)
140
repo.weave_store.get_weave(
141
'dir-20051005095101-da1441ea3fa6917a',
142
repo.get_transaction()).versions())
144
144
def test_upgrade_to_meta_sets_workingtree_last_revision(self):
145
145
self.build_tree_contents(_upgrade_dir_template)
153
153
# such a branch to metadir must not setup a working tree.
154
154
self.build_tree_contents(_upgrade1_template)
155
155
upgrade('.', bzrdir.BzrDirFormat6())
156
t = transport.get_transport('.')
157
t.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
158
self.assertFalse(t.has('.bzr/stat-cache'))
156
transport = get_transport('.')
157
transport.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
158
assert not transport.has('.bzr/stat-cache')
159
159
# XXX: upgrade fails if a backup.bzr is already present
160
160
# -- David Allouche 2006-08-11
161
t.delete_tree('backup.bzr.~1~')
161
transport.delete_tree('backup.bzr')
162
162
# At this point, we have a format6 branch without checkout files.
163
163
upgrade('.', bzrdir.BzrDirMetaFormat1())
164
164
# The upgrade should not have set up a working tree.
173
173
['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
174
174
'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
176
def test_convert_branch5_branch6(self):
182
177
branch = self.make_branch('branch', format='knit')
183
178
branch.set_revision_history(['AB', 'CD'])
186
181
branch.set_push_location('file:///IJ')
187
182
target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
188
183
converter = branch.bzrdir._format.get_converter(target)
189
converter.convert(branch.bzrdir, None)
184
converter.convert(branch.bzrdir, progress.DummyProgress())
190
185
new_branch = _mod_branch.Branch.open(self.get_url('branch'))
191
186
self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6)
192
187
self.assertEqual('CD', new_branch.last_revision())
199
194
branch2 = self.make_branch('branch2', format='knit')
200
195
converter = branch2.bzrdir._format.get_converter(target)
201
converter.convert(branch2.bzrdir, None)
196
converter.convert(branch2.bzrdir, progress.DummyProgress())
202
197
branch2 = _mod_branch.Branch.open(self.get_url('branch'))
203
198
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
200
def test_convert_knit_dirstate_empty(self):
216
201
# test that asking for an upgrade from knit to dirstate works.
217
202
tree = self.make_branch_and_tree('tree', format='knit')
218
203
target = bzrdir.format_registry.make_bzrdir('dirstate')
219
204
converter = tree.bzrdir._format.get_converter(target)
220
converter.convert(tree.bzrdir, None)
205
converter.convert(tree.bzrdir, progress.DummyProgress())
221
206
new_tree = workingtree.WorkingTree.open('tree')
222
207
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
223
208
self.assertEqual('null:', new_tree.last_revision())
230
215
tree.add(['file'], ['file-id'])
231
216
target = bzrdir.format_registry.make_bzrdir('dirstate')
232
217
converter = tree.bzrdir._format.get_converter(target)
233
converter.convert(tree.bzrdir, None)
218
converter.convert(tree.bzrdir, progress.DummyProgress())
234
219
new_tree = workingtree.WorkingTree.open('tree')
235
220
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
236
221
self.assertEqual('null:', new_tree.last_revision())
241
226
rev_id = tree.commit('first post')
242
227
target = bzrdir.format_registry.make_bzrdir('dirstate')
243
228
converter = tree.bzrdir._format.get_converter(target)
244
converter.convert(tree.bzrdir, None)
229
converter.convert(tree.bzrdir, progress.DummyProgress())
245
230
new_tree = workingtree.WorkingTree.open('tree')
246
231
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
247
232
self.assertEqual(rev_id, new_tree.last_revision())
258
243
tree.merge_from_branch(merge_tree.branch)
259
244
target = bzrdir.format_registry.make_bzrdir('dirstate')
260
245
converter = tree.bzrdir._format.get_converter(target)
261
converter.convert(tree.bzrdir, None)
246
converter.convert(tree.bzrdir, progress.DummyProgress())
262
247
new_tree = workingtree.WorkingTree.open('tree')
263
248
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
264
249
self.assertEqual(rev_id2, new_tree.last_revision())