~maxb/bzr-svn/fetch-svn-rev-info-progress-bar

« back to all changes in this revision

Viewing changes to tests/test_upgrade.py

  • Committer: Max Bowsher
  • Date: 2010-07-30 22:50:54 UTC
  • mfrom: (3324.1.37 trunk)
  • Revision ID: maxb@f2s.com-20100730225054-un1llcngdofg585w
Merge trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# Copyright (C) 2007-2009 Jelmer Vernooij <jelmer@samba.org>
2
 
 
3
 
# This program is free software; you can redistribute it and/or modify
4
 
# it under the terms of the GNU General Public License as published by
5
 
# the Free Software Foundation; either version 2 of the License, or
6
 
# (at your option) any later version.
7
 
 
8
 
# This program is distributed in the hope that it will be useful,
9
 
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
 
# GNU General Public License for more details.
12
 
 
13
 
# You should have received a copy of the GNU General Public License
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
16
 
 
17
 
"""Mapping upgrade tests."""
18
 
 
19
 
from bzrlib.bzrdir import (
20
 
    BzrDir,
21
 
    )
22
 
from bzrlib.errors import (
23
 
    IncompatibleAPI,
24
 
    )
25
 
from bzrlib.repository import (
26
 
    Repository,
27
 
    )
28
 
from bzrlib.tests import (
29
 
    TestCase,
30
 
    TestSkipped,
31
 
    )
32
 
 
33
 
from bzrlib.plugins.svn.layout.standard import (
34
 
    RootLayout,
35
 
    )
36
 
from bzrlib.plugins.svn.mapping import (
37
 
    foreign_vcs_svn,
38
 
    )
39
 
from bzrlib.plugins.svn.mapping3.base import (
40
 
    BzrSvnMappingv3,
41
 
    )
42
 
from bzrlib.plugins.svn.mapping3.scheme import (
43
 
    TrunkBranchingScheme,
44
 
    )
45
 
from bzrlib.plugins.svn.tests import (
46
 
    SubversionTestCase,
47
 
    )
48
 
 
49
 
 
50
 
def import_upgrade():
51
 
    try:
52
 
        try:
53
 
            from bzrlib.plugins.rewrite import upgrade
54
 
        except ImportError:
55
 
            from bzrlib.plugins.rebase import upgrade
56
 
    except IncompatibleAPI, e:
57
 
        raise TestSkipped(str(e))
58
 
    except ImportError, e:
59
 
        raise TestSkipped(str(e))
60
 
    return upgrade
61
 
 
62
 
 
63
 
class UpgradeTests(SubversionTestCase):
64
 
 
65
 
    def test_no_custom(self):
66
 
        upgrade = import_upgrade()
67
 
        repos_url = self.make_repository("a")
68
 
 
69
 
        dc = self.get_commit_editor(repos_url)
70
 
        dc.add_file("a").modify("b")
71
 
        dc.close()
72
 
 
73
 
        oldrepos = Repository.open(repos_url)
74
 
        oldrepos.set_layout(RootLayout())
75
 
        dir = BzrDir.create("f")
76
 
        newrepos = dir.create_repository()
77
 
        oldrepos.copy_content_into(newrepos)
78
 
        dir.create_branch()
79
 
        wt = dir.create_workingtree()
80
 
        file("f/a","w").write("b")
81
 
        wt.add("a")
82
 
        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
83
 
 
84
 
        self.assertTrue(newrepos.has_revision("svn-v1:1@%s-" % oldrepos.uuid))
85
 
 
86
 
        mapping = oldrepos.get_mapping()
87
 
        upgrade.upgrade_repository(newrepos, oldrepos, new_mapping=mapping, allow_changes=True)
88
 
 
89
 
        self.assertTrue(newrepos.has_revision(oldrepos.generate_revision_id(1, "", mapping)))
90
 
 
91
 
    def test_single_custom(self):
92
 
        upgrade = import_upgrade()
93
 
        repos_url = self.make_repository("a")
94
 
 
95
 
        dc = self.get_commit_editor(repos_url)
96
 
        dc.add_file("a").modify("b")
97
 
        dc.close()
98
 
 
99
 
        oldrepos = Repository.open(repos_url)
100
 
        oldrepos.set_layout(RootLayout())
101
 
        dir = BzrDir.create("f")
102
 
        newrepos = dir.create_repository()
103
 
        oldrepos.copy_content_into(newrepos)
104
 
        dir.create_branch()
105
 
        wt = dir.create_workingtree()
106
 
        file("f/a", "w").write("b")
107
 
        wt.add("a")
108
 
        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
109
 
        file("f/a", 'w').write("moredata")
110
 
        wt.commit(message='fix moredata', rev_id="customrev")
111
 
 
112
 
        mapping = oldrepos.get_mapping()
113
 
        upgrade.upgrade_repository(newrepos, oldrepos, new_mapping=mapping, allow_changes=True)
114
 
 
115
 
        self.assertTrue(newrepos.has_revision(oldrepos.generate_revision_id(1, "", mapping)))
116
 
        self.assertTrue(newrepos.has_revision("customrev%s-upgrade" % mapping.upgrade_suffix))
117
 
        newrepos.lock_read()
118
 
        self.assertTrue((oldrepos.generate_revision_id(1, "", mapping),),
119
 
                        tuple(newrepos.get_revision("customrev%s-upgrade" % mapping.upgrade_suffix).parent_ids))
120
 
        newrepos.unlock()
121
 
 
122
 
    def test_single_keep_parent_fileid(self):
123
 
        upgrade = import_upgrade()
124
 
        repos_url = self.make_repository("a")
125
 
 
126
 
        dc = self.get_commit_editor(repos_url)
127
 
        dc.add_file("a").modify("b")
128
 
        dc.close()
129
 
 
130
 
        oldrepos = Repository.open(repos_url)
131
 
        oldrepos.set_layout(RootLayout())
132
 
        dir = BzrDir.create("f")
133
 
        newrepos = dir.create_repository()
134
 
        oldrepos.copy_content_into(newrepos)
135
 
        dir.create_branch()
136
 
        wt = dir.create_workingtree()
137
 
        file("f/a", "w").write("b")
138
 
        wt.add(["a"], ["someid"])
139
 
        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
140
 
        wt.rename_one("a", "b")
141
 
        file("f/a", 'w').write("moredata")
142
 
        wt.add(["a"], ["specificid"])
143
 
        wt.commit(message='fix moredata', rev_id="customrev")
144
 
 
145
 
        mapping = oldrepos.get_mapping()
146
 
        upgrade.upgrade_repository(newrepos, oldrepos, new_mapping=mapping, allow_changes=True)
147
 
        tree = newrepos.revision_tree("customrev%s-upgrade" % mapping.upgrade_suffix)
148
 
        self.assertEqual("specificid", tree.inventory.path2id("a"))
149
 
        self.assertEqual(mapping.generate_file_id((oldrepos.uuid, "", 1), u"a"), 
150
 
                         tree.inventory.path2id("b"))
151
 
 
152
 
    def test_single_custom_continue(self):
153
 
        upgrade = import_upgrade()
154
 
        repos_url = self.make_repository("a")
155
 
 
156
 
        dc = self.get_commit_editor(repos_url)
157
 
        dc.add_file("a").modify("b")
158
 
        dc.add_file("b").modify("c")
159
 
        dc.close()
160
 
 
161
 
        oldrepos = Repository.open(repos_url)
162
 
        oldrepos.set_layout(RootLayout())
163
 
        dir = BzrDir.create("f")
164
 
        newrepos = dir.create_repository()
165
 
        oldrepos.copy_content_into(newrepos)
166
 
        dir.create_branch()
167
 
        wt = dir.create_workingtree()
168
 
        file("f/a", "w").write("b")
169
 
        file("f/b", "w").write("c")
170
 
        wt.add("a")
171
 
        wt.add("b")
172
 
        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
173
 
        file("f/a", 'w').write("moredata")
174
 
        file("f/b", 'w').write("moredata")
175
 
        wt.commit(message='fix moredata', rev_id="customrev")
176
 
 
177
 
        tree = newrepos.revision_tree("svn-v1:1@%s-" % oldrepos.uuid)
178
 
 
179
 
        newrepos.lock_write()
180
 
        newrepos.start_write_group()
181
 
 
182
 
        mapping = oldrepos.get_mapping()
183
 
        fileid = tree.inventory.path2id("a")
184
 
        revid = "customrev%s-upgrade" % mapping.upgrade_suffix
185
 
        newrepos.texts.add_lines((fileid, revid), 
186
 
                [(fileid, "svn-v1:1@%s-" % oldrepos.uuid)],
187
 
                tree.get_file(fileid).readlines())
188
 
 
189
 
        newrepos.commit_write_group()
190
 
        newrepos.unlock()
191
 
 
192
 
        upgrade.upgrade_repository(newrepos, oldrepos, new_mapping=mapping, 
193
 
                           allow_changes=True)
194
 
 
195
 
        self.assertTrue(newrepos.has_revision(oldrepos.generate_revision_id(1, "", mapping)))
196
 
        self.assertTrue(newrepos.has_revision("customrev%s-upgrade" % mapping.upgrade_suffix))
197
 
        newrepos.lock_read()
198
 
        self.assertTrue((oldrepos.generate_revision_id(1, "", mapping),),
199
 
                        tuple(newrepos.get_revision("customrev%s-upgrade" % mapping.upgrade_suffix).parent_ids))
200
 
        newrepos.unlock()
201
 
 
202
 
    def test_more_custom(self):
203
 
        upgrade = import_upgrade()
204
 
        repos_url = self.make_repository("a")
205
 
 
206
 
        dc = self.get_commit_editor(repos_url)
207
 
        dc.add_file("a").modify("b")
208
 
        dc.close()
209
 
 
210
 
        oldrepos = Repository.open(repos_url)
211
 
        oldrepos.set_layout(RootLayout())
212
 
        dir = BzrDir.create("f")
213
 
        newrepos = dir.create_repository()
214
 
        dir.create_branch()
215
 
        wt = dir.create_workingtree()
216
 
        file("f/a", "w").write("b")
217
 
        wt.add("a")
218
 
        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
219
 
        file("f/a", 'w').write("moredata")
220
 
        wt.commit(message='fix moredata', rev_id="customrev")
221
 
        file("f/a", 'w').write("blackfield")
222
 
        wt.commit(message='fix it again', rev_id="anotherrev")
223
 
 
224
 
        mapping = oldrepos.get_mapping()
225
 
        renames = upgrade.upgrade_repository(newrepos, oldrepos,
226
 
            new_mapping=mapping, allow_changes=True)
227
 
        self.assertEqual({
228
 
            'svn-v1:1@%s-' % oldrepos.uuid: mapping.revision_id_foreign_to_bzr((oldrepos.uuid, "", 1)),
229
 
            "customrev": "customrev%s-upgrade" % mapping.upgrade_suffix,
230
 
            "anotherrev": "anotherrev%s-upgrade" % mapping.upgrade_suffix},
231
 
            renames)
232
 
 
233
 
        self.assertTrue(newrepos.has_revision(oldrepos.generate_revision_id(1, "", mapping)))
234
 
        self.assertTrue(newrepos.has_revision("customrev%s-upgrade" % mapping.upgrade_suffix))
235
 
        self.assertTrue(newrepos.has_revision("anotherrev%s-upgrade" % mapping.upgrade_suffix))
236
 
        newrepos.lock_read()
237
 
        self.assertTrue((oldrepos.generate_revision_id(1, "", mapping),),
238
 
                        tuple(newrepos.get_revision("customrev%s-upgrade" % mapping.upgrade_suffix).parent_ids))
239
 
        self.assertTrue(("customrev-%s-upgrade" % mapping.upgrade_suffix,),
240
 
                        tuple(newrepos.get_revision("anotherrev%s-upgrade" % mapping.upgrade_suffix).parent_ids))
241
 
        newrepos.unlock()
242
 
 
243
 
    def test_more_custom_branch(self):
244
 
        upgrade = import_upgrade()
245
 
        repos_url = self.make_repository("a")
246
 
 
247
 
        dc = self.get_commit_editor(repos_url)
248
 
        dc.add_file("a").modify("b")
249
 
        dc.close()
250
 
 
251
 
        oldrepos = Repository.open(repos_url)
252
 
        oldrepos.set_layout(RootLayout())
253
 
        dir = BzrDir.create("f")
254
 
        newrepos = dir.create_repository()
255
 
        b = dir.create_branch()
256
 
        wt = dir.create_workingtree()
257
 
        file("f/a", "w").write("b")
258
 
        wt.add("a")
259
 
        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
260
 
        file("f/a", 'w').write("moredata")
261
 
        wt.commit(message='fix moredata', rev_id="customrev")
262
 
        file("f/a", 'w').write("blackfield")
263
 
        wt.commit(message='fix it again', rev_id="anotherrev")
264
 
 
265
 
        upgrade.upgrade_branch(b, oldrepos, new_mapping=oldrepos.get_mapping(), allow_changes=True)
266
 
        mapping = oldrepos.get_mapping()
267
 
        self.assertEqual([oldrepos.generate_revision_id(0, "", mapping),
268
 
                          oldrepos.generate_revision_id(1, "", mapping),
269
 
                          "customrev%s-upgrade" % mapping.upgrade_suffix,
270
 
                          "anotherrev%s-upgrade" % mapping.upgrade_suffix
271
 
                          ], b.revision_history())
272
 
 
273
 
    def test_workingtree(self):
274
 
        upgrade = import_upgrade()
275
 
        repos_url = self.make_repository("a")
276
 
 
277
 
        dc = self.get_commit_editor(repos_url)
278
 
        dc.add_file("a").modify("b")
279
 
        dc.close()
280
 
 
281
 
        oldrepos = Repository.open(repos_url)
282
 
        oldrepos.set_layout(RootLayout())
283
 
        dir = BzrDir.create("f")
284
 
        newrepos = dir.create_repository()
285
 
        b = dir.create_branch()
286
 
        wt = dir.create_workingtree()
287
 
        file("f/a", "w").write("b")
288
 
        wt.add("a")
289
 
        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
290
 
        file("f/a", 'w').write("moredata")
291
 
        wt.commit(message='fix moredata', rev_id="customrev")
292
 
        file("f/a", 'w').write("blackfield")
293
 
        wt.commit(message='fix it again', rev_id="anotherrev")
294
 
 
295
 
        mapping = oldrepos.get_mapping()
296
 
        upgrade.upgrade_workingtree(wt, oldrepos, new_mapping=mapping, 
297
 
                allow_changes=True)
298
 
        self.assertEquals(wt.last_revision(), b.last_revision())
299
 
        self.assertEqual([oldrepos.generate_revision_id(0, "", mapping),
300
 
                          oldrepos.generate_revision_id(1, "", mapping),
301
 
                          "customrev%s-upgrade" % mapping.upgrade_suffix,
302
 
                          "anotherrev%s-upgrade" % mapping.upgrade_suffix
303
 
                          ], b.revision_history())
304
 
 
305
 
    def test_branch_none(self):
306
 
        upgrade = import_upgrade()
307
 
        repos_url = self.make_repository("a")
308
 
 
309
 
        dc = self.get_commit_editor(repos_url)
310
 
        dc.add_file("a").modify("b")
311
 
        dc.close()
312
 
 
313
 
        oldrepos = Repository.open(repos_url)
314
 
        dir = BzrDir.create("f")
315
 
        dir.create_repository()
316
 
        b = dir.create_branch()
317
 
        wt = dir.create_workingtree()
318
 
        file("f/a", "w").write("b")
319
 
        wt.add("a")
320
 
        wt.commit(message="data", rev_id="blarev")
321
 
        file("f/a", 'w').write("moredata")
322
 
        wt.commit(message='fix moredata', rev_id="customrev")
323
 
        file("f/a", 'w').write("blackfield")
324
 
        wt.commit(message='fix it again', rev_id="anotherrev")
325
 
 
326
 
        upgrade.upgrade_branch(b, oldrepos, new_mapping=oldrepos.get_mapping())
327
 
        self.assertEqual(["blarev", "customrev", "anotherrev"],
328
 
                b.revision_history())
329
 
 
330
 
    def test_raise_incompat(self):
331
 
        upgrade = import_upgrade()
332
 
        repos_url = self.make_repository("a")
333
 
 
334
 
        dc = self.get_commit_editor(repos_url)
335
 
        dc.add_file("d").modify("e")
336
 
        dc.close()
337
 
 
338
 
        oldrepos = Repository.open(repos_url)
339
 
        oldrepos.set_layout(RootLayout())
340
 
        dir = BzrDir.create("f")
341
 
        dir.create_repository()
342
 
        b = dir.create_branch()
343
 
        wt = dir.create_workingtree()
344
 
        file("f/a", "w").write("c")
345
 
        wt.add("a")
346
 
        wt.commit(message="data", rev_id="svn-v1:1@%s-" % oldrepos.uuid)
347
 
 
348
 
        self.assertRaises(upgrade.UpgradeChangesContent, lambda: upgrade.upgrade_branch(b, oldrepos, new_mapping=oldrepos.get_mapping()))
349
 
 
350
 
 
351
 
class TestGenerateUpdateMapTests(TestCase):
352
 
 
353
 
    def test_nothing(self):
354
 
        upgrade = import_upgrade()
355
 
        self.assertEquals({}, upgrade.generate_upgrade_map(["bla", "bloe"], foreign_vcs_svn, BzrSvnMappingv3(TrunkBranchingScheme()).revision_id_foreign_to_bzr))
356
 
 
357
 
    def test_v2_to_v3(self):
358
 
        upgrade = import_upgrade()
359
 
        self.assertEquals({"svn-v2:12@65390229-12b7-0310-b90b-f21a5aa7ec8e-trunk": "svn-v3-trunk0:65390229-12b7-0310-b90b-f21a5aa7ec8e:trunk:12"}, upgrade.generate_upgrade_map(["svn-v2:12@65390229-12b7-0310-b90b-f21a5aa7ec8e-trunk", "bloe", "blaaa"], foreign_vcs_svn, BzrSvnMappingv3(TrunkBranchingScheme()).revision_id_foreign_to_bzr))