~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/check.py

  • Committer: mbp at sourcefrog
  • Date: 2005-03-29 00:03:28 UTC
  • Revision ID: mbp@sourcefrog.net-20050329000328-325b6ef27ad5cae7
- progress indicator while checking
- check file ids are not duplicated in the inventory

Show diffs side-by-side

added added

removed removed

Lines of Context:
20
20
######################################################################
21
21
# consistency checks
22
22
 
23
 
 
 
23
import sys
24
24
from sets import Set
25
25
 
26
26
import bzrlib
28
28
from errors import bailout
29
29
 
30
30
 
31
 
def check(branch):
32
 
    mutter('checking tree %r' % branch.base)
33
 
 
34
 
    mutter('checking revision history')
 
31
def check(branch, progress=True):
 
32
    out = sys.stdout
 
33
 
 
34
    if progress:
 
35
        def p(m):
 
36
            mutter('checking ' + m)
 
37
            out.write('\rchecking: %-50.50s' % m)
 
38
            out.flush()
 
39
    else:
 
40
        def p(m):
 
41
            mutter('checking ' + m)
 
42
 
 
43
    p('history of %r' % branch.base)
35
44
    last_ptr = None
36
45
    checked_revs = Set()
37
 
    for rid in branch.revision_history():
 
46
    
 
47
    history = branch.revision_history()
 
48
    revno = 0
 
49
    revcount = len(history)
 
50
    
 
51
    for rid in history:
 
52
        revno += 1
 
53
        p('revision %d/%d' % (revno, revcount))
38
54
        mutter('    revision {%s}' % rid)
39
55
        rev = branch.get_revision(rid)
40
56
        if rev.revision_id != rid:
49
65
        ## TODO: Check all the required fields are present on the revision.
50
66
 
51
67
        inv = branch.get_inventory(rev.inventory_id)
52
 
        check_inventory(branch, inv)
53
 
 
54
 
    mutter('branch %s is OK' % branch.base)
55
 
 
56
 
 
57
 
 
58
 
def check_inventory(branch, inv):
 
68
        check_inventory(branch, inv, rid)
 
69
 
 
70
    p('done')
 
71
    if progress:
 
72
        print 
 
73
 
 
74
 
 
75
 
 
76
def check_inventory(branch, inv, revid):
59
77
    seen_ids = Set()
60
78
    seen_names = Set()
61
79
 
62
80
    for path, ie in inv.iter_entries():
63
81
        if path in seen_names:
64
 
            bailout('duplicated path %r in inventory' % path)
 
82
            bailout('duplicated path %r in inventory for revision {%s}' % (path, revid))
65
83
        seen_names.add(path)
 
84
        
 
85
        if ie.file_id in seen_ids:
 
86
            bailout('duplicated file_id {%s} in inventory for revision {%s}'
 
87
                    % (ie.file_id, revid))
 
88
        seen_ids.add(ie.file_id)
 
89
            
66
90
        if ie.kind == 'file':
67
91
            if not ie.text_id in branch.text_store:
68
92
                bailout('text {%s} not in text_store' % ie.text_id)