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:
67
67
'mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd'])
68
68
rt = b.repository.revision_tree(rh[0])
69
69
foo_id = 'foo-20051004035605-91e788d1875603ae'
70
eq(rt.get_file_text(foo_id), 'initial contents\n')
72
eq(rt.get_file_text(foo_id), 'initial contents\n')
71
75
rt = b.repository.revision_tree(rh[1])
72
eq(rt.get_file_text(foo_id), 'new contents\n')
78
eq(rt.get_file_text(foo_id), 'new contents\n')
73
81
# check a backup was made:
74
transport = get_transport(b.base)
75
transport.stat('.bzr.backup')
76
transport.stat('.bzr.backup/README')
77
transport.stat('.bzr.backup/branch-format')
78
transport.stat('.bzr.backup/revision-history')
79
transport.stat('.bzr.backup/merged-patches')
80
transport.stat('.bzr.backup/pending-merged-patches')
81
transport.stat('.bzr.backup/pending-merges')
82
transport.stat('.bzr.backup/branch-name')
83
transport.stat('.bzr.backup/branch-lock')
84
transport.stat('.bzr.backup/inventory')
85
transport.stat('.bzr.backup/stat-cache')
86
transport.stat('.bzr.backup/text-store')
87
transport.stat('.bzr.backup/text-store/foo-20051004035611-1591048e9dc7c2d4.gz')
88
transport.stat('.bzr.backup/text-store/foo-20051004035756-4081373d897c3453.gz')
89
transport.stat('.bzr.backup/inventory-store/')
90
transport.stat('.bzr.backup/inventory-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
91
transport.stat('.bzr.backup/inventory-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
92
transport.stat('.bzr.backup/revision-store/')
93
transport.stat('.bzr.backup/revision-store/mbp@sourcefrog.net-20051004035611-176b16534b086b3c.gz')
94
transport.stat('.bzr.backup/revision-store/mbp@sourcefrog.net-20051004035756-235f2b7dcdddd8dd.gz')
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')
96
105
def test_upgrade_with_ghosts(self):
97
106
"""Upgrade v0.0.4 tree containing ghost references.
99
108
That is, some of the parents of revisions mentioned in the branch
100
aren't present in the branch's storage.
109
aren't present in the branch's storage.
102
This shouldn't normally happen in branches created entirely in
111
This shouldn't normally happen in branches created entirely in
103
112
bzr, but can happen in branches imported from baz and arch, or from
104
other systems, where the importer knows about a revision but not
113
other systems, where the importer knows about a revision but not
106
115
eq = self.assertEquals
107
116
self.build_tree_contents(_ghost_template)
117
126
old_repodir = bzrlib.bzrdir.BzrDir.open_unsupported('.')
118
127
old_repo_format = old_repodir.open_repository()._format
120
# this is the path to the literal file. As format changes
129
# this is the path to the literal file. As format changes
121
130
# occur it needs to be updated. FIXME: ask the store for the
123
132
repo = bzrlib.repository.Repository.open('.')
124
133
# it should have changed the format
125
134
self.assertNotEqual(old_repo_format.__class__, repo._format.__class__)
126
# 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
127
136
# 'dir-20051005095101-da1441ea3fa6917a'
130
repo.text_store.get_weave(
131
'dir-20051005095101-da1441ea3fa6917a',
132
repo.get_transaction()))
138
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)
134
144
def test_upgrade_to_meta_sets_workingtree_last_revision(self):
135
145
self.build_tree_contents(_upgrade_dir_template)
143
153
# such a branch to metadir must not setup a working tree.
144
154
self.build_tree_contents(_upgrade1_template)
145
155
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
156
t = transport.get_transport('.')
157
t.delete_multi(['.bzr/pending-merges', '.bzr/inventory'])
158
self.assertFalse(t.has('.bzr/stat-cache'))
159
# XXX: upgrade fails if a backup.bzr is already present
150
160
# -- David Allouche 2006-08-11
151
transport.delete_tree('.bzr.backup')
161
t.delete_tree('backup.bzr.~1~')
152
162
# At this point, we have a format6 branch without checkout files.
153
163
upgrade('.', bzrdir.BzrDirMetaFormat1())
154
164
# The upgrade should not have set up a working tree.
184
199
branch2 = self.make_branch('branch2', format='knit')
185
200
converter = branch2.bzrdir._format.get_converter(target)
186
converter.convert(branch2.bzrdir, progress.DummyProgress())
201
converter.convert(branch2.bzrdir, None)
187
202
branch2 = _mod_branch.Branch.open(self.get_url('branch'))
188
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())
190
215
def test_convert_knit_dirstate_empty(self):
191
216
# test that asking for an upgrade from knit to dirstate works.
192
217
tree = self.make_branch_and_tree('tree', format='knit')
193
218
target = bzrdir.format_registry.make_bzrdir('dirstate')
194
219
converter = tree.bzrdir._format.get_converter(target)
195
converter.convert(tree.bzrdir, progress.DummyProgress())
220
converter.convert(tree.bzrdir, None)
196
221
new_tree = workingtree.WorkingTree.open('tree')
197
222
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
198
self.assertEqual(None, new_tree.last_revision())
223
self.assertEqual('null:', new_tree.last_revision())
200
225
def test_convert_knit_dirstate_content(self):
201
226
# smoke test for dirstate conversion: we call dirstate primitives,
205
230
tree.add(['file'], ['file-id'])
206
231
target = bzrdir.format_registry.make_bzrdir('dirstate')
207
232
converter = tree.bzrdir._format.get_converter(target)
208
converter.convert(tree.bzrdir, progress.DummyProgress())
233
converter.convert(tree.bzrdir, None)
209
234
new_tree = workingtree.WorkingTree.open('tree')
210
235
self.assertIs(new_tree.__class__, workingtree_4.WorkingTree4)
211
self.assertEqual(None, new_tree.last_revision())
236
self.assertEqual('null:', new_tree.last_revision())
213
238
def test_convert_knit_one_parent_dirstate(self):
214
239
# test that asking for an upgrade from knit to dirstate works.
248
273
('foo', 'new contents\n'),
251
'This is a Bazaar-NG control directory.\nDo not change any files in this directory.\n'),
276
'This is a Bazaar control directory.\n'
277
'Do not change any files in this directory.\n'
278
'See http://bazaar-vcs.org/ for more information about Bazaar.\n'),
252
279
('.bzr/branch-format', 'Bazaar-NG branch, format 0.0.4\n'),
253
280
('.bzr/revision-history',
254
281
'mbp@sourcefrog.net-20051004035611-176b16534b086b3c\n'