25
25
from bzrlib.plugins.bzrtools.baz_import import (import_version, revision_id,
26
cmd_baz_import, make_archive)
27
27
from bzrlib.errors import NoSuchRevision
29
29
from StringIO import StringIO
31
31
from testresources import (TestResource, TestLoader, OptimisingTestSuite,
33
34
from bzrlib.plugins.bzrtools.fai import namespace_previous
34
35
from bzrlib.branch import Branch
38
return OptimisingTestSuite()
39
from unittest import TestSuite
39
41
return TestLoader().loadTestsFromName(__name__)
82
84
# tree, two commits, includes merge of other branch
83
85
self._empty_merged_tag_2 = 'demo@DONOTUSE/c--empty-tag-2--0'
84
self._empty_merged_tag_2_bzr_base = revision_id(self._empty_merged_tag_2 + '--base-0')
85
self._empty_merged_tag_2_bzr = revision_id(self._empty_merged_tag_2 + '--patch-1')
86
self._empty_merged_tag_2_bzr_base = revision_id(
87
self._empty_merged_tag_2 + '--base-0')
88
self._empty_merged_tag_2_bzr = revision_id(
89
self._empty_merged_tag_2 + '--patch-1')
86
90
pybaz.Revision('demo@DONOTUSE/c--import--0--base-0').make_continuation(
87
91
pybaz.Version(self._empty_merged_tag_2))
88
92
tree = pybaz.Revision(self._empty_merged_tag_2 + '--base-0').get (
102
106
tree = pybaz.Revision(self._bad_id_tag + '--base-0').get(
103
107
os.path.join(self._tmpdir, 'tree'))
104
108
from bzrlib.plugins.bzrtools.baz_import import add_file
105
add_file(os.path.join(self._tmpdir,'tree/path'), 'text', 'this_id/needs%escaping')
109
add_file(os.path.join(self._tmpdir,'tree/path'), 'text',
110
'this_id/needs%escaping')
106
111
msg = tree.log_message()
107
112
msg["summary"] = "commit something which needs escaping."
111
116
self.make_import_symlink()
112
117
self.make_missing_ancestor()
118
self.make_inbranch_continuation()
114
120
def make_import_symlink(self):
115
121
self._import_symlink = 'demo@DONOTUSE/c--import-symlink--0'
116
self._import_symlink_bzr = revision_id(self._import_symlink + '--base-0')
122
self._import_symlink_bzr = revision_id(
123
self._import_symlink + '--base-0')
117
124
os.mkdir(os.path.join(self._tmpdir, 'tree'))
118
125
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'),
119
126
self._import_symlink)
131
138
def make_empty_import(self):
132
139
self._import = 'demo@DONOTUSE/c--import--0'
133
140
os.mkdir(os.path.join(self._tmpdir, 'tree'))
134
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'), self._import)
141
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'),
135
143
msg = tree.log_message()
136
144
msg["summary"] = "I am importing now"
137
145
tree.import_(msg)
140
148
def make_missing_ancestor(self):
141
149
self._archivegoneroot = os.path.join(self._tmpdir, 'archivegone')
142
self._archive = pybaz.make_archive('demo-gone@DONOTUSE',
143
str(self._archivegoneroot))
150
self._archive = make_archive('demo-gone@DONOTUSE',
151
str(self._archivegoneroot))
144
152
self._missing_import = 'demo-gone@DONOTUSE/c--import--0'
145
153
self._missing_import_bzr = revision_id(self._missing_import
173
181
# and make it inaccessible
174
182
pybaz.Archive('demo-gone@DONOTUSE').unregister()
184
def make_inbranch_continuation(self):
185
self._inbranch_tag = 'demo@DONOTUSE/c--inbranch-tag--0'
186
self._inbranch_tag_base = self._inbranch_tag + '--base-0'
187
self._inbranch_tag_base_bzr = revision_id(self._inbranch_tag_base)
188
pybaz.Revision('demo@DONOTUSE/c--import--0--base-0').make_continuation(
189
pybaz.Version(self._inbranch_tag))
190
self._inbranch_tag_head = self._inbranch_tag + '--patch-1'
191
self._inbranch_tag_head_bzr = revision_id(self._inbranch_tag_head)
192
pybaz.Revision(self._inbranch_tag_base).make_continuation(
193
pybaz.Version(self._inbranch_tag))
177
196
def _makeResource(self):
178
197
return BazTreeResource()
201
220
self.output.write("\n")
203
222
def test_import_empty(self):
204
import_version('output', pybaz.Version(self._baz._import), self.collect)
223
import_version('output', pybaz.Version(self._baz._import),
205
225
# expected results:
206
# one commit, no files, revision identifier of 'demo@DONOTUSE_c--import--0--base-0'
226
# one commit, no files, revision identifier of
227
# 'demo@DONOTUSE_c--import--0--base-0'
207
228
branch = Branch.open('output')
229
repo = branch.repository
208
230
self.assertEqual(branch.revision_history(),
209
231
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
210
rev = branch.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
232
rev = repo.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
212
234
import_version('output2', pybaz.Version('demo@DONOTUSE/c--import--0'),
214
236
branch2 = Branch.open('output2')
237
repo2 = branch2.repository
215
238
self.assertEqual(branch.revision_history(), branch2.revision_history())
216
rev2 = branch2.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
239
rev2 = repo2.get_revision('Arch-1:demo@DONOTUSE%c--import--0--base-0')
217
240
# they must be the same
218
241
self.assertEqual(rev, rev2)
234
257
self.assertEqual(branch.revision_history(),
235
258
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
236
259
self._baz._empty_tag_bzr])
237
rev = branch.get_revision(self._baz._empty_tag_bzr)
260
rev = branch.repository.get_revision(self._baz._empty_tag_bzr)
239
262
import_version('output2', pybaz.Version(self._baz._empty_tag),
241
264
branch2 = Branch.open('output2')
242
265
self.assertEqual(branch.revision_history(), branch2.revision_history())
243
rev2 = branch2.get_revision(self._baz._empty_tag_bzr)
266
rev2 = branch2.repository.get_revision(self._baz._empty_tag_bzr)
244
267
# they must be the same
245
268
self.assertEqual(rev, rev2)
247
270
# and we should get some expected values:
248
271
self.assertEqual(rev.committer, "Test User<test@example.org>")
249
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
272
self.assertEqual(rev.message,
273
"tag of demo@DONOTUSE/c--import--0--base-0")
250
274
self.assertEqual(rev.revision_id, self._baz._empty_tag_bzr)
252
276
def test_empty_merged_tagged(self):
268
293
import_version('output2', pybaz.Version(self._baz._empty_merged_tag),
270
295
branch2 = Branch.open('output2')
296
repo2 = branch2.repository
271
297
# and import what we should be merged up against for checking with.
272
298
import_version('output3', pybaz.Version(self._baz._empty_tag),
274
300
branch3 = Branch.open('output3')
276
302
self.assertEqual(branch.revision_history(), branch2.revision_history())
277
self.assertNotEqual(branch.revision_history(), branch3.revision_history())
303
self.assertNotEqual(branch.revision_history(),
304
branch3.revision_history())
278
305
# check revisions in the history.
279
rev = branch.get_revision(self._baz._empty_merged_tag_bzr_base)
280
rev2 = branch2.get_revision(self._baz._empty_merged_tag_bzr_base)
306
rev = repo.get_revision(self._baz._empty_merged_tag_bzr_base)
307
rev2 = repo2.get_revision(self._baz._empty_merged_tag_bzr_base)
281
308
# they must be the same
282
309
self.assertEqual(rev, rev2)
283
310
# and we should get some expected values:
284
311
self.assertEqual(rev.committer, "Test User<test@example.org>")
285
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
312
self.assertEqual(rev.message,
313
"tag of demo@DONOTUSE/c--import--0--base-0")
286
314
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_bzr_base)
287
315
self.assertEqual(['Arch-1:demo@DONOTUSE%c--import--0--base-0'],
290
318
# check next revisions in the history.
291
rev = branch.get_revision(self._baz._empty_merged_tag_bzr)
292
rev2 = branch2.get_revision(self._baz._empty_merged_tag_bzr)
319
rev = repo.get_revision(self._baz._empty_merged_tag_bzr)
320
rev2 = repo2.get_revision(self._baz._empty_merged_tag_bzr)
293
321
# they must be the same
294
322
self.assertEqual(rev, rev2)
295
323
# and we should get some expected values:
323
352
import_version('output2', pybaz.Version(self._baz._empty_merged_tag_2),
325
354
branch2 = Branch.open('output2')
355
repo2 = branch2.repository
326
356
# and import what we should be merged up against for checking with.
327
357
import_version('output3', pybaz.Version(self._baz._empty_merged_tag),
329
359
branch3 = Branch.open('output3')
331
361
self.assertEqual(branch.revision_history(), branch2.revision_history())
332
self.assertNotEqual(branch.revision_history(), branch3.revision_history())
362
self.assertNotEqual(branch.revision_history(),
363
branch3.revision_history())
333
364
# check revisions in the history.
334
rev = branch.get_revision(self._baz._empty_merged_tag_2_bzr_base)
335
rev2 = branch2.get_revision(self._baz._empty_merged_tag_2_bzr_base)
365
rev = repo.get_revision(self._baz._empty_merged_tag_2_bzr_base)
366
rev2 = repo2.get_revision(self._baz._empty_merged_tag_2_bzr_base)
336
367
# they must be the same
337
368
self.assertEqual(rev, rev2)
338
369
# and we should get some expected values:
339
370
self.assertEqual(rev.committer, "Test User<test@example.org>")
340
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
341
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_2_bzr_base)
371
self.assertEqual(rev.message,
372
"tag of demo@DONOTUSE/c--import--0--base-0")
373
self.assertEqual(rev.revision_id,
374
self._baz._empty_merged_tag_2_bzr_base)
343
376
# check next revisions in the history.
344
rev = branch.get_revision(self._baz._empty_merged_tag_2_bzr)
345
rev2 = branch2.get_revision(self._baz._empty_merged_tag_2_bzr)
377
rev = repo.get_revision(self._baz._empty_merged_tag_2_bzr)
378
rev2 = repo2.get_revision(self._baz._empty_merged_tag_2_bzr)
346
379
# they must be the same
347
380
self.assertEqual(rev, rev2)
348
381
# and we should get some expected values:
362
395
import_version('output', pybaz.Version(self._baz._import_symlink),
364
397
# expected results:
365
# one commit, no files, revision identifier of 'demo@DONOTUSE_c--import--0--base-0'
398
# one commit, no files, revision identifier of
399
# 'demo@DONOTUSE_c--import--0--base-0'
366
400
branch = Branch.open('output')
367
401
self.assertEqual(branch.revision_history(),
368
402
[self._baz._import_symlink_bzr])
369
rev = branch.get_revision(self._baz._import_symlink_bzr)
403
rev = branch.repository.get_revision(self._baz._import_symlink_bzr)
371
405
import_version('output2', pybaz.Version(self._baz._import_symlink),
373
407
branch2 = Branch.open('output2')
374
408
self.assertEqual(branch.revision_history(), branch2.revision_history())
375
rev2 = branch2.get_revision(self._baz._import_symlink_bzr)
409
rev2 = branch2.repository.get_revision(self._baz._import_symlink_bzr)
376
410
# they must be the same
377
411
self.assertEqual(rev, rev2)
382
416
self.assertEqual(rev.revision_id, self._baz._import_symlink_bzr)
384
418
# and we want the symlink alink with target 'missing-file-name'
385
inv = branch.get_inventory(rev.revision_id)
419
inv = branch.repository.get_inventory(rev.revision_id)
386
420
self.assertEqual(inv.path2id('alink'), 'x_symlink_tag')
387
421
entry = inv['x_symlink_tag']
388
422
self.assertEqual(entry.kind, 'symlink')
398
432
branch = Branch.open('output')
399
433
self.assertEqual(branch.revision_history(),
400
434
[self._baz._missing_ancestor_bzr])
401
rev = branch.get_revision(self._baz._missing_ancestor_bzr)
435
rev = branch.repository.get_revision(self._baz._missing_ancestor_bzr)
403
437
import_version('output2', pybaz.Version(self._baz._missing_ancestor),
405
439
branch2 = Branch.open('output2')
406
440
self.assertEqual(branch.revision_history(), branch2.revision_history())
407
rev2 = branch2.get_revision(self._baz._missing_ancestor_bzr)
441
rev2 = branch2.repository.get_revision(self._baz._missing_ancestor_bzr)
408
442
# they must be the same
409
443
self.assertEqual(rev, rev2)
411
445
# and we should get some expected values:
412
446
self.assertEqual(rev.committer, "Test User<test@example.org>")
413
self.assertEqual(rev.message, "tag of demo-gone@DONOTUSE/c--import--0--base-0")
447
self.assertEqual(rev.message,
448
"tag of demo-gone@DONOTUSE/c--import--0--base-0")
414
449
self.assertEqual(rev.revision_id, self._baz._missing_ancestor_bzr)
415
450
self.assertEqual(rev.parent_ids[0], self._baz._missing_import_bzr)
416
451
self.assertEqual(1, len(rev.parent_ids))
418
453
# must NOT be able to get the merged evision
419
self.assertRaises(NoSuchRevision, branch.get_revision,
454
self.assertRaises(NoSuchRevision, branch.repository.get_revision,
420
455
self._baz._missing_import_bzr)
422
457
def test_missing_ancestor_reusing_history(self):
431
466
self.assertEqual(branch.revision_history(),
432
467
[self._baz._missing_import_bzr,
433
468
self._baz._missing_ancestor_bzr])
434
rev = branch.get_revision(self._baz._missing_ancestor_bzr)
469
rev = branch.repository.get_revision(self._baz._missing_ancestor_bzr)
436
471
import_version('output2', pybaz.Version(self._baz._missing_ancestor),
438
473
reuse_history_from=[self._baz._missing_import_imported])
439
474
branch2 = Branch.open('output2')
440
475
self.assertEqual(branch.revision_history(), branch2.revision_history())
441
rev2 = branch2.get_revision(self._baz._missing_ancestor_bzr)
476
rev2 = branch2.repository.get_revision(self._baz._missing_ancestor_bzr)
442
477
# they must be the same
443
478
self.assertEqual(rev, rev2)
445
480
# must be able to get the missing base revision
446
branch.get_revision(self._baz._missing_import_bzr)
481
branch.repository.get_revision(self._baz._missing_import_bzr)
448
483
# and we should get some expected values:
449
484
self.assertEqual(rev.committer, "Test User<test@example.org>")
450
self.assertEqual(rev.message, "tag of demo-gone@DONOTUSE/c--import--0--base-0")
485
self.assertEqual(rev.message,
486
"tag of demo-gone@DONOTUSE/c--import--0--base-0")
451
487
self.assertEqual(rev.revision_id, self._baz._missing_ancestor_bzr)
452
488
self.assertEqual(rev.parent_ids[0], self._baz._missing_import_bzr)
453
489
self.assertEqual(1, len(rev.parent_ids))
465
501
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
466
502
self._baz._bad_id_tag_bzr_base,
467
503
self._baz._bad_id_tag_bzr])
468
rev = branch.get_revision(self._baz._bad_id_tag_bzr)
469
inv = branch.get_inventory(self._baz._bad_id_tag_bzr)
504
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
505
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
470
506
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
471
507
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
496
532
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
497
533
self._baz._bad_id_tag_bzr_base,
498
534
self._baz._bad_id_tag_bzr])
499
rev = branch.get_revision(self._baz._bad_id_tag_bzr)
500
inv = branch.get_inventory(self._baz._bad_id_tag_bzr)
535
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
536
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
501
537
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
502
538
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
528
564
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
529
565
self._baz._bad_id_tag_bzr_base,
530
566
self._baz._bad_id_tag_bzr])
531
rev = branch.get_revision(self._baz._bad_id_tag_bzr)
532
inv = branch.get_inventory(self._baz._bad_id_tag_bzr)
567
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
568
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
533
569
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
534
570
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
572
def test_inbranch_conversion(self):
573
import_version('output', pybaz.Version(self._baz._inbranch_tag),
576
# three commits, no files, revision identifiers of
577
# 'demo@DONOTUSE_c--import--0--base-0' and
578
# self._baz._inbranch_tag_base_bzr
579
# self._baz._inbranch_tag_head_bzr
581
branch = Branch.open('output')
582
self.assertEqual(branch.revision_history(),
583
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
584
self._baz._inbranch_tag_base_bzr,
585
self._baz._inbranch_tag_head_bzr])
587
import_version('output2', pybaz.Version(self._baz._inbranch_tag),
589
branch2 = Branch.open('output2')
591
self.assertEqual(branch.revision_history(), branch2.revision_history())
592
# check revisions in the history.
593
rev = branch.repository.get_revision(self._baz._inbranch_tag_base_bzr)
594
rev2 = branch2.repository.get_revision(self._baz._inbranch_tag_base_bzr)
595
# they must be the same
596
self.assertEqual(rev, rev2)
597
# and we should get some expected values:
598
self.assertEqual(rev.committer, "Test User<test@example.org>")
599
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
600
self.assertEqual(rev.revision_id, self._baz._inbranch_tag_base_bzr)
602
# check next revisions in the history.
603
rev = branch.repository.get_revision(self._baz._inbranch_tag_head_bzr)
604
rev2 = branch2.repository.get_revision(self._baz._inbranch_tag_head_bzr)
605
# they must be the same
606
self.assertEqual(rev, rev2)
607
# and we should get some expected values:
608
self.assertEqual(rev.committer, "Test User<test@example.org>")
609
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--inbranch-tag--0--base-0")
610
self.assertEqual(rev.revision_id, self._baz._inbranch_tag_head_bzr)
611
self.assertEqual(rev.parent_ids,
612
[self._baz._inbranch_tag_base_bzr])
537
615
class TestNamespacePrevious(TestCase):
611
688
def make_import(self, namespace):
612
689
self._import = 'demo@DONOTUSE/%s' % namespace
613
690
os.mkdir(os.path.join(self._tmpdir, 'tree'))
614
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'), self._import)
691
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'),
615
693
msg = tree.log_message()
616
694
msg["summary"] = "I am importing now"
617
695
tree.import_(msg)
624
702
command = cmd_baz_import()
625
703
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
626
704
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output')))
628
len(list(os.walk(os.path.join(self._tmpdir,'output')))))
705
walk_len = len(list(os.walk(os.path.join(self._tmpdir,'output'))))
706
self.assertEqual(6, walk_len)
630
708
def test_two_branches(self):
631
709
self.make_import('c--0')
633
711
command = cmd_baz_import()
634
712
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
635
713
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output')))
636
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output', 'c','+trunk')))
637
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output', 'c1', '0.2','branch')))
639
len(list(os.walk(os.path.join(self._tmpdir,'output')))))
714
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output',
716
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output',
717
'c1', '0.2','branch')))
718
walk_len = len(list(os.walk(os.path.join(self._tmpdir,'output'))))
719
self.assertEqual(17, walk_len)
641
721
def test_run_twice(self):
642
722
self.make_import('c--0')