comparison mercurial/verify.py @ 27647:2c2858f3c1bb

verify: move changelog verificaiton to its own function This makes verify more modular so extensions can hook into it.
author Durham Goode <durham@fb.com>
date Tue, 05 Jan 2016 17:08:14 -0800
parents 8f43793382c6
children e72e669dd51f
comparison
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