~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_inv.py

Move doctest import to increase speed

Show diffs side-by-side

added added

removed removed

Lines of Context:
516
516
        self.assertEqual(expected_change, change)
517
517
 
518
518
 
 
519
class TestExecutable(TestCaseWithTransport):
 
520
 
 
521
    def test_stays_executable(self):
 
522
        a_id = "a-20051208024829-849e76f7968d7a86"
 
523
        b_id = "b-20051208024829-849e76f7968d7a86"
 
524
        wt = self.make_branch_and_tree('b1')
 
525
        b = wt.branch
 
526
        tt = TreeTransform(wt)
 
527
        tt.new_file('a', tt.root, 'a test\n', a_id, True)
 
528
        tt.new_file('b', tt.root, 'b test\n', b_id, False)
 
529
        tt.apply()
 
530
 
 
531
        self.failUnless(wt.is_executable(a_id), "'a' lost the execute bit")
 
532
 
 
533
        # reopen the tree and ensure it stuck.
 
534
        wt = wt.bzrdir.open_workingtree()
 
535
        self.assertEqual(['a', 'b'], [cn for cn,ie in wt.inventory.iter_entries()])
 
536
 
 
537
        self.failUnless(wt.is_executable(a_id), "'a' lost the execute bit")
 
538
        self.failIf(wt.is_executable(b_id), "'b' gained an execute bit")
 
539
 
 
540
        wt.commit('adding a,b', rev_id='r1')
 
541
 
 
542
        rev_tree = b.repository.revision_tree('r1')
 
543
        self.failUnless(rev_tree.is_executable(a_id), "'a' lost the execute bit")
 
544
        self.failIf(rev_tree.is_executable(b_id), "'b' gained an execute bit")
 
545
 
 
546
        self.failUnless(rev_tree.inventory[a_id].executable)
 
547
        self.failIf(rev_tree.inventory[b_id].executable)
 
548
 
 
549
        # Make sure the entries are gone
 
550
        os.remove('b1/a')
 
551
        os.remove('b1/b')
 
552
        self.failIf(wt.has_id(a_id))
 
553
        self.failIf(wt.has_filename('a'))
 
554
        self.failIf(wt.has_id(b_id))
 
555
        self.failIf(wt.has_filename('b'))
 
556
 
 
557
        # Make sure that revert is able to bring them back,
 
558
        # and sets 'a' back to being executable
 
559
 
 
560
        wt.revert(['a', 'b'], rev_tree, backups=False)
 
561
        self.assertEqual(['a', 'b'], [cn for cn,ie in wt.inventory.iter_entries()])
 
562
 
 
563
        self.failUnless(wt.is_executable(a_id), "'a' lost the execute bit")
 
564
        self.failIf(wt.is_executable(b_id), "'b' gained an execute bit")
 
565
 
 
566
        # Now remove them again, and make sure that after a
 
567
        # commit, they are still marked correctly
 
568
        os.remove('b1/a')
 
569
        os.remove('b1/b')
 
570
        wt.commit('removed', rev_id='r2')
 
571
 
 
572
        self.assertEqual([], [cn for cn,ie in wt.inventory.iter_entries()])
 
573
        self.failIf(wt.has_id(a_id))
 
574
        self.failIf(wt.has_filename('a'))
 
575
        self.failIf(wt.has_id(b_id))
 
576
        self.failIf(wt.has_filename('b'))
 
577
 
 
578
        # Now revert back to the previous commit
 
579
        wt.revert([], rev_tree, backups=False)
 
580
        self.assertEqual(['a', 'b'], [cn for cn,ie in wt.inventory.iter_entries()])
 
581
 
 
582
        self.failUnless(wt.is_executable(a_id), "'a' lost the execute bit")
 
583
        self.failIf(wt.is_executable(b_id), "'b' gained an execute bit")
 
584
 
 
585
        # Now make sure that 'bzr branch' also preserves the
 
586
        # executable bit
 
587
        # TODO: Maybe this should be a blackbox test
 
588
        d2 = b.bzrdir.clone('b2', revision_id='r1')
 
589
        t2 = d2.open_workingtree()
 
590
        b2 = t2.branch
 
591
        self.assertEquals('r1', b2.last_revision())
 
592
 
 
593
        self.assertEqual(['a', 'b'], [cn for cn,ie in t2.inventory.iter_entries()])
 
594
        self.failUnless(t2.is_executable(a_id), "'a' lost the execute bit")
 
595
        self.failIf(t2.is_executable(b_id), "'b' gained an execute bit")
 
596
 
 
597
        # Make sure pull will delete the files
 
598
        t2.pull(b)
 
599
        self.assertEquals('r2', b2.last_revision())
 
600
        self.assertEqual([], [cn for cn,ie in t2.inventory.iter_entries()])
 
601
 
 
602
        # Now commit the changes on the first branch
 
603
        # so that the second branch can pull the changes
 
604
        # and make sure that the executable bit has been copied
 
605
        wt.commit('resurrected', rev_id='r3')
 
606
 
 
607
        t2.pull(b)
 
608
        self.assertEquals('r3', b2.last_revision())
 
609
        self.assertEqual(['a', 'b'], [cn for cn,ie in t2.inventory.iter_entries()])
 
610
 
 
611
        self.failUnless(t2.is_executable(a_id), "'a' lost the execute bit")
 
612
        self.failIf(t2.is_executable(b_id), "'b' gained an execute bit")
 
613
 
 
614
 
519
615
class TestRevert(TestCaseWithTransport):
520
616
 
521
617
    def test_dangling_id(self):