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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
15
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 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~'
82
83
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')
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')
104
105
def test_upgrade_with_ghosts(self):
105
106
"""Upgrade v0.0.4 tree containing ghost references.
107
108
That is, some of the parents of revisions mentioned in the branch
108
aren't present in the branch's storage.
109
aren't present in the branch's storage.
110
This shouldn't normally happen in branches created entirely in
111
This shouldn't normally happen in branches created entirely in
111
112
bzr, but can happen in branches imported from baz and arch, or from
112
other systems, where the importer knows about a revision but not
113
other systems, where the importer knows about a revision but not
114
115
eq = self.assertEquals
115
116
self.build_tree_contents(_ghost_template)
125
126
old_repodir = bzrlib.bzrdir.BzrDir.open_unsupported('.')
126
127
old_repo_format = old_repodir.open_repository()._format
128
# this is the path to the literal file. As format changes
129
# this is the path to the literal file. As format changes
129
130
# occur it needs to be updated. FIXME: ask the store for the
131
132
repo = bzrlib.repository.Repository.open('.')
132
133
# it should have changed the format
133
134
self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
134
# and we should be able to read the names for the file id
135
# and we should be able to read the names for the file id
135
136
# 'dir-20051005095101-da1441ea3fa6917a'
137
138
self.addCleanup(repo.unlock)
157
158
self.assertFalse(transport.has('.bzr/stat-cache'))
158
159
# XXX: upgrade fails if a backup.bzr is already present
159
160
# -- David Allouche 2006-08-11
160
transport.delete_tree('backup.bzr')
161
transport.delete_tree('backup.bzr.~1~')
161
162
# At this point, we have a format6 branch without checkout files.
162
163
upgrade('.', bzrdir.BzrDirMetaFormat1())
163
164
# The upgrade should not have set up a working tree.
172
173
['mbp@sourcefrog.net-20051004035611-176b16534b086b3c',
173
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')
175
181
def test_convert_branch5_branch6(self):
176
182
branch = self.make_branch('branch', format='knit')
177
183
branch.set_revision_history(['AB', 'CD'])
180
186
branch.set_push_location('file:///IJ')
181
187
target = bzrdir.format_registry.make_bzrdir('dirstate-with-subtree')
182
188
converter = branch.bzrdir._format.get_converter(target)
183
converter.convert(branch.bzrdir, progress.DummyProgress())
189
converter.convert(branch.bzrdir, None)
184
190
new_branch = _mod_branch.Branch.open(self.get_url('branch'))
185
191
self.assertIs(new_branch.__class__, _mod_branch.BzrBranch6)
186
192
self.assertEqual('CD', new_branch.last_revision())
193
199
branch2 = self.make_branch('branch2', format='knit')
194
200
converter = branch2.bzrdir._format.get_converter(target)
195
converter.convert(branch2.bzrdir, progress.DummyProgress())
201
converter.convert(branch2.bzrdir, None)
196
202
branch2 = _mod_branch.Branch.open(self.get_url('branch'))
197
203
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())
199
215
def test_convert_knit_dirstate_empty(self):
200
216
# test that asking for an upgrade from knit to dirstate works.
201
217
tree = self.make_branch_and_tree('tree', format='knit')
202
218
target = bzrdir.format_registry.make_bzrdir('dirstate')
203
219
converter = tree.bzrdir._format.get_converter(target)
204
converter.convert(tree.bzrdir, progress.DummyProgress())
220
converter.convert(tree.bzrdir, None)
205
221
new_tree = workingtree.WorkingTree.open('tree')
206
222
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
207
223
self.assertEqual('null:', new_tree.last_revision())
214
230
tree.add(['file'], ['file-id'])
215
231
target = bzrdir.format_registry.make_bzrdir('dirstate')
216
232
converter = tree.bzrdir._format.get_converter(target)
217
converter.convert(tree.bzrdir, progress.DummyProgress())
233
converter.convert(tree.bzrdir, None)
218
234
new_tree = workingtree.WorkingTree.open('tree')
219
235
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
220
236
self.assertEqual('null:', new_tree.last_revision())
225
241
rev_id = tree.commit('first post')
226
242
target = bzrdir.format_registry.make_bzrdir('dirstate')
227
243
converter = tree.bzrdir._format.get_converter(target)
228
converter.convert(tree.bzrdir, progress.DummyProgress())
244
converter.convert(tree.bzrdir, None)
229
245
new_tree = workingtree.WorkingTree.open('tree')
230
246
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
231
247
self.assertEqual(rev_id, new_tree.last_revision())
242
258
tree.merge_from_branch(merge_tree.branch)
243
259
target = bzrdir.format_registry.make_bzrdir('dirstate')
244
260
converter = tree.bzrdir._format.get_converter(target)
245
converter.convert(tree.bzrdir, progress.DummyProgress())
261
converter.convert(tree.bzrdir, None)
246
262
new_tree = workingtree.WorkingTree.open('tree')
247
263
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
248
264
self.assertEqual(rev_id2, new_tree.last_revision())