~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/check.py

  • Committer: Martin Pool
  • Date: 2005-08-23 00:40:27 UTC
  • Revision ID: mbp@sourcefrog.net-20050823004027-e6e45a392f540bb4
todo

Show diffs side-by-side

added added

removed removed

Lines of Context:
15
15
# along with this program; if not, write to the Free Software
16
16
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17
17
 
18
 
import bzrlib.ui
19
 
from bzrlib.trace import note, warning
20
18
 
21
19
def _update_store_entry(obj, obj_id, branch, store_name, store):
22
20
    """This is just a meta-function, which handles both revision entries
75
73
    _update_store_entry(inv, inv_id, branch,
76
74
            'inventory-store', branch.inventory_store)
77
75
 
78
 
 
79
76
def check(branch):
80
77
    """Run consistency checks on a branch.
81
78
 
84
81
    TODO: Check for extra files in the control directory.
85
82
    """
86
83
    from bzrlib.trace import mutter
87
 
    from bzrlib.errors import BzrCheckError, NoSuchRevision
 
84
    from bzrlib.errors import BzrCheckError
88
85
    from bzrlib.osutils import fingerprint_file
 
86
    from bzrlib.progress import ProgressBar
89
87
    from bzrlib.inventory import ROOT_ID
90
88
    from bzrlib.branch import gen_root_id
91
89
 
92
90
    branch.lock_read()
93
91
 
94
92
    try:
 
93
        pb = ProgressBar(show_spinner=True)
95
94
        last_rev_id = None
96
95
 
97
96
        missing_inventory_sha_cnt = 0
98
97
        missing_revision_sha_cnt = 0
99
 
        missing_revision_cnt = 0
100
98
 
101
99
        history = branch.revision_history()
102
100
        revno = 0
106
104
        # for all texts checked, text_id -> sha1
107
105
        checked_texts = {}
108
106
 
109
 
        progress = bzrlib.ui.ui_factory.progress_bar()
110
 
 
111
107
        for rev_id in history:
112
108
            revno += 1
113
 
            progress.update('checking revision', revno, revcount)
114
 
            # mutter('    revision {%s}' % rev_id)
 
109
            pb.update('checking revision', revno, revcount)
 
110
            mutter('    revision {%s}' % rev_id)
115
111
            rev = branch.get_revision(rev_id)
116
112
            if rev.revision_id != rev_id:
117
113
                raise BzrCheckError('wrong internal revision id in revision {%s}'
136
132
                        missing_revision_sha_cnt += 1
137
133
                        continue
138
134
                    prid = prr.revision_id
139
 
                    
140
 
                    try:
141
 
                        actual_sha = branch.get_revision_sha1(prid)
142
 
                    except NoSuchRevision:
143
 
                        missing_revision_cnt += 1
144
 
                        mutter("parent {%s} of {%s} not present in store",
145
 
                               prid, rev_id)
146
 
                        continue
147
 
                        
 
135
                    actual_sha = branch.get_revision_sha1(prid)
148
136
                    if prr.revision_sha1 != actual_sha:
149
137
                        raise BzrCheckError("mismatched revision sha1 for "
150
138
                                            "parent {%s} of {%s}: %s vs %s"
185
173
            for file_id in inv:
186
174
                i += 1
187
175
                if i & 31 == 0:
188
 
                    progress.tick()
 
176
                    pb.tick()
189
177
 
190
178
                ie = inv[file_id]
191
179
 
214
202
                        raise BzrCheckError('directory {%s} has text in revision {%s}'
215
203
                                % (file_id, rev_id))
216
204
 
217
 
            progress.tick()
 
205
            pb.tick()
218
206
            for path, ie in inv.iter_entries():
219
207
                if path in seen_names:
220
208
                    raise BzrCheckError('duplicated path %s '
226
214
    finally:
227
215
        branch.unlock()
228
216
 
229
 
    progress.clear()
 
217
    pb.clear()
230
218
 
231
 
    note('checked %d revisions, %d file texts' % (revcount, len(checked_texts)))
 
219
    print 'checked %d revisions, %d file texts' % (revcount, len(checked_texts))
232
220
    
233
221
    if missing_inventory_sha_cnt:
234
 
        note('%d revisions are missing inventory_sha1' % missing_inventory_sha_cnt)
 
222
        print '%d revisions are missing inventory_sha1' % missing_inventory_sha_cnt
235
223
 
236
224
    if missing_revision_sha_cnt:
237
 
        note('%d parent links are missing revision_sha1' % missing_revision_sha_cnt)
238
 
 
239
 
    if missing_revision_cnt:
240
 
        note('%d revisions are mentioned but not present' % missing_revision_cnt)
241
 
 
242
 
    if missing_revision_cnt:
243
 
        print '%d revisions are mentioned but not present' % missing_revision_cnt
 
225
        print '%d parent links are missing revision_sha1' % missing_revision_sha_cnt
244
226
 
245
227
    # stub this out for now because the main bzr branch has references
246
228
    # to revisions that aren't present in the store -- mbp 20050804
249
231
#        print '  (use "bzr upgrade" to fix them)'
250
232
 
251
233
    if mismatch_inv_id:
252
 
        warning('%d revisions have mismatched inventory ids:' % len(mismatch_inv_id))
 
234
        print '%d revisions have mismatched inventory ids:' % len(mismatch_inv_id)
253
235
        for rev_id in mismatch_inv_id:
254
 
            warning('  %s', rev_id)
 
236
            print '  ', rev_id