Mercurial > public > mercurial-scm > hg
comparison mercurial/verify.py @ 27644:331e5c28f5f0
verify: move filelog verification to its own function
This makes verify more modular so extensions can hook in more easily.
author | Durham Goode <durham@fb.com> |
---|---|
date | Tue, 05 Jan 2016 18:28:46 -0800 |
parents | 62ce86fcfd06 |
children | df8973e1fb45 |
comparison
equal
deleted
inserted
replaced
27643:62ce86fcfd06 | 27644:331e5c28f5f0 |
---|---|
140 revisions = 0 | 140 revisions = 0 |
141 badrevs = self.badrevs | 141 badrevs = self.badrevs |
142 ui = repo.ui | 142 ui = repo.ui |
143 cl = repo.changelog | 143 cl = repo.changelog |
144 mf = repo.manifest | 144 mf = repo.manifest |
145 lrugetctx = self.lrugetctx | |
146 | 145 |
147 if not repo.url().startswith('file:'): | 146 if not repo.url().startswith('file:'): |
148 raise error.Abort(_("cannot verify bundle or remote repos")) | 147 raise error.Abort(_("cannot verify bundle or remote repos")) |
149 | 148 |
150 if os.path.exists(repo.sjoin("journal")): | 149 if os.path.exists(repo.sjoin("journal")): |
243 lr = None | 242 lr = None |
244 self.err(lr, _("in manifest but not in changeset"), f) | 243 self.err(lr, _("in manifest but not in changeset"), f) |
245 | 244 |
246 ui.progress(_('crosschecking'), None) | 245 ui.progress(_('crosschecking'), None) |
247 | 246 |
247 totalfiles, filerevisions = self._verifyfiles(filenodes, filelinkrevs) | |
248 revisions += filerevisions | |
249 | |
250 ui.status(_("%d files, %d changesets, %d total revisions\n") % | |
251 (totalfiles, len(cl), revisions)) | |
252 if self.warnings: | |
253 ui.warn(_("%d warnings encountered!\n") % self.warnings) | |
254 if self.fncachewarned: | |
255 ui.warn(_('hint: run "hg debugrebuildfncache" to recover from ' | |
256 'corrupt fncache\n')) | |
257 if self.errors: | |
258 ui.warn(_("%d integrity errors encountered!\n") % self.errors) | |
259 if badrevs: | |
260 ui.warn(_("(first damaged changeset appears to be %d)\n") | |
261 % min(badrevs)) | |
262 return 1 | |
263 | |
264 def _verifyfiles(self, filenodes, filelinkrevs): | |
265 repo = self.repo | |
266 ui = self.ui | |
267 lrugetctx = self.lrugetctx | |
268 revlogv1 = self.revlogv1 | |
269 havemf = self.havemf | |
248 ui.status(_("checking files\n")) | 270 ui.status(_("checking files\n")) |
249 | 271 |
250 storefiles = set() | 272 storefiles = set() |
251 for f, f2, size in repo.store.datafiles(): | 273 for f, f2, size in repo.store.datafiles(): |
252 if not f: | 274 if not f: |
254 elif size > 0 or not revlogv1: | 276 elif size > 0 or not revlogv1: |
255 storefiles.add(_normpath(f)) | 277 storefiles.add(_normpath(f)) |
256 | 278 |
257 files = sorted(set(filenodes) | set(filelinkrevs)) | 279 files = sorted(set(filenodes) | set(filelinkrevs)) |
258 total = len(files) | 280 total = len(files) |
281 revisions = 0 | |
259 for i, f in enumerate(files): | 282 for i, f in enumerate(files): |
260 ui.progress(_('checking'), i, item=f, total=total) | 283 ui.progress(_('checking'), i, item=f, total=total) |
261 try: | 284 try: |
262 linkrevs = filelinkrevs[f] | 285 linkrevs = filelinkrevs[f] |
263 except KeyError: | 286 except KeyError: |
345 ui.progress(_('checking'), None) | 368 ui.progress(_('checking'), None) |
346 | 369 |
347 for f in storefiles: | 370 for f in storefiles: |
348 self.warn(_("warning: orphan revlog '%s'") % f) | 371 self.warn(_("warning: orphan revlog '%s'") % f) |
349 | 372 |
350 ui.status(_("%d files, %d changesets, %d total revisions\n") % | 373 return len(files), revisions |
351 (len(files), len(cl), revisions)) | |
352 if self.warnings: | |
353 ui.warn(_("%d warnings encountered!\n") % self.warnings) | |
354 if self.fncachewarned: | |
355 ui.warn(_('hint: run "hg debugrebuildfncache" to recover from ' | |
356 'corrupt fncache\n')) | |
357 if self.errors: | |
358 ui.warn(_("%d integrity errors encountered!\n") % self.errors) | |
359 if badrevs: | |
360 ui.warn(_("(first damaged changeset appears to be %d)\n") | |
361 % min(badrevs)) | |
362 return 1 |