~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/tests/test_knit.py

  • Committer: John Arbash Meinel
  • Date: 2006-11-10 22:23:15 UTC
  • mfrom: (2129 +trunk)
  • mto: This revision was merged to the branch mainline in revision 2131.
  • Revision ID: john@arbash-meinel.com-20061110222315-07f2336970e50698
[merge] bzr.dev 2129

Show diffs side-by-side

added added

removed removed

Lines of Context:
630
630
        text = k.get_text('text-1')
631
631
        self.assertEqual(TEXT_1, text)
632
632
        self.assertEqual({}, k._data._cache)
 
633
 
 
634
 
 
635
class TestKnitIndex(KnitTests):
 
636
 
 
637
    def test_add_versions_dictionary_compresses(self):
 
638
        """Adding versions to the index should update the lookup dict"""
 
639
        knit = self.make_test_knit()
 
640
        idx = knit._index
 
641
        idx.add_version('a-1', ['fulltext'], 0, 0, [])
 
642
        self.check_file_contents('test.kndx',
 
643
            '# bzr knit index 8\n'
 
644
            '\n'
 
645
            'a-1 fulltext 0 0  :'
 
646
            )
 
647
        idx.add_versions([('a-2', ['fulltext'], 0, 0, ['a-1']),
 
648
                          ('a-3', ['fulltext'], 0, 0, ['a-2']),
 
649
                         ])
 
650
        self.check_file_contents('test.kndx',
 
651
            '# bzr knit index 8\n'
 
652
            '\n'
 
653
            'a-1 fulltext 0 0  :\n'
 
654
            'a-2 fulltext 0 0 0 :\n'
 
655
            'a-3 fulltext 0 0 1 :'
 
656
            )
 
657
        self.assertEqual(['a-1', 'a-2', 'a-3'], idx._history)
 
658
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, [], 0),
 
659
                          'a-2':('a-2', ['fulltext'], 0, 0, ['a-1'], 1),
 
660
                          'a-3':('a-3', ['fulltext'], 0, 0, ['a-2'], 2),
 
661
                         }, idx._cache)
 
662
 
 
663
    def test_add_versions_fails_clean(self):
 
664
        """If add_versions fails in the middle, it restores a pristine state.
 
665
 
 
666
        Any modifications that are made to the index are reset if all versions
 
667
        cannot be added.
 
668
        """
 
669
        # This cheats a little bit by passing in a generator which will
 
670
        # raise an exception before the processing finishes
 
671
        # Other possibilities would be to have an version with the wrong number
 
672
        # of entries, or to make the backing transport unable to write any
 
673
        # files.
 
674
 
 
675
        knit = self.make_test_knit()
 
676
        idx = knit._index
 
677
        idx.add_version('a-1', ['fulltext'], 0, 0, [])
 
678
 
 
679
        class StopEarly(Exception):
 
680
            pass
 
681
 
 
682
        def generate_failure():
 
683
            """Add some entries and then raise an exception"""
 
684
            yield ('a-2', ['fulltext'], 0, 0, ['a-1'])
 
685
            yield ('a-3', ['fulltext'], 0, 0, ['a-2'])
 
686
            raise StopEarly()
 
687
 
 
688
        # Assert the pre-condition
 
689
        self.assertEqual(['a-1'], idx._history)
 
690
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, [], 0)}, idx._cache)
 
691
 
 
692
        self.assertRaises(StopEarly, idx.add_versions, generate_failure())
 
693
 
 
694
        # And it shouldn't be modified
 
695
        self.assertEqual(['a-1'], idx._history)
 
696
        self.assertEqual({'a-1':('a-1', ['fulltext'], 0, 0, [], 0)}, idx._cache)