194
288
# self._baz._empty_merged_tag_bzr
195
289
# and a merged revision from the latter of
196
290
# self._baz._empty_tag_bzr
197
branch = find_branch('output', find_root=False)
291
branch = Branch.open('output')
292
repo = branch.repository
198
293
self.assertEqual(branch.revision_history(),
199
294
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
200
295
self._baz._empty_merged_tag_bzr_base,
201
296
self._baz._empty_merged_tag_bzr])
203
298
import_version('output2', pybaz.Version(self._baz._empty_merged_tag))
204
branch2 = find_branch('output2', find_root=False)
299
branch2 = Branch.open('output2')
300
repo2 = branch2.repository
205
301
# and import what we should be merged up against for checking with.
206
302
import_version('output3', pybaz.Version(self._baz._empty_tag))
207
branch3 = find_branch('output3', find_root=False)
303
branch3 = Branch.open('output3')
209
305
self.assertEqual(branch.revision_history(), branch2.revision_history())
210
self.assertNotEqual(branch.revision_history(), branch3.revision_history())
306
self.assertNotEqual(branch.revision_history(),
307
branch3.revision_history())
211
308
# check revisions in the history.
212
rev = branch.get_revision(self._baz._empty_merged_tag_bzr_base)
213
rev2 = branch2.get_revision(self._baz._empty_merged_tag_bzr_base)
309
rev = repo.get_revision(self._baz._empty_merged_tag_bzr_base)
310
rev2 = repo2.get_revision(self._baz._empty_merged_tag_bzr_base)
214
311
# they must be the same
215
312
self.assertEqual(rev, rev2)
216
313
# and we should get some expected values:
217
314
self.assertEqual(rev.committer, "Test User<test@example.org>")
218
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
315
self.assertEqual(rev.message,
316
"tag of demo@DONOTUSE/c--import--0--base-0")
219
317
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_bzr_base)
318
self.assertEqual(['Arch-1:demo@DONOTUSE%c--import--0--base-0'],
221
321
# check next revisions in the history.
222
rev = branch.get_revision(self._baz._empty_merged_tag_bzr)
223
rev2 = branch2.get_revision(self._baz._empty_merged_tag_bzr)
322
rev = repo.get_revision(self._baz._empty_merged_tag_bzr)
323
rev2 = repo2.get_revision(self._baz._empty_merged_tag_bzr)
224
324
# they must be the same
225
325
self.assertEqual(rev, rev2)
226
326
# and we should get some expected values:
227
327
self.assertEqual(rev.committer, "Test User<test@example.org>")
228
328
self.assertEqual(rev.message, "did a merge, yarh")
229
329
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_bzr)
230
self.assertEqual(rev.parents[0].revision_id,
330
self.assertEqual(rev.parent_ids[0],
231
331
self._baz._empty_merged_tag_bzr_base)
232
self.assertEqual(rev.parents[1].revision_id,
233
self._baz._empty_tag_bzr)
332
self.assertEqual(rev.parent_ids[1], self._baz._empty_tag_bzr)
235
334
# this tree should have nothing missing from that tree.
236
335
# FIXME there is no code for this right now.
245
344
# self._baz._empty_merged_tag_2_bzr
246
345
# and a merged revision from the latter of
247
346
# self._baz._empty_merged_tag_bzr
248
branch = find_branch('output', find_root=False)
347
branch = Branch.open('output')
348
repo = branch.repository
249
349
self.assertEqual(branch.revision_history(),
250
350
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
251
351
self._baz._empty_merged_tag_2_bzr_base,
252
352
self._baz._empty_merged_tag_2_bzr])
254
354
import_version('output2', pybaz.Version(self._baz._empty_merged_tag_2))
255
branch2 = find_branch('output2', find_root=False)
355
branch2 = Branch.open('output2')
356
repo2 = branch2.repository
256
357
# and import what we should be merged up against for checking with.
257
358
import_version('output3', pybaz.Version(self._baz._empty_merged_tag))
258
branch3 = find_branch('output3', find_root=False)
359
branch3 = Branch.open('output3')
260
361
self.assertEqual(branch.revision_history(), branch2.revision_history())
261
self.assertNotEqual(branch.revision_history(), branch3.revision_history())
362
self.assertNotEqual(branch.revision_history(),
363
branch3.revision_history())
262
364
# check revisions in the history.
263
rev = branch.get_revision(self._baz._empty_merged_tag_2_bzr_base)
264
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)
265
367
# they must be the same
266
368
self.assertEqual(rev, rev2)
267
369
# and we should get some expected values:
268
370
self.assertEqual(rev.committer, "Test User<test@example.org>")
269
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
270
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)
272
376
# check next revisions in the history.
273
rev = branch.get_revision(self._baz._empty_merged_tag_2_bzr)
274
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)
275
379
# they must be the same
276
380
self.assertEqual(rev, rev2)
277
381
# and we should get some expected values:
278
382
self.assertEqual(rev.committer, "Test User<test@example.org>")
279
383
self.assertEqual(rev.message, "merge in a merged tree.")
280
384
self.assertEqual(rev.revision_id, self._baz._empty_merged_tag_2_bzr)
281
self.assertEqual(rev.parents[0].revision_id,
385
self.assertEqual(rev.parent_ids[0],
282
386
self._baz._empty_merged_tag_2_bzr_base)
283
self.assertEqual(rev.parents[1].revision_id,
387
self.assertEqual(rev.parent_ids[1],
284
388
self._baz._empty_merged_tag_bzr)
286
390
# this tree should have nothing missing from that tree.
309
416
self.assertEqual(rev.revision_id, self._baz._import_symlink_bzr)
311
418
# and we want the symlink alink with target 'missing-file-name'
312
inv = branch.get_inventory(rev.inventory_id)
419
inv = branch.repository.get_inventory(rev.revision_id)
313
420
self.assertEqual(inv.path2id('alink'), 'x_symlink_tag')
314
421
entry = inv['x_symlink_tag']
315
422
self.assertEqual(entry.kind, 'symlink')
316
423
self.assertEqual(entry.symlink_target, 'missing-file-name')
425
# current bzr doesn't handle type changes
426
self.assertRaises(AssertionError, import_version, 'output3',
427
pybaz.Version(self._baz._import_symlink))
429
def test_missing_ancestor(self):
430
import_version('output', pybaz.Version(self._baz._missing_ancestor))
432
# one commits, no files, revision identifiers of
433
# 'demo@DONOTUSE_c--gone--0--base-0' and
434
# a merge of demo-gone@DONOTUSE%c--import--0
435
branch = Branch.open('output')
436
self.assertEqual(branch.revision_history(),
437
[self._baz._missing_ancestor_bzr])
438
rev = branch.repository.get_revision(self._baz._missing_ancestor_bzr)
440
import_version('output2', pybaz.Version(self._baz._missing_ancestor))
441
branch2 = Branch.open('output2')
442
self.assertEqual(branch.revision_history(), branch2.revision_history())
443
rev2 = branch2.repository.get_revision(self._baz._missing_ancestor_bzr)
444
# they must be the same
445
self.assertEqual(rev, rev2)
447
# and we should get some expected values:
448
self.assertEqual(rev.committer, "Test User<test@example.org>")
449
self.assertEqual(rev.message,
450
"tag of demo-gone@DONOTUSE/c--import--0--base-0")
451
self.assertEqual(rev.revision_id, self._baz._missing_ancestor_bzr)
452
self.assertEqual(rev.parent_ids[0], self._baz._missing_import_bzr)
453
self.assertEqual(1, len(rev.parent_ids))
455
# must NOT be able to get the merged evision
456
self.assertRaises(NoSuchRevision, branch.repository.get_revision,
457
self._baz._missing_import_bzr)
459
def test_missing_ancestor_reusing_history(self):
460
import_version('output', pybaz.Version(self._baz._missing_ancestor),
461
reuse_history_from=[self._baz._missing_import_imported])
463
# one commits, no files, revision identifiers of
464
# 'demo-gone@DONOTUSE%c--import--0--base-0' and
465
# 'demo@DONOTUSE%c--gone--0--base-0'
466
branch = Branch.open('output')
467
self.assertEqual(branch.revision_history(),
468
[self._baz._missing_import_bzr,
469
self._baz._missing_ancestor_bzr])
470
rev = branch.repository.get_revision(self._baz._missing_ancestor_bzr)
472
import_version('output2', pybaz.Version(self._baz._missing_ancestor),
473
reuse_history_from=[self._baz._missing_import_imported])
474
branch2 = Branch.open('output2')
475
self.assertEqual(branch.revision_history(), branch2.revision_history())
476
rev2 = branch2.repository.get_revision(self._baz._missing_ancestor_bzr)
477
# they must be the same
478
self.assertEqual(rev, rev2)
480
# must be able to get the missing base revision
481
branch.repository.get_revision(self._baz._missing_import_bzr)
483
# and we should get some expected values:
484
self.assertEqual(rev.committer, "Test User<test@example.org>")
485
self.assertEqual(rev.message,
486
"tag of demo-gone@DONOTUSE/c--import--0--base-0")
487
self.assertEqual(rev.revision_id, self._baz._missing_ancestor_bzr)
488
self.assertEqual(rev.parent_ids[0], self._baz._missing_import_bzr)
489
self.assertEqual(1, len(rev.parent_ids))
491
def test_bad_file_id(self):
492
import_version('output', pybaz.Version(self._baz._bad_id_tag))
494
# three commits, one files, revision identifiers of
495
# 'demo@DONOTUSE_c--import--0--base-0' ,
496
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
497
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
498
branch = Branch.open('output')
499
self.assertEqual(branch.revision_history(),
500
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
501
self._baz._bad_id_tag_bzr_base,
502
self._baz._bad_id_tag_bzr])
503
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
504
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
505
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
506
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
508
def test_appending_revisions_already_present(self):
509
import_version('output', pybaz.Version(self._baz._bad_id_tag),
512
# three commits, one files, revision identifiers of
513
# 'demo@DONOTUSE_c--import--0--base-0' ,
514
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
515
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
516
branch = Branch.open('output')
517
self.assertEqual(branch.revision_history(),
518
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
519
self._baz._bad_id_tag_bzr_base])
520
branch.set_revision_history(
521
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
523
branch = Branch.open('output')
524
self.assertEqual(branch.revision_history(),
525
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
527
import_version('output', pybaz.Version(self._baz._bad_id_tag))
528
branch = Branch.open('output')
529
self.assertEqual(branch.revision_history(),
530
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
531
self._baz._bad_id_tag_bzr_base,
532
self._baz._bad_id_tag_bzr])
533
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
534
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
535
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
536
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
538
def test_appending_revisions_all_already_present(self):
539
import_version('output', pybaz.Version(self._baz._bad_id_tag))
541
# three commits, one files, revision identifiers of
542
# 'demo@DONOTUSE_c--import--0--base-0' ,
543
# 'demo@DONOTUSE/c--bad-id--0--base-0' ,
544
# ''demo@DONOTUSE/c--bad-id--0--patch-1'
545
branch = Branch.open('output')
546
self.assertEqual(branch.revision_history(),
547
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
548
self._baz._bad_id_tag_bzr_base,
549
self._baz._bad_id_tag_bzr])
550
branch.set_revision_history(
551
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
553
branch = Branch.open('output')
554
self.assertEqual(branch.revision_history(),
555
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
557
import_version('output', pybaz.Version(self._baz._bad_id_tag))
558
branch = Branch.open('output')
559
self.assertEqual(branch.revision_history(),
560
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
561
self._baz._bad_id_tag_bzr_base,
562
self._baz._bad_id_tag_bzr])
563
rev = branch.repository.get_revision(self._baz._bad_id_tag_bzr)
564
inv = branch.repository.get_inventory(self._baz._bad_id_tag_bzr)
565
self.assertEqual(inv.path2id('path'), 'x_this_id%2fneeds%25escaping')
566
self.assertEqual('path', inv.id2path('x_this_id%2fneeds%25escaping'))
568
def test_inbranch_conversion(self):
569
import_version('output', pybaz.Version(self._baz._inbranch_tag))
571
# three commits, no files, revision identifiers of
572
# 'demo@DONOTUSE_c--import--0--base-0' and
573
# self._baz._inbranch_tag_base_bzr
574
# self._baz._inbranch_tag_head_bzr
576
branch = Branch.open('output')
577
self.assertEqual(branch.revision_history(),
578
['Arch-1:demo@DONOTUSE%c--import--0--base-0',
579
self._baz._inbranch_tag_base_bzr,
580
self._baz._inbranch_tag_head_bzr])
582
import_version('output2', pybaz.Version(self._baz._inbranch_tag))
583
branch2 = Branch.open('output2')
585
self.assertEqual(branch.revision_history(), branch2.revision_history())
586
# check revisions in the history.
587
rev = branch.repository.get_revision(self._baz._inbranch_tag_base_bzr)
588
rev2 = branch2.repository.get_revision(self._baz._inbranch_tag_base_bzr)
589
# they must be the same
590
self.assertEqual(rev, rev2)
591
# and we should get some expected values:
592
self.assertEqual(rev.committer, "Test User<test@example.org>")
593
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--import--0--base-0")
594
self.assertEqual(rev.revision_id, self._baz._inbranch_tag_base_bzr)
596
# check next revisions in the history.
597
rev = branch.repository.get_revision(self._baz._inbranch_tag_head_bzr)
598
rev2 = branch2.repository.get_revision(self._baz._inbranch_tag_head_bzr)
599
# they must be the same
600
self.assertEqual(rev, rev2)
601
# and we should get some expected values:
602
self.assertEqual(rev.committer, "Test User<test@example.org>")
603
self.assertEqual(rev.message, "tag of demo@DONOTUSE/c--inbranch-tag--0--base-0")
604
self.assertEqual(rev.revision_id, self._baz._inbranch_tag_head_bzr)
605
self.assertEqual(rev.parent_ids,
606
[self._baz._inbranch_tag_base_bzr])
608
def test_no_commits_same_as_missing(self):
611
branch = bzrlib.bzrdir.BzrDir.create_branch_convenience(path)
612
import_version(path, pybaz.Version(self._baz._import))
614
# one commit, revision identifier of
615
# 'demo@DONOTUSE_c--import--0--base-0'
616
self.assertEqual(branch.revision_history(),
617
['Arch-1:demo@DONOTUSE%c--import--0--base-0'])
620
class TestNamespacePrevious(TestCase):
624
self.version = pybaz.Version('foo@example.com/c--b--0')
626
def test_base0_none(self):
627
self.assertEqual(namespace_previous(self.version['base-0']), None)
629
def test_patch1_base0(self):
630
self.assertEqual(namespace_previous(self.version['patch-1']),
631
self.version['base-0'])
633
def test_patch3000_patch2999(self):
634
self.assertEqual(namespace_previous(self.version['patch-3000']),
635
self.version['patch-2999'])
637
def test_version0_raises(self):
638
self.assertRaises(RuntimeError, namespace_previous,
639
self.version['version-0'])
641
def test_version1_version0(self):
642
self.assertEqual(namespace_previous(self.version['versionfix-1']),
643
self.version['version-0'])
645
def test_version3000_patch2999(self):
646
self.assertEqual(namespace_previous(self.version['versionfix-3000']),
647
self.version['versionfix-2999'])
650
class TestNamespaceMapping(TestCase):
652
def test_namespace_mapping_branch(self):
653
from bzrlib.plugins.bzrtools.baz_import import map_namespace
654
branch = pybaz.Branch('foo@example.com/c--b')
655
self.assertRaises(pybaz.errors.NamespaceError, map_namespace, branch)
656
self.assertEqual('c/b', map_namespace(branch['0']))
657
self.assertEqual('c/0.1/b', map_namespace(branch['0.1']))
659
def test_namespace_mapping_no_branch(self):
660
from bzrlib.plugins.bzrtools.baz_import import map_namespace
661
category = pybaz.Category('foo@example.com/c')
662
self.assertRaises(pybaz.errors.NamespaceError, map_namespace, category)
663
self.assertEqual('c/+trunk',
664
map_namespace(pybaz.Version("%s--0" % category)))
665
self.assertEqual('c/0.1/+trunk',
666
map_namespace(pybaz.Version('%s--0.1' % category)))
669
class TestFileIdMapping(TestCase):
671
def test_slash(self):
672
self.assertEqual('c%2fc', map_file_id('c/c'))
673
self.assertEqual('c%25c', map_file_id('c%c'))
676
class TestImport(TestCaseInTempDir):
679
TestCaseInTempDir.setUp(self)
680
self._oldhome = os.environ['HOME']
681
self._tmpdir = tempfile.mkdtemp()
682
self._homedir = os.path.join(self._tmpdir, 'home')
683
os.mkdir(self._homedir)
684
os.environ['HOME'] = self._homedir
685
self._archiveroot = os.path.join(self._tmpdir, 'archive')
686
self._archive = make_archive('demo@DONOTUSE', str(self._archiveroot))
689
os.environ['HOME'] = self._oldhome
690
shutil.rmtree(self._tmpdir)
691
TestCaseInTempDir.tearDown(self)
693
def make_import(self, namespace):
694
self._import = 'demo@DONOTUSE/%s' % namespace
695
os.mkdir(os.path.join(self._tmpdir, 'tree'))
696
tree = pybaz.init_tree(os.path.join(self._tmpdir, 'tree'),
698
msg = tree.log_message()
699
msg["summary"] = "I am importing now"
701
shutil.rmtree(os.path.join(self._tmpdir, 'tree'))
703
def test_cmd_exists(self):
704
from bzrlib.plugins.bzrtools.baz_import import cmd_baz_import
706
def test_empty_archive(self):
707
command = cmd_baz_import()
708
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
709
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output')))
710
walk_len = len(list(os.walk(os.path.join(self._tmpdir,'output'))))
711
self.assertEqual(7, walk_len)
713
def test_two_branches(self):
714
self.make_import('c--0')
715
self.make_import('c1--branch--0.2')
716
command = cmd_baz_import()
717
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
718
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output')))
719
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output',
721
self.failUnless(os.path.exists(os.path.join(self._tmpdir,'output',
722
'c1', '0.2','branch')))
723
walk_len = len(list(os.walk(os.path.join(self._tmpdir,'output'))))
724
self.assertEqual(20, walk_len)
726
def test_run_twice(self):
727
self.make_import('c--0')
728
command = cmd_baz_import()
729
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
730
command.run(os.path.join(self._tmpdir, 'output'), 'demo@DONOTUSE')
732
def test_accepts_reuse_history(self):
733
self.make_import('c--0')
734
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output'),
735
'demo@DONOTUSE', '.', '.')
737
def test_does_not_need_reuse_history(self):
738
self.make_import('c--0')
739
self.run_bzr('baz-import', os.path.join(self._tmpdir, 'output'),