195 self.refersmf = True |
195 self.refersmf = True |
196 self.exc(i, _("unpacking changeset %s") % short(n), inst) |
196 self.exc(i, _("unpacking changeset %s") % short(n), inst) |
197 ui.progress(_('checking'), None) |
197 ui.progress(_('checking'), None) |
198 return mflinkrevs, filelinkrevs |
198 return mflinkrevs, filelinkrevs |
199 |
199 |
200 def _verifymanifest(self, mflinkrevs, dir="", storefiles=None): |
200 def _verifymanifest(self, mflinkrevs, dir="", storefiles=None, |
|
201 progress=None): |
201 repo = self.repo |
202 repo = self.repo |
202 ui = self.ui |
203 ui = self.ui |
203 mf = self.repo.manifest.dirlog(dir) |
204 mf = self.repo.manifest.dirlog(dir) |
204 |
205 |
205 if not dir: |
206 if not dir: |
211 label = "manifest" |
212 label = "manifest" |
212 if dir: |
213 if dir: |
213 label = dir |
214 label = dir |
214 revlogfiles = mf.files() |
215 revlogfiles = mf.files() |
215 storefiles.difference_update(revlogfiles) |
216 storefiles.difference_update(revlogfiles) |
|
217 if progress: # should be true since we're in a subdirectory |
|
218 progress() |
216 if self.refersmf: |
219 if self.refersmf: |
217 # Do not check manifest if there are only changelog entries with |
220 # Do not check manifest if there are only changelog entries with |
218 # null manifests. |
221 # null manifests. |
219 self.checklog(mf, label, 0) |
222 self.checklog(mf, label, 0) |
220 total = len(mf) |
223 total = len(mf) |
261 short(m), label) |
264 short(m), label) |
262 |
265 |
263 if not dir and subdirnodes: |
266 if not dir and subdirnodes: |
264 self.ui.status(_("checking directory manifests\n")) |
267 self.ui.status(_("checking directory manifests\n")) |
265 storefiles = set() |
268 storefiles = set() |
|
269 subdirs = set() |
266 revlogv1 = self.revlogv1 |
270 revlogv1 = self.revlogv1 |
267 for f, f2, size in repo.store.datafiles(): |
271 for f, f2, size in repo.store.datafiles(): |
268 if not f: |
272 if not f: |
269 self.err(None, _("cannot decode filename '%s'") % f2) |
273 self.err(None, _("cannot decode filename '%s'") % f2) |
270 elif (size > 0 or not revlogv1) and f.startswith('meta/'): |
274 elif (size > 0 or not revlogv1) and f.startswith('meta/'): |
271 storefiles.add(_normpath(f)) |
275 storefiles.add(_normpath(f)) |
|
276 subdirs.add(os.path.dirname(f)) |
|
277 subdircount = len(subdirs) |
|
278 currentsubdir = [0] |
|
279 def progress(): |
|
280 currentsubdir[0] += 1 |
|
281 ui.progress(_('checking'), currentsubdir[0], total=subdircount, |
|
282 unit=_('manifests')) |
272 |
283 |
273 for subdir, linkrevs in subdirnodes.iteritems(): |
284 for subdir, linkrevs in subdirnodes.iteritems(): |
274 subdirfilenodes = self._verifymanifest(linkrevs, subdir, storefiles) |
285 subdirfilenodes = self._verifymanifest(linkrevs, subdir, storefiles, |
|
286 progress) |
275 for f, onefilenodes in subdirfilenodes.iteritems(): |
287 for f, onefilenodes in subdirfilenodes.iteritems(): |
276 filenodes.setdefault(f, {}).update(onefilenodes) |
288 filenodes.setdefault(f, {}).update(onefilenodes) |
277 |
289 |
278 if not dir and subdirnodes: |
290 if not dir and subdirnodes: |
|
291 ui.progress(_('checking'), None) |
279 for f in sorted(storefiles): |
292 for f in sorted(storefiles): |
280 self.warn(_("warning: orphan revlog '%s'") % f) |
293 self.warn(_("warning: orphan revlog '%s'") % f) |
281 |
294 |
282 return filenodes |
295 return filenodes |
283 |
296 |