mercurial/verify.py
changeset 28205 53f42c8d5f71
parent 28204 962921c330b0
child 28467 bd37f0d53a49
equal deleted inserted replaced
28204:962921c330b0 28205:53f42c8d5f71
   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