~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

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

  • Committer: Martin Pool
  • Date: 2009-09-14 01:48:28 UTC
  • mfrom: (4685 +trunk)
  • mto: This revision was merged to the branch mainline in revision 4688.
  • Revision ID: mbp@sourcefrog.net-20090914014828-ydr9rlkdfq2sv57z
Merge news

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
20
21
 
21
22
from bzrlib import (
 
23
    check,
 
24
    config as _mod_config,
22
25
    errors,
 
26
    inventory,
23
27
    revision as _mod_revision,
24
28
    )
25
29
from bzrlib.tests import TestNotApplicable
36
40
        tree = self.make_branch_and_tree('.')
37
41
        self.build_tree(['foo'])
38
42
        tree.smart_add(['.'])
39
 
        tree.commit('1')
 
43
        revid1 = tree.commit('1')
40
44
        self.build_tree(['bar'])
41
45
        tree.smart_add(['.'])
42
 
        tree.commit('2')
43
 
        # XXX: check requires a non-empty revision IDs list, but it ignores the
44
 
        # contents of it!
45
 
        check_object = tree.branch.repository.check(['ignored'])
 
46
        revid2 = tree.commit('2')
 
47
        check_object = tree.branch.repository.check([revid1, revid2])
46
48
        check_object.report_results(verbose=True)
47
49
        log = self._get_log(keep_log_file=True)
48
 
        self.assertContainsRe(
49
 
            log,
50
 
            "0 unreferenced text versions")
 
50
        self.assertContainsRe(log, "0 unreferenced text versions")
51
51
 
52
52
 
53
53
class TestFindInconsistentRevisionParents(TestCaseWithBrokenRevisionIndex):
100
100
            "revision-id has wrong parents in index: "
101
101
            r"\('incorrect-parent',\) should be \(\)")
102
102
 
 
103
 
 
104
class TestCallbacks(TestCaseWithRepository):
 
105
 
 
106
    def test_callback_tree_and_branch(self):
 
107
        # use a real tree to get actual refs that will work
 
108
        tree = self.make_branch_and_tree('foo')
 
109
        revid = tree.commit('foo')
 
110
        tree.lock_read()
 
111
        self.addCleanup(tree.unlock)
 
112
        needed_refs = {}
 
113
        for ref in tree._get_check_refs():
 
114
            needed_refs.setdefault(ref, []).append(tree)
 
115
        for ref in tree.branch._get_check_refs():
 
116
            needed_refs.setdefault(ref, []).append(tree.branch)
 
117
        self.tree_check = tree._check
 
118
        self.branch_check = tree.branch.check
 
119
        tree._check = self.tree_callback
 
120
        tree.branch.check = self.branch_callback
 
121
        self.callbacks = []
 
122
        tree.branch.repository.check([revid], callback_refs=needed_refs)
 
123
        self.assertNotEqual([], self.callbacks)
 
124
 
 
125
    def tree_callback(self, refs):
 
126
        self.callbacks.append(('tree', refs))
 
127
        return self.tree_check(refs)
 
128
 
 
129
    def branch_callback(self, refs):
 
130
        self.callbacks.append(('branch', refs))
 
131
        return self.branch_check(refs)
 
132
 
 
133
 
 
134
class TestCleanRepository(TestCaseWithRepository):
 
135
 
 
136
    def test_new_repo(self):
 
137
        repo = self.make_repository('foo')
 
138
        repo.lock_write()
 
139
        self.addCleanup(repo.unlock)
 
140
        config = _mod_config.Config()
 
141
        os.environ['BZR_EMAIL'] = 'foo@sample.com'
 
142
        builder = repo.get_commit_builder(None, [], config)
 
143
        list(builder.record_iter_changes(None, _mod_revision.NULL_REVISION, [
 
144
            ('TREE_ROOT', (None, ''), True, (False, True), (None, None),
 
145
            (None, ''), (None, 'directory'), (None, False))]))
 
146
        builder.finish_inventory()
 
147
        rev_id = builder.commit('first post')
 
148
        result = repo.check(None, check_repo=True)
 
149
        result.report_results(True)
 
150
        log = self._get_log(keep_log_file=True)
 
151
        self.assertFalse('Missing' in log, "Something was missing in %r" % log)