##// END OF EJS Templates
verify: filter the candidate list for broken linkrevs
Matt Mackall -
r9657:96c803e9 default
parent child Browse files
Show More
@@ -27,6 +27,7 b' def _verify(repo):'
27 ui = repo.ui
27 ui = repo.ui
28 cl = repo.changelog
28 cl = repo.changelog
29 mf = repo.manifest
29 mf = repo.manifest
30 lrugetctx = util.lrucachefunc(repo.changectx)
30
31
31 if not repo.cancopy():
32 if not repo.cancopy():
32 raise util.Abort(_("cannot verify bundle or remote repos"))
33 raise util.Abort(_("cannot verify bundle or remote repos"))
@@ -78,6 +79,13 b' def _verify(repo):'
78 msg = _("rev %d points to unexpected changeset %d")
79 msg = _("rev %d points to unexpected changeset %d")
79 err(None, msg % (i, lr), f)
80 err(None, msg % (i, lr), f)
80 if linkrevs:
81 if linkrevs:
82 if f and len(linkrevs) > 1:
83 try:
84 # attempt to filter down to real linkrevs
85 linkrevs = [l for l in linkrevs
86 if lrugetctx(l)[f].filenode() == node]
87 except:
88 pass
81 warn(_(" (expected %s)") % " ".join(map(str, linkrevs)))
89 warn(_(" (expected %s)") % " ".join(map(str, linkrevs)))
82 lr = None # can't be trusted
90 lr = None # can't be trusted
83
91
@@ -136,9 +144,7 b' def _verify(repo):'
136 if not f:
144 if not f:
137 err(lr, _("file without name in manifest"))
145 err(lr, _("file without name in manifest"))
138 elif f != "/dev/null":
146 elif f != "/dev/null":
139 fns = filenodes.setdefault(f, {})
147 filenodes.setdefault(f, {}).setdefault(fn, lr)
140 if fn not in fns:
141 fns[fn] = i
142 except Exception, inst:
148 except Exception, inst:
143 exc(lr, _("reading manifest delta %s") % short(n), inst)
149 exc(lr, _("reading manifest delta %s") % short(n), inst)
144
150
@@ -173,7 +179,6 b' def _verify(repo):'
173 elif size > 0:
179 elif size > 0:
174 storefiles.add(f)
180 storefiles.add(f)
175
181
176 lrugetctx = util.lrucachefunc(repo.changectx)
177 files = sorted(set(filenodes) | set(filelinkrevs))
182 files = sorted(set(filenodes) | set(filelinkrevs))
178 for f in files:
183 for f in files:
179 try:
184 try:
@@ -250,7 +255,7 b' def _verify(repo):'
250
255
251 # cross-check
256 # cross-check
252 if f in filenodes:
257 if f in filenodes:
253 fns = [(mf.linkrev(l), n) for n,l in filenodes[f].iteritems()]
258 fns = [(lr, n) for n,lr in filenodes[f].iteritems()]
254 for lr, node in sorted(fns):
259 for lr, node in sorted(fns):
255 err(lr, _("%s in manifests not found") % short(node), f)
260 err(lr, _("%s in manifests not found") % short(node), f)
256
261
General Comments 0
You need to be logged in to leave comments. Login now