mercurial/verify.py
changeset 27647 2c2858f3c1bb
parent 27646 8f43793382c6
child 27648 e72e669dd51f
equal deleted inserted replaced
27646:8f43793382c6 27647:2c2858f3c1bb
   151         revlogv1 = self.revlogv1
   151         revlogv1 = self.revlogv1
   152         if ui.verbose or not revlogv1:
   152         if ui.verbose or not revlogv1:
   153             ui.status(_("repository uses revlog format %d\n") %
   153             ui.status(_("repository uses revlog format %d\n") %
   154                            (revlogv1 and 1 or 0))
   154                            (revlogv1 and 1 or 0))
   155 
   155 
   156         ui.status(_("checking changesets\n"))
   156         self._verifychangelog(mflinkrevs, filelinkrevs)
   157         seen = {}
       
   158         self.checklog(cl, "changelog", 0)
       
   159         total = len(repo)
       
   160         for i in repo:
       
   161             ui.progress(_('checking'), i, total=total, unit=_('changesets'))
       
   162             n = cl.node(i)
       
   163             self.checkentry(cl, i, n, seen, [i], "changelog")
       
   164 
       
   165             try:
       
   166                 changes = cl.read(n)
       
   167                 if changes[0] != nullid:
       
   168                     mflinkrevs.setdefault(changes[0], []).append(i)
       
   169                     self.refersmf = True
       
   170                 for f in changes[3]:
       
   171                     if _validpath(repo, f):
       
   172                         filelinkrevs.setdefault(_normpath(f), []).append(i)
       
   173             except Exception as inst:
       
   174                 self.refersmf = True
       
   175                 self.exc(i, _("unpacking changeset %s") % short(n), inst)
       
   176         ui.progress(_('checking'), None)
       
   177 
   157 
   178         self._verifymanifest(mflinkrevs, filenodes)
   158         self._verifymanifest(mflinkrevs, filenodes)
   179 
   159 
   180         self._crosscheckfiles(mflinkrevs, filelinkrevs, filenodes)
   160         self._crosscheckfiles(mflinkrevs, filelinkrevs, filenodes)
   181 
   161 
   193             ui.warn(_("%d integrity errors encountered!\n") % self.errors)
   173             ui.warn(_("%d integrity errors encountered!\n") % self.errors)
   194             if badrevs:
   174             if badrevs:
   195                 ui.warn(_("(first damaged changeset appears to be %d)\n")
   175                 ui.warn(_("(first damaged changeset appears to be %d)\n")
   196                         % min(badrevs))
   176                         % min(badrevs))
   197             return 1
   177             return 1
       
   178 
       
   179     def _verifychangelog(self, mflinkrevs, filelinkrevs):
       
   180         ui = self.ui
       
   181         repo = self.repo
       
   182         cl = repo.changelog
       
   183 
       
   184         ui.status(_("checking changesets\n"))
       
   185         seen = {}
       
   186         self.checklog(cl, "changelog", 0)
       
   187         total = len(repo)
       
   188         for i in repo:
       
   189             ui.progress(_('checking'), i, total=total, unit=_('changesets'))
       
   190             n = cl.node(i)
       
   191             self.checkentry(cl, i, n, seen, [i], "changelog")
       
   192 
       
   193             try:
       
   194                 changes = cl.read(n)
       
   195                 if changes[0] != nullid:
       
   196                     mflinkrevs.setdefault(changes[0], []).append(i)
       
   197                     self.refersmf = True
       
   198                 for f in changes[3]:
       
   199                     if _validpath(repo, f):
       
   200                         filelinkrevs.setdefault(_normpath(f), []).append(i)
       
   201             except Exception as inst:
       
   202                 self.refersmf = True
       
   203                 self.exc(i, _("unpacking changeset %s") % short(n), inst)
       
   204         ui.progress(_('checking'), None)
   198 
   205 
   199     def _verifymanifest(self, mflinkrevs, filenodes):
   206     def _verifymanifest(self, mflinkrevs, filenodes):
   200         repo = self.repo
   207         repo = self.repo
   201         ui = self.ui
   208         ui = self.ui
   202         mf = self.repo.manifest
   209         mf = self.repo.manifest