annotate mercurial/verify.py @ 17719:2e3ceb59c312

verify: use appropriate local variable in "checkentry()" Before this patch, "checkentry()" internal function uses both "node"(argument of itself) and "n"(defined in outer of it) variables. Because all callers of "checkentry()" use "n" to refer the object which is passed to "checkentry()" as "node", both can refer same object in "checkentry()". So, "checkentry()" works correctly. But such usage is not good for independence of "checkentry()". This patch replaces "n" in "checkentry()" with "node".
author FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
date Thu, 04 Oct 2012 01:24:05 +0900
parents 4562570ae0f7
children 9a1796af4f8d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
1 # verify.py - repository integrity checking for Mercurial
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
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
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
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
25e572394f5c Update license to GPLv2+
Matt Mackall <mpm@selenic.com>
parents: 9690
diff changeset
6 # GNU General Public License version 2 or any later version.
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
7
6211
f89fd07fc51d Expand import * to allow Pyflakes to find problems
Joel Rosdahl <joel@rosdahl.net>
parents: 5541
diff changeset
8 from node import nullid, short
3891
6b4127c7d52a Simplify i18n imports
Matt Mackall <mpm@selenic.com>
parents: 3744
diff changeset
9 from i18n import _
9690
b33d70849a20 verify: report existence of journal
Sune Foldager <cryo@cyanite.org>
parents: 9657
diff changeset
10 import os
7832
1fce19b9b011 verify: do not abort on fully corrupted revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7676
diff changeset
11 import revlog, util, error
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
12
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
13 def verify(repo):
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4635
diff changeset
14 lock = repo.lock()
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4635
diff changeset
15 try:
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4635
diff changeset
16 return _verify(repo)
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4635
diff changeset
17 finally:
8109
496ae1ea4698 switch lock releasing in the core from gc to explicit
Ronny Pfannschmidt <Ronny.Pfannschmidt@gmx.de>
parents: 7926
diff changeset
18 lock.release()
4915
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4635
diff changeset
19
97b734fb9c6f Use try/finally pattern to cleanup locks and transactions
Matt Mackall <mpm@selenic.com>
parents: 4635
diff changeset
20 def _verify(repo):
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
21 mflinkrevs = {}
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
22 filelinkrevs = {}
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
23 filenodes = {}
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
24 revisions = 0
8466
afb3e504b558 verify: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8394
diff changeset
25 badrevs = set()
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
26 errors = [0]
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
27 warnings = [0]
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
28 ui = repo.ui
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
29 cl = repo.changelog
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
30 mf = repo.manifest
9657
96c803e9018f verify: filter the candidate list for broken linkrevs
Matt Mackall <mpm@selenic.com>
parents: 9545
diff changeset
31 lrugetctx = util.lrucachefunc(repo.changectx)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
32
7141
8d1bdaf842de issue 1144: prevent traceback on verify of bundles
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7004
diff changeset
33 if not repo.cancopy():
8d1bdaf842de issue 1144: prevent traceback on verify of bundles
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7004
diff changeset
34 raise util.Abort(_("cannot verify bundle or remote repos"))
8d1bdaf842de issue 1144: prevent traceback on verify of bundles
John Mulligan <phlogistonjohn@asynchrono.us>
parents: 7004
diff changeset
35
5313
29be4228303b verify: report first bad changeset
Matt Mackall <mpm@selenic.com>
parents: 5179
diff changeset
36 def err(linkrev, msg, filename=None):
13031
3da456d0c885 code style: prefer 'is' and 'is not' tests with singletons
Martin Geisler <mg@aragost.com>
parents: 12745
diff changeset
37 if linkrev is not None:
8466
afb3e504b558 verify: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8394
diff changeset
38 badrevs.add(linkrev)
5313
29be4228303b verify: report first bad changeset
Matt Mackall <mpm@selenic.com>
parents: 5179
diff changeset
39 else:
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
40 linkrev = '?'
5313
29be4228303b verify: report first bad changeset
Matt Mackall <mpm@selenic.com>
parents: 5179
diff changeset
41 msg = "%s: %s" % (linkrev, msg)
29be4228303b verify: report first bad changeset
Matt Mackall <mpm@selenic.com>
parents: 5179
diff changeset
42 if filename:
29be4228303b verify: report first bad changeset
Matt Mackall <mpm@selenic.com>
parents: 5179
diff changeset
43 msg = "%s@%s" % (filename, msg)
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
44 ui.warn(" " + msg + "\n")
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
45 errors[0] += 1
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
46
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
47 def exc(linkrev, msg, inst, filename=None):
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
48 if isinstance(inst, KeyboardInterrupt):
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
49 ui.warn(_("interrupted"))
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
50 raise
11752
12998fd17fbc verify: report exceptions that don't have a str() method
Matt Mackall <mpm@selenic.com>
parents: 10906
diff changeset
51 if not str(inst):
12998fd17fbc verify: report exceptions that don't have a str() method
Matt Mackall <mpm@selenic.com>
parents: 10906
diff changeset
52 inst = repr(inst)
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
53 err(linkrev, "%s: %s" % (msg, inst), filename)
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
54
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
55 def warn(msg):
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
56 ui.warn(msg + "\n")
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
57 warnings[0] += 1
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
58
8292
29540554def8 verify: reference the correct linkrev when a filelog is missing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8291
diff changeset
59 def checklog(obj, name, linkrev):
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
60 if not len(obj) and (havecl or havemf):
8292
29540554def8 verify: reference the correct linkrev when a filelog is missing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8291
diff changeset
61 err(linkrev, _("empty or missing %s") % name)
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
62 return
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
63
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
64 d = obj.checksize()
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
65 if d[0]:
5313
29be4228303b verify: report first bad changeset
Matt Mackall <mpm@selenic.com>
parents: 5179
diff changeset
66 err(None, _("data length off by %d bytes") % d[0], name)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
67 if d[1]:
5313
29be4228303b verify: report first bad changeset
Matt Mackall <mpm@selenic.com>
parents: 5179
diff changeset
68 err(None, _("index contains %d extra bytes") % d[1], name)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
69
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
70 if obj.version != revlog.REVLOGV0:
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
71 if not revlogv1:
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
72 warn(_("warning: `%s' uses revlog format 1") % name)
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
73 elif revlogv1:
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
74 warn(_("warning: `%s' uses revlog format 0") % name)
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
75
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
76 def checkentry(obj, i, node, seen, linkrevs, f):
7361
9fe97eea5510 linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents: 7141
diff changeset
77 lr = obj.linkrev(obj.rev(node))
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
78 if lr < 0 or (havecl and lr not in linkrevs):
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
79 if lr < 0 or lr >= len(cl):
7926
edf2d83a11aa verify, i18n: fix unmarked strings
Wagner Bruna <wbruna@yahoo.com>
parents: 7874
diff changeset
80 msg = _("rev %d points to nonexistent changeset %d")
edf2d83a11aa verify, i18n: fix unmarked strings
Wagner Bruna <wbruna@yahoo.com>
parents: 7874
diff changeset
81 else:
edf2d83a11aa verify, i18n: fix unmarked strings
Wagner Bruna <wbruna@yahoo.com>
parents: 7874
diff changeset
82 msg = _("rev %d points to unexpected changeset %d")
edf2d83a11aa verify, i18n: fix unmarked strings
Wagner Bruna <wbruna@yahoo.com>
parents: 7874
diff changeset
83 err(None, msg % (i, lr), f)
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
84 if linkrevs:
9657
96c803e9018f verify: filter the candidate list for broken linkrevs
Matt Mackall <mpm@selenic.com>
parents: 9545
diff changeset
85 if f and len(linkrevs) > 1:
96c803e9018f verify: filter the candidate list for broken linkrevs
Matt Mackall <mpm@selenic.com>
parents: 9545
diff changeset
86 try:
96c803e9018f verify: filter the candidate list for broken linkrevs
Matt Mackall <mpm@selenic.com>
parents: 9545
diff changeset
87 # attempt to filter down to real linkrevs
96c803e9018f verify: filter the candidate list for broken linkrevs
Matt Mackall <mpm@selenic.com>
parents: 9545
diff changeset
88 linkrevs = [l for l in linkrevs
96c803e9018f verify: filter the candidate list for broken linkrevs
Matt Mackall <mpm@selenic.com>
parents: 9545
diff changeset
89 if lrugetctx(l)[f].filenode() == node]
16689
f366d4c2ff34 cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents: 14879
diff changeset
90 except Exception:
9657
96c803e9018f verify: filter the candidate list for broken linkrevs
Matt Mackall <mpm@selenic.com>
parents: 9545
diff changeset
91 pass
9198
061eeb602354 coding style: use a space after comma
Martin Geisler <mg@lazybytes.net>
parents: 9033
diff changeset
92 warn(_(" (expected %s)") % " ".join(map(str, linkrevs)))
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
93 lr = None # can't be trusted
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
94
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
95 try:
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
96 p1, p2 = obj.parents(node)
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
97 if p1 not in seen and p1 != nullid:
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
98 err(lr, _("unknown parent 1 %s of %s") %
17719
2e3ceb59c312 verify: use appropriate local variable in "checkentry()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17718
diff changeset
99 (short(p1), short(node)), f)
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
100 if p2 not in seen and p2 != nullid:
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
101 err(lr, _("unknown parent 2 %s of %s") %
17719
2e3ceb59c312 verify: use appropriate local variable in "checkentry()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17718
diff changeset
102 (short(p2), short(node)), f)
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
103 except Exception, inst:
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
104 exc(lr, _("checking parents of %s") % short(node), inst, f)
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
105
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
106 if node in seen:
17719
2e3ceb59c312 verify: use appropriate local variable in "checkentry()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17718
diff changeset
107 err(lr, _("duplicate revision %d (%d)") % (i, seen[node]), f)
2e3ceb59c312 verify: use appropriate local variable in "checkentry()"
FUJIWARA Katsunori <foozy@lares.dti.ne.jp>
parents: 17718
diff changeset
108 seen[node] = i
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
109 return lr
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
110
9690
b33d70849a20 verify: report existence of journal
Sune Foldager <cryo@cyanite.org>
parents: 9657
diff changeset
111 if os.path.exists(repo.sjoin("journal")):
b33d70849a20 verify: report existence of journal
Sune Foldager <cryo@cyanite.org>
parents: 9657
diff changeset
112 ui.warn(_("abandoned transaction found - run hg recover\n"))
b33d70849a20 verify: report existence of journal
Sune Foldager <cryo@cyanite.org>
parents: 9657
diff changeset
113
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
114 revlogv1 = cl.version != revlog.REVLOGV0
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
115 if ui.verbose or not revlogv1:
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
116 ui.status(_("repository uses revlog format %d\n") %
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
117 (revlogv1 and 1 or 0))
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
118
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
119 havecl = len(cl) > 0
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
120 havemf = len(mf) > 0
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
121
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
122 ui.status(_("checking changesets\n"))
17385
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
123 hasmanifest = False
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
124 seen = {}
8292
29540554def8 verify: reference the correct linkrev when a filelog is missing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8291
diff changeset
125 checklog(cl, "changelog", 0)
10433
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
126 total = len(repo)
6750
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6534
diff changeset
127 for i in repo:
12745
5a1912b5aa42 verify/progress: using gerund to indicate action and adding units
timeless <timeless@gmail.com>
parents: 12170
diff changeset
128 ui.progress(_('checking'), i, total=total, unit=_('changesets'))
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
129 n = cl.node(i)
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
130 checkentry(cl, i, n, seen, [i], "changelog")
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
131
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
132 try:
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
133 changes = cl.read(n)
17385
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
134 if changes[0] != nullid:
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
135 mflinkrevs.setdefault(changes[0], []).append(i)
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
136 hasmanifest = True
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
137 for f in changes[3]:
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
138 filelinkrevs.setdefault(f, []).append(i)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
139 except Exception, inst:
17385
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
140 hasmanifest = True
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
141 exc(i, _("unpacking changeset %s") % short(n), inst)
12745
5a1912b5aa42 verify/progress: using gerund to indicate action and adding units
timeless <timeless@gmail.com>
parents: 12170
diff changeset
142 ui.progress(_('checking'), None)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
143
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
144 ui.status(_("checking manifests\n"))
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
145 seen = {}
17385
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
146 if hasmanifest:
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
147 # Do not check manifest if there are only changelog entries with
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
148 # null manifests.
b32a30da608d verify: do not choke on valid changelog without manifest
Patrick Mezard <patrick@mezard.eu>
parents: 16689
diff changeset
149 checklog(mf, "manifest", 0)
10433
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
150 total = len(mf)
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
151 for i in mf:
12745
5a1912b5aa42 verify/progress: using gerund to indicate action and adding units
timeless <timeless@gmail.com>
parents: 12170
diff changeset
152 ui.progress(_('checking'), i, total=total, unit=_('manifests'))
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
153 n = mf.node(i)
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
154 lr = checkentry(mf, i, n, seen, mflinkrevs.get(n, []), "manifest")
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
155 if n in mflinkrevs:
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
156 del mflinkrevs[n]
8394
850b5a7c210d verify: detect manifest revs not in any changeset
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8292
diff changeset
157 else:
850b5a7c210d verify: detect manifest revs not in any changeset
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 8292
diff changeset
158 err(lr, _("%s not in changesets") % short(n), "manifest")
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
159
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
160 try:
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
161 for f, fn in mf.readdelta(n).iteritems():
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
162 if not f:
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
163 err(lr, _("file without name in manifest"))
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
164 elif f != "/dev/null":
9657
96c803e9018f verify: filter the candidate list for broken linkrevs
Matt Mackall <mpm@selenic.com>
parents: 9545
diff changeset
165 filenodes.setdefault(f, {}).setdefault(fn, lr)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
166 except Exception, inst:
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
167 exc(lr, _("reading manifest delta %s") % short(n), inst)
12745
5a1912b5aa42 verify/progress: using gerund to indicate action and adding units
timeless <timeless@gmail.com>
parents: 12170
diff changeset
168 ui.progress(_('checking'), None)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
169
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
170 ui.status(_("crosschecking files in changesets and manifests\n"))
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
171
10433
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
172 total = len(mflinkrevs) + len(filelinkrevs) + len(filenodes)
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
173 count = 0
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
174 if havemf:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
175 for c, m in sorted([(c, m) for m in mflinkrevs
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
176 for c in mflinkrevs[m]]):
10433
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
177 count += 1
14865
eb914541a950 verify: filter messages about missing null manifests (issue2900)
Matt Mackall <mpm@selenic.com>
parents: 13031
diff changeset
178 if m == nullid:
eb914541a950 verify: filter messages about missing null manifests (issue2900)
Matt Mackall <mpm@selenic.com>
parents: 13031
diff changeset
179 continue
10698
e930017f9e2a progress: use a verb (+noun) in present participle
Martin Geisler <mg@lazybytes.net>
parents: 10496
diff changeset
180 ui.progress(_('crosschecking'), count, total=total)
5541
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
181 err(c, _("changeset refers to unknown manifest %s") % short(m))
9033
98a5652bfed9 verify: fix scope issues with del statement
Alejandro Santos <alejolp@alejolp.com>
parents: 8993
diff changeset
182 mflinkrevs = None # del is bad here due to scope issues
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
183
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8164
diff changeset
184 for f in sorted(filelinkrevs):
10433
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
185 count += 1
10698
e930017f9e2a progress: use a verb (+noun) in present participle
Martin Geisler <mg@lazybytes.net>
parents: 10496
diff changeset
186 ui.progress(_('crosschecking'), count, total=total)
5541
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
187 if f not in filenodes:
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
188 lr = filelinkrevs[f][0]
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
189 err(lr, _("in changeset but not in manifest"), f)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
190
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
191 if havecl:
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8164
diff changeset
192 for f in sorted(filenodes):
10433
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
193 count += 1
10698
e930017f9e2a progress: use a verb (+noun) in present participle
Martin Geisler <mg@lazybytes.net>
parents: 10496
diff changeset
194 ui.progress(_('crosschecking'), count, total=total)
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
195 if f not in filelinkrevs:
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
196 try:
7361
9fe97eea5510 linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents: 7141
diff changeset
197 fl = repo.file(f)
9fe97eea5510 linkrev: take a revision number rather than a hash
Matt Mackall <mpm@selenic.com>
parents: 7141
diff changeset
198 lr = min([fl.linkrev(fl.rev(n)) for n in filenodes[f]])
16689
f366d4c2ff34 cleanup: replace naked excepts with except Exception: ...
Brodie Rao <brodie@sf.io>
parents: 14879
diff changeset
199 except Exception:
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
200 lr = None
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
201 err(lr, _("in manifest but not in changeset"), f)
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
202
10698
e930017f9e2a progress: use a verb (+noun) in present participle
Martin Geisler <mg@lazybytes.net>
parents: 10496
diff changeset
203 ui.progress(_('crosschecking'), None)
10433
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
204
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
205 ui.status(_("checking files\n"))
6892
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
206
8466
afb3e504b558 verify: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8394
diff changeset
207 storefiles = set()
6900
def492d1b592 store: change handling of decoding errors
Matt Mackall <mpm@selenic.com>
parents: 6892
diff changeset
208 for f, f2, size in repo.store.datafiles():
def492d1b592 store: change handling of decoding errors
Matt Mackall <mpm@selenic.com>
parents: 6892
diff changeset
209 if not f:
def492d1b592 store: change handling of decoding errors
Matt Mackall <mpm@selenic.com>
parents: 6892
diff changeset
210 err(None, _("cannot decode filename '%s'") % f2)
12170
581066a319e5 verify: fix "missing revlog!" errors for revlog format v0 and add test
Thomas Arendsen Hein <thomas@intevation.de>
parents: 11756
diff changeset
211 elif size > 0 or not revlogv1:
8466
afb3e504b558 verify: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8394
diff changeset
212 storefiles.add(f)
6892
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
213
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8164
diff changeset
214 files = sorted(set(filenodes) | set(filelinkrevs))
10433
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
215 total = len(files)
767fbacb3ddc verify: call ui.progress()
Augie Fackler <durin42@gmail.com>
parents: 10282
diff changeset
216 for i, f in enumerate(files):
10698
e930017f9e2a progress: use a verb (+noun) in present participle
Martin Geisler <mg@lazybytes.net>
parents: 10496
diff changeset
217 ui.progress(_('checking'), i, item=f, total=total)
8291
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
218 try:
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
219 linkrevs = filelinkrevs[f]
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
220 except KeyError:
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
221 # in manifest but not in changelog
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
222 linkrevs = []
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
223
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
224 if linkrevs:
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
225 lr = linkrevs[0]
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
226 else:
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
227 lr = None
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
228
7832
1fce19b9b011 verify: do not abort on fully corrupted revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7676
diff changeset
229 try:
1fce19b9b011 verify: do not abort on fully corrupted revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7676
diff changeset
230 fl = repo.file(f)
1fce19b9b011 verify: do not abort on fully corrupted revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7676
diff changeset
231 except error.RevlogError, e:
7833
794def2fe232 verify: find correct first corrupted cset for missing/corrupted revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7832
diff changeset
232 err(lr, _("broken revlog! (%s)") % e, f)
7832
1fce19b9b011 verify: do not abort on fully corrupted revlog
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7676
diff changeset
233 continue
6892
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
234
6900
def492d1b592 store: change handling of decoding errors
Matt Mackall <mpm@selenic.com>
parents: 6892
diff changeset
235 for ff in fl.files():
6892
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
236 try:
8466
afb3e504b558 verify: use set instead of dict
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8394
diff changeset
237 storefiles.remove(ff)
6892
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
238 except KeyError:
7833
794def2fe232 verify: find correct first corrupted cset for missing/corrupted revlogs
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 7832
diff changeset
239 err(lr, _("missing revlog!"), ff)
6892
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
240
8292
29540554def8 verify: reference the correct linkrev when a filelog is missing
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 8291
diff changeset
241 checklog(fl, f, lr)
5313
29be4228303b verify: report first bad changeset
Matt Mackall <mpm@selenic.com>
parents: 5179
diff changeset
242 seen = {}
11756
0299240b849b verify: initialize rp variable in case we hit out of memory
Matt Mackall <mpm@selenic.com>
parents: 11753
diff changeset
243 rp = None
6750
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6534
diff changeset
244 for i in fl:
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
245 revisions += 1
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
246 n = fl.node(i)
8291
f5c1a9094e41 verify: avoid exception on missing file revlog
Henrik Stuart <hg@hstuart.dk>
parents: 8225
diff changeset
247 lr = checkentry(fl, i, n, seen, linkrevs, f)
5541
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
248 if f in filenodes:
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
249 if havemf and n not in filenodes[f]:
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
250 err(lr, _("%s not in manifests") % (short(n)), f)
5541
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
251 else:
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
252 del filenodes[f][n]
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
253
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
254 # verify contents
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
255 try:
11753
eb7b04657dae verify: reduce memory footprint when unpacking files
Matt Mackall <mpm@selenic.com>
parents: 11752
diff changeset
256 l = len(fl.read(n))
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
257 rp = fl.renamed(n)
11753
eb7b04657dae verify: reduce memory footprint when unpacking files
Matt Mackall <mpm@selenic.com>
parents: 11752
diff changeset
258 if l != fl.size(i):
7675
011e69b96c69 verify: don't trip over binary files starting with 01 0a
Matt Mackall <mpm@selenic.com>
parents: 7361
diff changeset
259 if len(fl.revision(n)) != fl.size(i):
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
260 err(lr, _("unpacked size is %s, %s expected") %
11753
eb7b04657dae verify: reduce memory footprint when unpacking files
Matt Mackall <mpm@selenic.com>
parents: 11752
diff changeset
261 (l, fl.size(i)), f)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
262 except Exception, inst:
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
263 exc(lr, _("unpacking %s") % short(n), inst, f)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
264
3744
d626fc9e3985 verify: add rename link checking
Matt Mackall <mpm@selenic.com>
parents: 3473
diff changeset
265 # check renames
d626fc9e3985 verify: add rename link checking
Matt Mackall <mpm@selenic.com>
parents: 3473
diff changeset
266 try:
d626fc9e3985 verify: add rename link checking
Matt Mackall <mpm@selenic.com>
parents: 3473
diff changeset
267 if rp:
9545
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
268 if lr is not None and ui.verbose:
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
269 ctx = lrugetctx(lr)
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
270 found = False
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
271 for pctx in ctx.parents():
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
272 if rp[0] in pctx:
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
273 found = True
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
274 break
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
275 if not found:
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
276 warn(_("warning: copy source of '%s' not"
98feea5659d9 verify: detect file copy sources not in parents with --verbose
Patrick Mezard <pmezard@gmail.com>
parents: 9198
diff changeset
277 " in parents of %s") % (f, ctx))
3744
d626fc9e3985 verify: add rename link checking
Matt Mackall <mpm@selenic.com>
parents: 3473
diff changeset
278 fl2 = repo.file(rp[0])
6750
fb42030d79d6 add __len__ and __iter__ methods to repo and revlog
Matt Mackall <mpm@selenic.com>
parents: 6534
diff changeset
279 if not len(fl2):
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
280 err(lr, _("empty or missing copy source revlog %s:%s")
6534
9b35a9f34675 verify: check copy source revlog and nodeid
Patrick Mezard <pmezard@gmail.com>
parents: 6211
diff changeset
281 % (rp[0], short(rp[1])), f)
9b35a9f34675 verify: check copy source revlog and nodeid
Patrick Mezard <pmezard@gmail.com>
parents: 6211
diff changeset
282 elif rp[1] == nullid:
8993
46441934c585 verify: demote warning about nullid in copy to note
Matt Mackall <mpm@selenic.com>
parents: 8466
diff changeset
283 ui.note(_("warning: %s@%s: copy source"
46441934c585 verify: demote warning about nullid in copy to note
Matt Mackall <mpm@selenic.com>
parents: 8466
diff changeset
284 " revision is nullid %s:%s\n")
7004
90227c42b5f6 c0bd7d8b69ef uses err() instead of warn() but prototype doesn't match
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 6900
diff changeset
285 % (f, lr, rp[0], short(rp[1])))
6534
9b35a9f34675 verify: check copy source revlog and nodeid
Patrick Mezard <pmezard@gmail.com>
parents: 6211
diff changeset
286 else:
7874
d812029cda85 cleanup: drop variables for unused return values
Peter Arrenbrecht <peter.arrenbrecht@gmail.com>
parents: 7833
diff changeset
287 fl2.rev(rp[1])
3744
d626fc9e3985 verify: add rename link checking
Matt Mackall <mpm@selenic.com>
parents: 3473
diff changeset
288 except Exception, inst:
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
289 exc(lr, _("checking rename of %s") % short(n), inst, f)
3744
d626fc9e3985 verify: add rename link checking
Matt Mackall <mpm@selenic.com>
parents: 3473
diff changeset
290
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
291 # cross-check
5541
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
292 if f in filenodes:
10282
08a0f04b56bd many, many trivial check-code fixups
Matt Mackall <mpm@selenic.com>
parents: 10263
diff changeset
293 fns = [(lr, n) for n, lr in filenodes[f].iteritems()]
8209
a1a5a57efe90 replace util.sort with sorted built-in
Matt Mackall <mpm@selenic.com>
parents: 8164
diff changeset
294 for lr, node in sorted(fns):
5541
ceaa752fa316 verify: improve handling of empty or missing files
Matt Mackall <mpm@selenic.com>
parents: 5313
diff changeset
295 err(lr, _("%s in manifests not found") % short(node), f)
10698
e930017f9e2a progress: use a verb (+noun) in present participle
Martin Geisler <mg@lazybytes.net>
parents: 10496
diff changeset
296 ui.progress(_('checking'), None)
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
297
6892
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
298 for f in storefiles:
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
299 warn(_("warning: orphan revlog '%s'") % f)
dab95717058d verify: check repo.store
Adrian Buehlmann <adrian@cadifra.com>
parents: 6889
diff changeset
300
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
301 ui.status(_("%d files, %d changesets, %d total revisions\n") %
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
302 (len(files), len(cl), revisions))
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
303 if warnings[0]:
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
304 ui.warn(_("%d warnings encountered!\n") % warnings[0])
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
305 if errors[0]:
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
306 ui.warn(_("%d integrity errors encountered!\n") % errors[0])
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
307 if badrevs:
6751
7424a75f919a verify: add some local variables
Matt Mackall <mpm@selenic.com>
parents: 6750
diff changeset
308 ui.warn(_("(first damaged changeset appears to be %d)\n")
6752
e79a8f36c2a5 verify: lots of refactoring
Matt Mackall <mpm@selenic.com>
parents: 6751
diff changeset
309 % min(badrevs))
2778
fdc232d8a193 Move repo.verify
Matt Mackall <mpm@selenic.com>
parents:
diff changeset
310 return 1