39
39
so that when the dependent object is checked, matches can be pulled out and
40
40
evaluated in-line rather than re-reading the same data many times.
41
41
check_refs are tuples (kind, value). Currently defined kinds are:
43
42
* 'trees', where value is a revid and the looked up objects are revision trees.
44
43
* 'lefthand-distance', where value is a revid and the looked up objects are the
45
44
distance along the lefthand path to NULL for that revid.
47
46
indicating that the revision was found/not found.
49
from bzrlib import errors
54
50
from bzrlib.branch import Branch
55
51
from bzrlib.bzrdir import BzrDir
56
52
from bzrlib.revision import NULL_REVISION
53
from bzrlib.symbol_versioning import deprecated_function, deprecated_in
57
54
from bzrlib.trace import note
58
56
from bzrlib.workingtree import WorkingTree
61
58
class Check(object):
62
59
"""Check a repository"""
64
def __init__(self, repository, check_repo=True):
65
self.repository = repository
67
def report_results(self, verbose):
68
raise NotImplementedError(self.report_results)
71
class VersionedFileCheck(Check):
72
"""Check a versioned file repository"""
74
61
# The Check object interacts with InventoryEntry.check, etc.
76
63
def __init__(self, repository, check_repo=True):
101
88
if callback_refs is None:
102
89
callback_refs = {}
103
90
self.repository.lock_read()
104
self.progress = ui.ui_factory.nested_progress_bar()
91
self.progress = bzrlib.ui.ui_factory.nested_progress_bar()
106
93
self.progress.update('check', 0, 4)
107
94
if self.check_repo:
183
170
# - we can fill out existence flags at this point
184
171
# - we can read the revision inventory sha at this point
185
172
# - we can check properties and serialisers etc.
186
if not self.repository._format.revision_graph_can_have_wrong_parents:
173
if not self.repository.revision_graph_can_have_wrong_parents():
187
174
# The check against the index isn't needed.
188
175
self.revs_with_bad_parents_in_index = None
189
176
for thing in revision_iterator:
341
328
self.text_key_references[key] = True
331
@deprecated_function(deprecated_in((1,6,0)))
332
def check(branch, verbose):
333
"""Run consistency checks on a branch.
335
Results are reported through logging.
337
Deprecated in 1.6. Please use check_dwim instead.
339
:raise BzrCheckError: if there's a consistency error.
341
check_branch(branch, verbose)
344
@deprecated_function(deprecated_in((1,16,0)))
345
def check_branch(branch, verbose):
346
"""Run consistency checks on a branch.
348
Results are reported through logging.
350
:raise BzrCheckError: if there's a consistency error.
355
for ref in branch._get_check_refs():
356
needed_refs.setdefault(ref, []).append(branch)
357
result = branch.repository.check([branch.last_revision()], needed_refs)
358
branch_result = result.other_results[0]
361
branch_result.report_results(verbose)
344
364
def scan_branch(branch, needed_refs, to_unlock):
345
365
"""Scan a branch for refs.