Mercurial > hg
comparison mercurial/verify.py @ 27448:f4f2179077cb
verify: move exc() function onto class
This is part of an effort to make verify more modular so extensions can hook
into it.
author | Durham Goode <durham@fb.com> |
---|---|
date | Fri, 18 Dec 2015 16:42:39 -0800 |
parents | d1b91c10ce70 |
children | 467338e690f8 |
comparison
equal
deleted
inserted
replaced
27447:d1b91c10ce70 | 27448:f4f2179077cb |
---|---|
73 if filename: | 73 if filename: |
74 msg = "%s@%s" % (filename, msg) | 74 msg = "%s@%s" % (filename, msg) |
75 self.ui.warn(" " + msg + "\n") | 75 self.ui.warn(" " + msg + "\n") |
76 self.errors[0] += 1 | 76 self.errors[0] += 1 |
77 | 77 |
78 def exc(self, linkrev, msg, inst, filename=None): | |
79 if isinstance(inst, KeyboardInterrupt): | |
80 self.ui.warn(_("interrupted")) | |
81 raise | |
82 if not str(inst): | |
83 inst = repr(inst) | |
84 self.err(linkrev, "%s: %s" % (msg, inst), filename) | |
85 | |
78 def verify(self): | 86 def verify(self): |
79 repo = self.repo | 87 repo = self.repo |
80 mflinkrevs = {} | 88 mflinkrevs = {} |
81 filelinkrevs = {} | 89 filelinkrevs = {} |
82 filenodes = {} | 90 filenodes = {} |
89 mf = repo.manifest | 97 mf = repo.manifest |
90 lrugetctx = self.lrugetctx | 98 lrugetctx = self.lrugetctx |
91 | 99 |
92 if not repo.url().startswith('file:'): | 100 if not repo.url().startswith('file:'): |
93 raise error.Abort(_("cannot verify bundle or remote repos")) | 101 raise error.Abort(_("cannot verify bundle or remote repos")) |
94 | |
95 | |
96 def exc(linkrev, msg, inst, filename=None): | |
97 if isinstance(inst, KeyboardInterrupt): | |
98 ui.warn(_("interrupted")) | |
99 raise | |
100 if not str(inst): | |
101 inst = repr(inst) | |
102 self.err(linkrev, "%s: %s" % (msg, inst), filename) | |
103 | |
104 | 102 |
105 def checklog(obj, name, linkrev): | 103 def checklog(obj, name, linkrev): |
106 if not len(obj) and (havecl or havemf): | 104 if not len(obj) and (havecl or havemf): |
107 self.err(linkrev, _("empty or missing %s") % name) | 105 self.err(linkrev, _("empty or missing %s") % name) |
108 return | 106 return |
146 (short(p1), short(node)), f) | 144 (short(p1), short(node)), f) |
147 if p2 not in seen and p2 != nullid: | 145 if p2 not in seen and p2 != nullid: |
148 self.err(lr, _("unknown parent 2 %s of %s") % | 146 self.err(lr, _("unknown parent 2 %s of %s") % |
149 (short(p2), short(node)), f) | 147 (short(p2), short(node)), f) |
150 except Exception as inst: | 148 except Exception as inst: |
151 exc(lr, _("checking parents of %s") % short(node), inst, f) | 149 self.exc(lr, _("checking parents of %s") % short(node), inst, f) |
152 | 150 |
153 if node in seen: | 151 if node in seen: |
154 self.err(lr, _("duplicate revision %d (%d)") % | 152 self.err(lr, _("duplicate revision %d (%d)") % |
155 (i, seen[node]), f) | 153 (i, seen[node]), f) |
156 seen[node] = i | 154 seen[node] = i |
184 for f in changes[3]: | 182 for f in changes[3]: |
185 if _validpath(repo, f): | 183 if _validpath(repo, f): |
186 filelinkrevs.setdefault(_normpath(f), []).append(i) | 184 filelinkrevs.setdefault(_normpath(f), []).append(i) |
187 except Exception as inst: | 185 except Exception as inst: |
188 self.refersmf = True | 186 self.refersmf = True |
189 exc(i, _("unpacking changeset %s") % short(n), inst) | 187 self.exc(i, _("unpacking changeset %s") % short(n), inst) |
190 ui.progress(_('checking'), None) | 188 ui.progress(_('checking'), None) |
191 | 189 |
192 ui.status(_("checking manifests\n")) | 190 ui.status(_("checking manifests\n")) |
193 seen = {} | 191 seen = {} |
194 if self.refersmf: | 192 if self.refersmf: |
212 elif f != "/dev/null": # ignore this in very old repos | 210 elif f != "/dev/null": # ignore this in very old repos |
213 if _validpath(repo, f): | 211 if _validpath(repo, f): |
214 filenodes.setdefault( | 212 filenodes.setdefault( |
215 _normpath(f), {}).setdefault(fn, lr) | 213 _normpath(f), {}).setdefault(fn, lr) |
216 except Exception as inst: | 214 except Exception as inst: |
217 exc(lr, _("reading manifest delta %s") % short(n), inst) | 215 self.exc(lr, _("reading manifest delta %s") % short(n), inst) |
218 ui.progress(_('checking'), None) | 216 ui.progress(_('checking'), None) |
219 | 217 |
220 ui.status(_("crosschecking files in changesets and manifests\n")) | 218 ui.status(_("crosschecking files in changesets and manifests\n")) |
221 | 219 |
222 total = len(mflinkrevs) + len(filelinkrevs) + len(filenodes) | 220 total = len(mflinkrevs) + len(filelinkrevs) + len(filenodes) |
314 except error.CensoredNodeError: | 312 except error.CensoredNodeError: |
315 # experimental config: censor.policy | 313 # experimental config: censor.policy |
316 if ui.config("censor", "policy", "abort") == "abort": | 314 if ui.config("censor", "policy", "abort") == "abort": |
317 self.err(lr, _("censored file data"), f) | 315 self.err(lr, _("censored file data"), f) |
318 except Exception as inst: | 316 except Exception as inst: |
319 exc(lr, _("unpacking %s") % short(n), inst, f) | 317 self.exc(lr, _("unpacking %s") % short(n), inst, f) |
320 | 318 |
321 # check renames | 319 # check renames |
322 try: | 320 try: |
323 if rp: | 321 if rp: |
324 if lr is not None and ui.verbose: | 322 if lr is not None and ui.verbose: |
340 " revision is nullid %s:%s\n") | 338 " revision is nullid %s:%s\n") |
341 % (f, lr, rp[0], short(rp[1]))) | 339 % (f, lr, rp[0], short(rp[1]))) |
342 else: | 340 else: |
343 fl2.rev(rp[1]) | 341 fl2.rev(rp[1]) |
344 except Exception as inst: | 342 except Exception as inst: |
345 exc(lr, _("checking rename of %s") % short(n), inst, f) | 343 self.exc(lr, _("checking rename of %s") % short(n), inst, f) |
346 | 344 |
347 # cross-check | 345 # cross-check |
348 if f in filenodes: | 346 if f in filenodes: |
349 fns = [(lr, n) for n, lr in filenodes[f].iteritems()] | 347 fns = [(lr, n) for n, lr in filenodes[f].iteritems()] |
350 for lr, node in sorted(fns): | 348 for lr, node in sorted(fns): |