equal
deleted
inserted
replaced
132 seen[node] = i |
132 seen[node] = i |
133 return lr |
133 return lr |
134 |
134 |
135 def verify(self): |
135 def verify(self): |
136 repo = self.repo |
136 repo = self.repo |
137 mflinkrevs = {} |
|
138 filelinkrevs = {} |
|
139 filenodes = {} |
|
140 |
137 |
141 ui = repo.ui |
138 ui = repo.ui |
142 |
139 |
143 if not repo.url().startswith('file:'): |
140 if not repo.url().startswith('file:'): |
144 raise error.Abort(_("cannot verify bundle or remote repos")) |
141 raise error.Abort(_("cannot verify bundle or remote repos")) |
148 |
145 |
149 if ui.verbose or not self.revlogv1: |
146 if ui.verbose or not self.revlogv1: |
150 ui.status(_("repository uses revlog format %d\n") % |
147 ui.status(_("repository uses revlog format %d\n") % |
151 (self.revlogv1 and 1 or 0)) |
148 (self.revlogv1 and 1 or 0)) |
152 |
149 |
153 self._verifychangelog(mflinkrevs, filelinkrevs) |
150 mflinkrevs, filelinkrevs = self._verifychangelog() |
154 |
151 |
155 self._verifymanifest(mflinkrevs, filenodes) |
152 filenodes = self._verifymanifest(mflinkrevs) |
156 |
153 |
157 self._crosscheckfiles(mflinkrevs, filelinkrevs, filenodes) |
154 self._crosscheckfiles(mflinkrevs, filelinkrevs, filenodes) |
158 |
155 |
159 totalfiles, filerevisions = self._verifyfiles(filenodes, filelinkrevs) |
156 totalfiles, filerevisions = self._verifyfiles(filenodes, filelinkrevs) |
160 |
157 |
170 if self.badrevs: |
167 if self.badrevs: |
171 ui.warn(_("(first damaged changeset appears to be %d)\n") |
168 ui.warn(_("(first damaged changeset appears to be %d)\n") |
172 % min(self.badrevs)) |
169 % min(self.badrevs)) |
173 return 1 |
170 return 1 |
174 |
171 |
175 def _verifychangelog(self, mflinkrevs, filelinkrevs): |
172 def _verifychangelog(self): |
176 ui = self.ui |
173 ui = self.ui |
177 repo = self.repo |
174 repo = self.repo |
178 cl = repo.changelog |
175 cl = repo.changelog |
179 |
176 |
180 ui.status(_("checking changesets\n")) |
177 ui.status(_("checking changesets\n")) |
|
178 mflinkrevs = {} |
|
179 filelinkrevs = {} |
181 seen = {} |
180 seen = {} |
182 self.checklog(cl, "changelog", 0) |
181 self.checklog(cl, "changelog", 0) |
183 total = len(repo) |
182 total = len(repo) |
184 for i in repo: |
183 for i in repo: |
185 ui.progress(_('checking'), i, total=total, unit=_('changesets')) |
184 ui.progress(_('checking'), i, total=total, unit=_('changesets')) |
196 filelinkrevs.setdefault(_normpath(f), []).append(i) |
195 filelinkrevs.setdefault(_normpath(f), []).append(i) |
197 except Exception as inst: |
196 except Exception as inst: |
198 self.refersmf = True |
197 self.refersmf = True |
199 self.exc(i, _("unpacking changeset %s") % short(n), inst) |
198 self.exc(i, _("unpacking changeset %s") % short(n), inst) |
200 ui.progress(_('checking'), None) |
199 ui.progress(_('checking'), None) |
201 |
200 return mflinkrevs, filelinkrevs |
202 def _verifymanifest(self, mflinkrevs, filenodes): |
201 |
|
202 def _verifymanifest(self, mflinkrevs): |
203 repo = self.repo |
203 repo = self.repo |
204 ui = self.ui |
204 ui = self.ui |
205 mf = self.repo.manifest |
205 mf = self.repo.manifest |
206 |
206 |
207 ui.status(_("checking manifests\n")) |
207 ui.status(_("checking manifests\n")) |
|
208 filenodes = {} |
208 seen = {} |
209 seen = {} |
209 if self.refersmf: |
210 if self.refersmf: |
210 # Do not check manifest if there are only changelog entries with |
211 # Do not check manifest if there are only changelog entries with |
211 # null manifests. |
212 # null manifests. |
212 self.checklog(mf, "manifest", 0) |
213 self.checklog(mf, "manifest", 0) |
231 _normpath(f), {}).setdefault(fn, lr) |
232 _normpath(f), {}).setdefault(fn, lr) |
232 except Exception as inst: |
233 except Exception as inst: |
233 self.exc(lr, _("reading manifest delta %s") % short(n), inst) |
234 self.exc(lr, _("reading manifest delta %s") % short(n), inst) |
234 ui.progress(_('checking'), None) |
235 ui.progress(_('checking'), None) |
235 |
236 |
236 return mflinkrevs |
237 return filenodes |
237 |
238 |
238 def _crosscheckfiles(self, mflinkrevs, filelinkrevs, filenodes): |
239 def _crosscheckfiles(self, mflinkrevs, filelinkrevs, filenodes): |
239 repo = self.repo |
240 repo = self.repo |
240 ui = self.ui |
241 ui = self.ui |
241 ui.status(_("crosschecking files in changesets and manifests\n")) |
242 ui.status(_("crosschecking files in changesets and manifests\n")) |