467
469
builder.apply_changeset(cset)
468
470
self.assert_(file(builder.this.full_path("1"), "rb").read() == "text4" )
469
471
self.assert_(file(builder.this.full_path("2"), "rb").read() == "text2" )
470
self.assert_(os.stat(builder.this.full_path("1")).st_mode &0777 == 0755)
471
self.assert_(os.stat(builder.this.full_path("2")).st_mode &0777 == 0655)
472
self.assert_(os.stat(builder.this.full_path("3")).st_mode &0777 == 0744)
472
if sys.platform != "win32":
473
self.assert_(os.stat(builder.this.full_path("1")).st_mode &0777 == 0755)
474
self.assert_(os.stat(builder.this.full_path("2")).st_mode &0777 == 0655)
475
self.assert_(os.stat(builder.this.full_path("3")).st_mode &0777 == 0744)
475
478
def contents_test_conflicts(self, merge_factory):
482
485
builder.cleanup()
484
487
def test_symlink_conflicts(self):
485
builder = MergeBuilder()
486
builder.add_symlink("2", "0", "name2", "target1")
487
builder.change_target("2", other="target4", base="text3")
488
self.assertRaises(changeset.ThreewayContentsConflict,
489
builder.merge_changeset, ApplyMerge3)
488
if sys.platform != "win32":
489
builder = MergeBuilder()
490
builder.add_symlink("2", "0", "name2", "target1")
491
builder.change_target("2", other="target4", base="text3")
492
self.assertRaises(changeset.ThreewayContentsConflict,
493
builder.merge_changeset, ApplyMerge3)
492
496
def test_symlink_merge(self):
493
builder = MergeBuilder()
494
builder.add_symlink("1", "0", "name1", "target1")
495
builder.add_symlink("2", "0", "name2", "target1")
496
builder.add_symlink("3", "0", "name3", "target1")
497
builder.change_target("1", this="target2")
498
builder.change_target("2", base="target2")
499
builder.change_target("3", other="target2")
500
self.assertNotEqual(builder.cset.entries['2'].contents_change,
501
builder.cset.entries['3'].contents_change)
502
cset = builder.merge_changeset(ApplyMerge3)
503
builder.apply_changeset(cset)
504
self.assertEqual(builder.this.get_symlink_target("1"), "target2")
505
self.assertEqual(builder.this.get_symlink_target("2"), "target1")
506
self.assertEqual(builder.this.get_symlink_target("3"), "target2")
497
if sys.platform != "win32":
498
builder = MergeBuilder()
499
builder.add_symlink("1", "0", "name1", "target1")
500
builder.add_symlink("2", "0", "name2", "target1")
501
builder.add_symlink("3", "0", "name3", "target1")
502
builder.change_target("1", this="target2")
503
builder.change_target("2", base="target2")
504
builder.change_target("3", other="target2")
505
self.assertNotEqual(builder.cset.entries['2'].contents_change,
506
builder.cset.entries['3'].contents_change)
507
cset = builder.merge_changeset(ApplyMerge3)
508
builder.apply_changeset(cset)
509
self.assertEqual(builder.this.get_symlink_target("1"), "target2")
510
self.assertEqual(builder.this.get_symlink_target("2"), "target1")
511
self.assertEqual(builder.this.get_symlink_target("3"), "target2")
509
514
def test_perms_merge(self):
510
515
builder = MergeBuilder()
520
525
self.assert_(isinstance(cset.entries["2"].metadata_change, ExecFlagMerge))
521
526
self.assert_(cset.entries["3"].is_boring())
522
527
builder.apply_changeset(cset)
523
self.assert_(os.lstat(builder.this.full_path("1")).st_mode &0100 == 0000)
524
self.assert_(os.lstat(builder.this.full_path("2")).st_mode &0100 == 0100)
525
self.assert_(os.lstat(builder.this.full_path("3")).st_mode &0100 == 0000)
528
if sys.platform != "win32":
529
self.assert_(os.lstat(builder.this.full_path("1")).st_mode &0100 == 0000)
530
self.assert_(os.lstat(builder.this.full_path("2")).st_mode &0100 == 0100)
531
self.assert_(os.lstat(builder.this.full_path("3")).st_mode &0100 == 0000)
526
532
builder.cleanup();
531
537
def test_trivial_star_merge(self):
532
538
"""Test that merges in a star shape Just Work."""
533
from bzrlib.add import smart_add_branch, add_reporter_null
539
from bzrlib.add import smart_add_tree, add_reporter_null
534
540
from bzrlib.clone import copy_branch
535
541
from bzrlib.merge import merge
536
542
# John starts a branch
537
543
self.build_tree(("original/", "original/file1", "original/file2"))
538
544
branch = Branch.initialize("original")
539
smart_add_branch(branch, ["original"], True, add_reporter_null)
540
branch.working_tree().commit("start branch.", verbose=False)
545
tree = WorkingTree('original', branch)
546
smart_add_tree(tree, ["original"], True, add_reporter_null)
547
tree.commit("start branch.", verbose=False)
541
548
# Mary branches it.
542
549
self.build_tree(("mary/",))
543
550
copy_branch(branch, "mary")
599
606
a = Branch.initialize('a')
600
607
file('a/a_file', 'wb').write('contents\n')
608
a.working_tree().add('a_file')
602
609
a.working_tree().commit('a_revision', allow_pointless=False)
604
611
b = Branch.initialize('b')
605
612
file('b/b_file', 'wb').write('contents\n')
613
b.working_tree().add('b_file')
607
614
b.working_tree().commit('b_revision', allow_pointless=False)
608
615
merge(['b', -1], ['b', 0], this_dir='a')
609
616
self.assert_(os.path.lexists('a/b_file'))
616
623
a = Branch.initialize('a')
617
624
file('a/file', 'wb').write('contents\n')
625
a.working_tree().add('file')
619
626
a.working_tree().commit('a_revision', allow_pointless=False)
621
628
b = Branch.initialize('b')
622
629
file('b/file', 'wb').write('contents\n')
630
b.working_tree().add('file')
624
631
b.working_tree().commit('b_revision', allow_pointless=False)
625
632
merge(['b', -1], ['b', 0], this_dir='a')
626
633
self.assert_(os.path.lexists('a/file'))