~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/check.py

  • Committer: aaron.bentley at utoronto
  • Date: 2005-08-27 04:42:41 UTC
  • mfrom: (1092.1.43)
  • mto: (1185.3.4)
  • mto: This revision was merged to the branch mainline in revision 1178.
  • Revision ID: aaron.bentley@utoronto.ca-20050827044241-23d676133b9fc981
Merge of robertc@robertcollins.net-20050826013321-52eee1f1da679ee9

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