/brz/remove-bazaar

To get this branch, use:
bzr branch http://gegoxaren.bato24.eu/bzr/brz/remove-bazaar
2745.6.7 by Aaron Bentley
Clean-up
1
# Copyright (C) 2007 Canonical Ltd
2
#
3
# This program is free software; you can redistribute it and/or modify
4
# it under the terms of the GNU General Public License as published by
5
# the Free Software Foundation; either version 2 of the License, or
6
# (at your option) any later version.
7
#
8
# This program is distributed in the hope that it will be useful,
9
# but WITHOUT ANY WARRANTY; without even the implied warranty of
10
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11
# GNU General Public License for more details.
12
#
13
# You should have received a copy of the GNU General Public License
14
# along with this program; if not, write to the Free Software
15
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
16
17
18
"""Test operations that check the repository for corruption"""
19
20
2745.6.1 by Aaron Bentley
Initial checking of knit graphs
21
from bzrlib import (
2745.6.48 by Andrew Bennetts
Merge find-inconsistent-parents.
22
    errors,
2745.6.1 by Aaron Bentley
Initial checking of knit graphs
23
    inventory,
24
    revision as _mod_revision,
25
    )
2745.6.48 by Andrew Bennetts
Merge find-inconsistent-parents.
26
from bzrlib.tests import TestNotApplicable
2745.6.42 by Andrew Bennetts
Use TestScenarioApplier to more cleanly parameterise check and reconcile tests.
27
from bzrlib.tests.repository_implementations import TestCaseWithRepository
2819.2.5 by Andrew Bennetts
Make reconcile abort gracefully if the revision index has bad parents.
28
from bzrlib.tests.repository_implementations.helpers import (
29
    TestCaseWithBrokenRevisionIndex,
2819.2.1 by Andrew Bennetts
Implement KnitRepository._find_inconsistent_revision_parents.
30
    )
31
32
2819.2.5 by Andrew Bennetts
Make reconcile abort gracefully if the revision index has bad parents.
33
class TestFindInconsistentRevisionParents(TestCaseWithBrokenRevisionIndex):
2819.2.1 by Andrew Bennetts
Implement KnitRepository._find_inconsistent_revision_parents.
34
2819.2.2 by Andrew Bennetts
Implement _check_for_inconsistent_revision_parents.
35
    def test__find_inconsistent_revision_parents(self):
36
        """_find_inconsistent_revision_parents finds revisions with broken
37
        parents.
38
        """
39
        repo = self.make_repo_with_extra_ghost_index()
2819.2.1 by Andrew Bennetts
Implement KnitRepository._find_inconsistent_revision_parents.
40
        self.assertEqual(
2592.3.214 by Robert Collins
Merge bzr.dev.
41
            [('revision-id', ('incorrect-parent',), ())],
2819.2.1 by Andrew Bennetts
Implement KnitRepository._find_inconsistent_revision_parents.
42
            list(repo._find_inconsistent_revision_parents()))
43
2819.2.2 by Andrew Bennetts
Implement _check_for_inconsistent_revision_parents.
44
    def test__check_for_inconsistent_revision_parents(self):
45
        """_check_for_inconsistent_revision_parents raises BzrCheckError if
46
        there are any revisions with inconsistent parents.
47
        """
48
        repo = self.make_repo_with_extra_ghost_index()
49
        self.assertRaises(
50
            errors.BzrCheckError,
51
            repo._check_for_inconsistent_revision_parents)
52
53
    def test__check_for_inconsistent_revision_parents_on_clean_repo(self):
54
        """_check_for_inconsistent_revision_parents does nothing if there are
55
        no broken revisions.
56
        """
57
        repo = self.make_repository('empty-repo')
2819.2.5 by Andrew Bennetts
Make reconcile abort gracefully if the revision index has bad parents.
58
        if not repo.revision_graph_can_have_wrong_parents():
59
            raise TestNotApplicable(
60
                '%r cannot have corrupt revision index.' % repo)
2592.3.214 by Robert Collins
Merge bzr.dev.
61
        repo.lock_read()
62
        try:
63
            repo._check_for_inconsistent_revision_parents()  # nothing happens
64
        finally:
65
            repo.unlock()
2819.2.2 by Andrew Bennetts
Implement _check_for_inconsistent_revision_parents.
66
2819.2.3 by Andrew Bennetts
Add test that repo.check will report on wrong parents in the revision graph.
67
    def test_check_reports_bad_ancestor(self):
68
        repo = self.make_repo_with_extra_ghost_index()
69
        # XXX: check requires a non-empty revision IDs list, but it ignores the
70
        # contents of it!
71
        check_object = repo.check(['ignored'])
72
        check_object.report_results(verbose=False)
73
        log = self._get_log(keep_log_file=True)
74
        self.assertContainsRe(
75
            log, '1 revisions have incorrect parents in the revision index')
76
        check_object.report_results(verbose=True)
77
        log = self._get_log(keep_log_file=True)
78
        self.assertContainsRe(
79
            log,
80
            "revision-id has wrong parents in index: "
2592.3.214 by Robert Collins
Merge bzr.dev.
81
            r"\('incorrect-parent',\) should be \(\)")
2819.2.3 by Andrew Bennetts
Add test that repo.check will report on wrong parents in the revision graph.
82