Mercurial > public > mercurial-scm > hg
annotate mercurial/verify.py @ 27444:6647401858ab
verify: move widely used variables into class members
This will allow us to start moving some of the nested functions inside verify()
out onto the class.
This will allow extensions to hook into verify more easily.
author | Durham Goode <durham@fb.com> |
---|---|
date | Fri, 18 Dec 2015 16:42:39 -0800 |
parents | 937e73a6e4ff |
children | cc178057ab49 |
rev | line source |
---|---|
2778 | 1 # verify.py - repository integrity checking for Mercurial |
2 # | |
4635
63b9d2deed48
Updated copyright notices and add "and others" to "hg version"
Thomas Arendsen Hein <thomas@intevation.de>
parents:
4395
diff
changeset
|
3 # Copyright 2006, 2007 Matt Mackall <mpm@selenic.com> |
2778 | 4 # |
8225
46293a0c7e9f
updated license to be explicit about GPL version 2
Martin Geisler <mg@lazybytes.net>
parents:
8209
diff
changeset
|
5 # This software may be used and distributed according to the terms of the |
10263 | 6 # GNU General Public License version 2 or any later version. |
2778 | 7 |
25991
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
8 from __future__ import absolute_import |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
9 |
17860
a45b33f12627
verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan <bryano@fb.com>
parents:
17851
diff
changeset
|
10 import os |
25991
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
11 |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
12 from .i18n import _ |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
13 from .node import ( |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
14 nullid, |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
15 short, |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
16 ) |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
17 |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
18 from . import ( |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
19 error, |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
20 revlog, |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
21 util, |
d21d1774c73b
verify: use absolute_import
Gregory Szorc <gregory.szorc@gmail.com>
parents:
25846
diff
changeset
|
22 ) |
2778 | 23 |
24 def verify(repo): | |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4635
diff
changeset
|
25 lock = repo.lock() |
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4635
diff
changeset
|
26 try: |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
27 return verifier(repo).verify() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4635
diff
changeset
|
28 finally: |
8109
496ae1ea4698
switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents:
7926
diff
changeset
|
29 lock.release() |
4915
97b734fb9c6f
Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents:
4635
diff
changeset
|
30 |
17860
a45b33f12627
verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan <bryano@fb.com>
parents:
17851
diff
changeset
|
31 def _normpath(f): |
a45b33f12627
verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan <bryano@fb.com>
parents:
17851
diff
changeset
|
32 # under hg < 2.4, convert didn't sanitize paths properly, so a |
a45b33f12627
verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan <bryano@fb.com>
parents:
17851
diff
changeset
|
33 # converted repo may contain repeated slashes |
a45b33f12627
verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan <bryano@fb.com>
parents:
17851
diff
changeset
|
34 while '//' in f: |
a45b33f12627
verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan <bryano@fb.com>
parents:
17851
diff
changeset
|
35 f = f.replace('//', '/') |
a45b33f12627
verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan <bryano@fb.com>
parents:
17851
diff
changeset
|
36 return f |
a45b33f12627
verify: fix all doubled-slash sites (issue3665)
Bryan O'Sullivan <bryano@fb.com>
parents:
17851
diff
changeset
|
37 |
26900
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
38 def _validpath(repo, path): |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
39 """Returns False if a path should NOT be treated as part of a repo. |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
40 |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
41 For all in-core cases, this returns True, as we have no way for a |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
42 path to be mentioned in the history but not actually be |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
43 relevant. For narrow clones, this is important because many |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
44 filelogs will be missing, and changelog entries may mention |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
45 modified files that are outside the narrow scope. |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
46 """ |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
47 return True |
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
48 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
49 class verifier(object): |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
50 def __init__(self, repo): |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
51 self.repo = repo.unfiltered() |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
52 self.ui = repo.ui |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
53 self.badrevs = set() |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
54 self.errors = [0] |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
55 self.warnings = [0] |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
56 self.havecl = len(repo.changelog) > 0 |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
57 self.havemf = len(repo.manifest) > 0 |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
58 self.revlogv1 = repo.changelog.version != revlog.REVLOGV0 |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
59 self.lrugetctx = util.lrucachefunc(repo.changectx) |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
60 self.refersmf = False |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
61 |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
62 def verify(self): |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
63 repo = self.repo |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
64 mflinkrevs = {} |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
65 filelinkrevs = {} |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
66 filenodes = {} |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
67 revisions = 0 |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
68 badrevs = self.badrevs |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
69 errors = self.errors |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
70 warnings = self.warnings |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
71 ui = repo.ui |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
72 cl = repo.changelog |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
73 mf = repo.manifest |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
74 lrugetctx = self.lrugetctx |
2778 | 75 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
76 if not repo.url().startswith('file:'): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
77 raise error.Abort(_("cannot verify bundle or remote repos")) |
6752
e79a8f36c2a5
verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents:
6751
diff
changeset
|
78 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
79 def err(linkrev, msg, filename=None): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
80 if linkrev is not None: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
81 badrevs.add(linkrev) |
7926
edf2d83a11aa
verify, i18n: fix unmarked strings
Wagner Bruna <wbruna@yahoo.com>
parents:
7874
diff
changeset
|
82 else: |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
83 linkrev = '?' |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
84 msg = "%s: %s" % (linkrev, msg) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
85 if filename: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
86 msg = "%s@%s" % (filename, msg) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
87 ui.warn(" " + msg + "\n") |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
88 errors[0] += 1 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
89 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
90 def exc(linkrev, msg, inst, filename=None): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
91 if isinstance(inst, KeyboardInterrupt): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
92 ui.warn(_("interrupted")) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
93 raise |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
94 if not str(inst): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
95 inst = repr(inst) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
96 err(linkrev, "%s: %s" % (msg, inst), filename) |
6752
e79a8f36c2a5
verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents:
6751
diff
changeset
|
97 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
98 def warn(msg): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
99 ui.warn(msg + "\n") |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
100 warnings[0] += 1 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
101 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
102 def checklog(obj, name, linkrev): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
103 if not len(obj) and (havecl or havemf): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
104 err(linkrev, _("empty or missing %s") % name) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
105 return |
6752
e79a8f36c2a5
verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents:
6751
diff
changeset
|
106 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
107 d = obj.checksize() |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
108 if d[0]: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
109 err(None, _("data length off by %d bytes") % d[0], name) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
110 if d[1]: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
111 err(None, _("index contains %d extra bytes") % d[1], name) |
9690
b33d70849a20
verify: report existence of journal
Sune Foldager <cryo@cyanite.org>
parents:
9657
diff
changeset
|
112 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
113 if obj.version != revlog.REVLOGV0: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
114 if not revlogv1: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
115 warn(_("warning: `%s' uses revlog format 1") % name) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
116 elif revlogv1: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
117 warn(_("warning: `%s' uses revlog format 0") % name) |
6752
e79a8f36c2a5
verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents:
6751
diff
changeset
|
118 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
119 def checkentry(obj, i, node, seen, linkrevs, f): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
120 lr = obj.linkrev(obj.rev(node)) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
121 if lr < 0 or (havecl and lr not in linkrevs): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
122 if lr < 0 or lr >= len(cl): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
123 msg = _("rev %d points to nonexistent changeset %d") |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
124 else: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
125 msg = _("rev %d points to unexpected changeset %d") |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
126 err(None, msg % (i, lr), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
127 if linkrevs: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
128 if f and len(linkrevs) > 1: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
129 try: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
130 # attempt to filter down to real linkrevs |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
131 linkrevs = [l for l in linkrevs |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
132 if lrugetctx(l)[f].filenode() == node] |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
133 except Exception: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
134 pass |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
135 warn(_(" (expected %s)") % " ".join(map(str, linkrevs))) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
136 lr = None # can't be trusted |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
137 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
138 try: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
139 p1, p2 = obj.parents(node) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
140 if p1 not in seen and p1 != nullid: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
141 err(lr, _("unknown parent 1 %s of %s") % |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
142 (short(p1), short(node)), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
143 if p2 not in seen and p2 != nullid: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
144 err(lr, _("unknown parent 2 %s of %s") % |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
145 (short(p2), short(node)), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
146 except Exception as inst: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
147 exc(lr, _("checking parents of %s") % short(node), inst, f) |
2778 | 148 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
149 if node in seen: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
150 err(lr, _("duplicate revision %d (%d)") % (i, seen[node]), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
151 seen[node] = i |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
152 return lr |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
153 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
154 if os.path.exists(repo.sjoin("journal")): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
155 ui.warn(_("abandoned transaction found - run hg recover\n")) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
156 |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
157 revlogv1 = self.revlogv1 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
158 if ui.verbose or not revlogv1: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
159 ui.status(_("repository uses revlog format %d\n") % |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
160 (revlogv1 and 1 or 0)) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
161 |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
162 havecl = self.havecl |
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
163 havemf = self.havemf |
2778 | 164 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
165 ui.status(_("checking changesets\n")) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
166 seen = {} |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
167 checklog(cl, "changelog", 0) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
168 total = len(repo) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
169 for i in repo: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
170 ui.progress(_('checking'), i, total=total, unit=_('changesets')) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
171 n = cl.node(i) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
172 checkentry(cl, i, n, seen, [i], "changelog") |
2778 | 173 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
174 try: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
175 changes = cl.read(n) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
176 if changes[0] != nullid: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
177 mflinkrevs.setdefault(changes[0], []).append(i) |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
178 self.refersmf = True |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
179 for f in changes[3]: |
26900
d1c741644d25
verify: add a hook that can let extensions manipulate file lists
Augie Fackler <augie@google.com>
parents:
26587
diff
changeset
|
180 if _validpath(repo, f): |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
181 filelinkrevs.setdefault(_normpath(f), []).append(i) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
182 except Exception as inst: |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
183 self.refersmf = True |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
184 exc(i, _("unpacking changeset %s") % short(n), inst) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
185 ui.progress(_('checking'), None) |
2778 | 186 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
187 ui.status(_("checking manifests\n")) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
188 seen = {} |
27444
6647401858ab
verify: move widely used variables into class members
Durham Goode <durham@fb.com>
parents:
27443
diff
changeset
|
189 if self.refersmf: |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
190 # Do not check manifest if there are only changelog entries with |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
191 # null manifests. |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
192 checklog(mf, "manifest", 0) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
193 total = len(mf) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
194 for i in mf: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
195 ui.progress(_('checking'), i, total=total, unit=_('manifests')) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
196 n = mf.node(i) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
197 lr = checkentry(mf, i, n, seen, mflinkrevs.get(n, []), "manifest") |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
198 if n in mflinkrevs: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
199 del mflinkrevs[n] |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
200 else: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
201 err(lr, _("%s not in changesets") % short(n), "manifest") |
2778 | 202 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
203 try: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
204 for f, fn in mf.readdelta(n).iteritems(): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
205 if not f: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
206 err(lr, _("file without name in manifest")) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
207 elif f != "/dev/null": # ignore this in very old repos |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
208 if _validpath(repo, f): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
209 filenodes.setdefault( |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
210 _normpath(f), {}).setdefault(fn, lr) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
211 except Exception as inst: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
212 exc(lr, _("reading manifest delta %s") % short(n), inst) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
213 ui.progress(_('checking'), None) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
214 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
215 ui.status(_("crosschecking files in changesets and manifests\n")) |
2778 | 216 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
217 total = len(mflinkrevs) + len(filelinkrevs) + len(filenodes) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
218 count = 0 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
219 if havemf: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
220 for c, m in sorted([(c, m) for m in mflinkrevs |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
221 for c in mflinkrevs[m]]): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
222 count += 1 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
223 if m == nullid: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
224 continue |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
225 ui.progress(_('crosschecking'), count, total=total) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
226 err(c, _("changeset refers to unknown manifest %s") % short(m)) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
227 mflinkrevs = None # del is bad here due to scope issues |
6752
e79a8f36c2a5
verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents:
6751
diff
changeset
|
228 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
229 for f in sorted(filelinkrevs): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
230 count += 1 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
231 ui.progress(_('crosschecking'), count, total=total) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
232 if f not in filenodes: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
233 lr = filelinkrevs[f][0] |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
234 err(lr, _("in changeset but not in manifest"), f) |
6892
dab95717058d
verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents:
6889
diff
changeset
|
235 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
236 if havecl: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
237 for f in sorted(filenodes): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
238 count += 1 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
239 ui.progress(_('crosschecking'), count, total=total) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
240 if f not in filelinkrevs: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
241 try: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
242 fl = repo.file(f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
243 lr = min([fl.linkrev(fl.rev(n)) for n in filenodes[f]]) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
244 except Exception: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
245 lr = None |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
246 err(lr, _("in manifest but not in changeset"), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
247 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
248 ui.progress(_('crosschecking'), None) |
8291
f5c1a9094e41
verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents:
8225
diff
changeset
|
249 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
250 ui.status(_("checking files\n")) |
8291
f5c1a9094e41
verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents:
8225
diff
changeset
|
251 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
252 storefiles = set() |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
253 for f, f2, size in repo.store.datafiles(): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
254 if not f: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
255 err(None, _("cannot decode filename '%s'") % f2) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
256 elif size > 0 or not revlogv1: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
257 storefiles.add(_normpath(f)) |
6892
dab95717058d
verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents:
6889
diff
changeset
|
258 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
259 fncachewarned = False |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
260 files = sorted(set(filenodes) | set(filelinkrevs)) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
261 total = len(files) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
262 for i, f in enumerate(files): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
263 ui.progress(_('checking'), i, item=f, total=total) |
6892
dab95717058d
verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents:
6889
diff
changeset
|
264 try: |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
265 linkrevs = filelinkrevs[f] |
6892
dab95717058d
verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents:
6889
diff
changeset
|
266 except KeyError: |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
267 # in manifest but not in changelog |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
268 linkrevs = [] |
2778 | 269 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
270 if linkrevs: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
271 lr = linkrevs[0] |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
272 else: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
273 lr = None |
2778 | 274 |
3744
d626fc9e3985
verify: add rename link checking
Matt Mackall <mpm@selenic.com>
parents:
3473
diff
changeset
|
275 try: |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
276 fl = repo.file(f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
277 except error.RevlogError as e: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
278 err(lr, _("broken revlog! (%s)") % e, f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
279 continue |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
280 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
281 for ff in fl.files(): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
282 try: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
283 storefiles.remove(ff) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
284 except KeyError: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
285 warn(_(" warning: revlog '%s' not in fncache!") % ff) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
286 fncachewarned = True |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
287 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
288 checklog(fl, f, lr) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
289 seen = {} |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
290 rp = None |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
291 for i in fl: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
292 revisions += 1 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
293 n = fl.node(i) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
294 lr = checkentry(fl, i, n, seen, linkrevs, f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
295 if f in filenodes: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
296 if havemf and n not in filenodes[f]: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
297 err(lr, _("%s not in manifests") % (short(n)), f) |
6534
9b35a9f34675
verify: check copy source revlog and nodeid
Patrick Mezard <pmezard@gmail.com>
parents:
6211
diff
changeset
|
298 else: |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
299 del filenodes[f][n] |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
300 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
301 # verify contents |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
302 try: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
303 l = len(fl.read(n)) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
304 rp = fl.renamed(n) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
305 if l != fl.size(i): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
306 if len(fl.revision(n)) != fl.size(i): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
307 err(lr, _("unpacked size is %s, %s expected") % |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
308 (l, fl.size(i)), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
309 except error.CensoredNodeError: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
310 # experimental config: censor.policy |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
311 if ui.config("censor", "policy", "abort") == "abort": |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
312 err(lr, _("censored file data"), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
313 except Exception as inst: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
314 exc(lr, _("unpacking %s") % short(n), inst, f) |
3744
d626fc9e3985
verify: add rename link checking
Matt Mackall <mpm@selenic.com>
parents:
3473
diff
changeset
|
315 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
316 # check renames |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
317 try: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
318 if rp: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
319 if lr is not None and ui.verbose: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
320 ctx = lrugetctx(lr) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
321 found = False |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
322 for pctx in ctx.parents(): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
323 if rp[0] in pctx: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
324 found = True |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
325 break |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
326 if not found: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
327 warn(_("warning: copy source of '%s' not" |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
328 " in parents of %s") % (f, ctx)) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
329 fl2 = repo.file(rp[0]) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
330 if not len(fl2): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
331 err(lr, _("empty or missing copy source revlog " |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
332 "%s:%s") % (rp[0], short(rp[1])), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
333 elif rp[1] == nullid: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
334 ui.note(_("warning: %s@%s: copy source" |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
335 " revision is nullid %s:%s\n") |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
336 % (f, lr, rp[0], short(rp[1]))) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
337 else: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
338 fl2.rev(rp[1]) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
339 except Exception as inst: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
340 exc(lr, _("checking rename of %s") % short(n), inst, f) |
6892
dab95717058d
verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents:
6889
diff
changeset
|
341 |
27443
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
342 # cross-check |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
343 if f in filenodes: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
344 fns = [(lr, n) for n, lr in filenodes[f].iteritems()] |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
345 for lr, node in sorted(fns): |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
346 err(lr, _("%s in manifests not found") % short(node), f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
347 ui.progress(_('checking'), None) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
348 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
349 for f in storefiles: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
350 warn(_("warning: orphan revlog '%s'") % f) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
351 |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
352 ui.status(_("%d files, %d changesets, %d total revisions\n") % |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
353 (len(files), len(cl), revisions)) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
354 if warnings[0]: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
355 ui.warn(_("%d warnings encountered!\n") % warnings[0]) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
356 if fncachewarned: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
357 ui.warn(_('hint: run "hg debugrebuildfncache" to recover from ' |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
358 'corrupt fncache\n')) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
359 if errors[0]: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
360 ui.warn(_("%d integrity errors encountered!\n") % errors[0]) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
361 if badrevs: |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
362 ui.warn(_("(first damaged changeset appears to be %d)\n") |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
363 % min(badrevs)) |
937e73a6e4ff
verify: move verify logic into a class
Durham Goode <durham@fb.com>
parents:
26900
diff
changeset
|
364 return 1 |