~bzr-pqm/bzr/bzr.dev

« back to all changes in this revision

Viewing changes to bzrlib/check.py

  • Committer: Aaron Bentley
  • Date: 2005-08-25 13:10:25 UTC
  • mfrom: (974.1.38)
  • mto: (1092.1.42) (1185.3.4)
  • mto: This revision was merged to the branch mainline in revision 1178.
  • Revision ID: abentley@panoramicfeedback.com-20050825131025-2aa94bcbbd646a00
Fixed return value when not an ImmutableStore

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