/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar

« back to all changes in this revision

Viewing changes to bzrlib/tests/per_repository/test_check.py

  • Committer: Vincent Ladeuil
  • Date: 2011-07-06 09:22:00 UTC
  • mfrom: (6008 +trunk)
  • mto: (6012.1.1 trunk)
  • mto: This revision was merged to the branch mainline in revision 6013.
  • Revision ID: v.ladeuil+lp@free.fr-20110706092200-7iai2mwzc0sqdsvf
MergingĀ inĀ trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 
18
18
"""Test operations that check the repository for corruption"""
19
19
 
20
 
import os
21
 
 
22
20
from bzrlib import (
23
 
    check,
24
21
    config as _mod_config,
25
 
    errors,
26
 
    inventory,
27
22
    revision as _mod_revision,
28
23
    )
29
 
from bzrlib.tests import TestNotApplicable
30
24
from bzrlib.tests.per_repository import TestCaseWithRepository
31
 
from bzrlib.tests.per_repository.helpers import (
32
 
    TestCaseWithBrokenRevisionIndex,
33
 
    )
34
25
 
35
26
 
36
27
class TestNoSpuriousInconsistentAncestors(TestCaseWithRepository):
49
40
        self.assertContainsRe(self.get_log(), "0 unreferenced text versions")
50
41
 
51
42
 
52
 
class TestFindInconsistentRevisionParents(TestCaseWithBrokenRevisionIndex):
53
 
 
54
 
    def test__find_inconsistent_revision_parents(self):
55
 
        """_find_inconsistent_revision_parents finds revisions with broken
56
 
        parents.
57
 
        """
58
 
        repo = self.make_repo_with_extra_ghost_index()
59
 
        self.assertEqual(
60
 
            [('revision-id', ('incorrect-parent',), ())],
61
 
            list(repo._find_inconsistent_revision_parents()))
62
 
 
63
 
    def test__check_for_inconsistent_revision_parents(self):
64
 
        """_check_for_inconsistent_revision_parents raises BzrCheckError if
65
 
        there are any revisions with inconsistent parents.
66
 
        """
67
 
        repo = self.make_repo_with_extra_ghost_index()
68
 
        self.assertRaises(
69
 
            errors.BzrCheckError,
70
 
            repo._check_for_inconsistent_revision_parents)
71
 
 
72
 
    def test__check_for_inconsistent_revision_parents_on_clean_repo(self):
73
 
        """_check_for_inconsistent_revision_parents does nothing if there are
74
 
        no broken revisions.
75
 
        """
76
 
        repo = self.make_repository('empty-repo')
77
 
        if not repo.revision_graph_can_have_wrong_parents():
78
 
            raise TestNotApplicable(
79
 
                '%r cannot have corrupt revision index.' % repo)
80
 
        repo.lock_read()
81
 
        try:
82
 
            repo._check_for_inconsistent_revision_parents()  # nothing happens
83
 
        finally:
84
 
            repo.unlock()
85
 
 
86
 
    def test_check_reports_bad_ancestor(self):
87
 
        repo = self.make_repo_with_extra_ghost_index()
88
 
        # XXX: check requires a non-empty revision IDs list, but it ignores the
89
 
        # contents of it!
90
 
        check_object = repo.check(['ignored'])
91
 
        check_object.report_results(verbose=False)
92
 
        self.assertContainsRe(self.get_log(),
93
 
            '1 revisions have incorrect parents in the revision index')
94
 
        check_object.report_results(verbose=True)
95
 
        self.assertContainsRe(
96
 
            self.get_log(),
97
 
            "revision-id has wrong parents in index: "
98
 
            r"\('incorrect-parent',\) should be \(\)")
99
 
 
100
 
 
101
 
class TestCallbacks(TestCaseWithRepository):
102
 
 
103
 
    def test_callback_tree_and_branch(self):
104
 
        # use a real tree to get actual refs that will work
105
 
        tree = self.make_branch_and_tree('foo')
106
 
        revid = tree.commit('foo')
107
 
        tree.lock_read()
108
 
        self.addCleanup(tree.unlock)
109
 
        needed_refs = {}
110
 
        for ref in tree._get_check_refs():
111
 
            needed_refs.setdefault(ref, []).append(tree)
112
 
        for ref in tree.branch._get_check_refs():
113
 
            needed_refs.setdefault(ref, []).append(tree.branch)
114
 
        self.tree_check = tree._check
115
 
        self.branch_check = tree.branch.check
116
 
        tree._check = self.tree_callback
117
 
        tree.branch.check = self.branch_callback
118
 
        self.callbacks = []
119
 
        tree.branch.repository.check([revid], callback_refs=needed_refs)
120
 
        self.assertNotEqual([], self.callbacks)
121
 
 
122
 
    def tree_callback(self, refs):
123
 
        self.callbacks.append(('tree', refs))
124
 
        return self.tree_check(refs)
125
 
 
126
 
    def branch_callback(self, refs):
127
 
        self.callbacks.append(('branch', refs))
128
 
        return self.branch_check(refs)
129
 
 
130
 
 
131
43
class TestCleanRepository(TestCaseWithRepository):
132
44
 
133
45
    def test_new_repo(self):