mercurial/verify.py
changeset 10433 767fbacb3ddc
parent 10282 08a0f04b56bd
child 10496 45734b51c99b
equal deleted inserted replaced
10432:8a8030fc57d6 10433:767fbacb3ddc
   118     havemf = len(mf) > 0
   118     havemf = len(mf) > 0
   119 
   119 
   120     ui.status(_("checking changesets\n"))
   120     ui.status(_("checking changesets\n"))
   121     seen = {}
   121     seen = {}
   122     checklog(cl, "changelog", 0)
   122     checklog(cl, "changelog", 0)
       
   123     total = len(repo)
   123     for i in repo:
   124     for i in repo:
       
   125         ui.progress('changelog', i, total=total)
   124         n = cl.node(i)
   126         n = cl.node(i)
   125         checkentry(cl, i, n, seen, [i], "changelog")
   127         checkentry(cl, i, n, seen, [i], "changelog")
   126 
   128 
   127         try:
   129         try:
   128             changes = cl.read(n)
   130             changes = cl.read(n)
   129             mflinkrevs.setdefault(changes[0], []).append(i)
   131             mflinkrevs.setdefault(changes[0], []).append(i)
   130             for f in changes[3]:
   132             for f in changes[3]:
   131                 filelinkrevs.setdefault(f, []).append(i)
   133                 filelinkrevs.setdefault(f, []).append(i)
   132         except Exception, inst:
   134         except Exception, inst:
   133             exc(i, _("unpacking changeset %s") % short(n), inst)
   135             exc(i, _("unpacking changeset %s") % short(n), inst)
       
   136     ui.progress('changelog', None)
   134 
   137 
   135     ui.status(_("checking manifests\n"))
   138     ui.status(_("checking manifests\n"))
   136     seen = {}
   139     seen = {}
   137     checklog(mf, "manifest", 0)
   140     checklog(mf, "manifest", 0)
       
   141     total = len(mf)
   138     for i in mf:
   142     for i in mf:
       
   143         ui.progress('manifests', i, total=total)
   139         n = mf.node(i)
   144         n = mf.node(i)
   140         lr = checkentry(mf, i, n, seen, mflinkrevs.get(n, []), "manifest")
   145         lr = checkentry(mf, i, n, seen, mflinkrevs.get(n, []), "manifest")
   141         if n in mflinkrevs:
   146         if n in mflinkrevs:
   142             del mflinkrevs[n]
   147             del mflinkrevs[n]
   143         else:
   148         else:
   149                     err(lr, _("file without name in manifest"))
   154                     err(lr, _("file without name in manifest"))
   150                 elif f != "/dev/null":
   155                 elif f != "/dev/null":
   151                     filenodes.setdefault(f, {}).setdefault(fn, lr)
   156                     filenodes.setdefault(f, {}).setdefault(fn, lr)
   152         except Exception, inst:
   157         except Exception, inst:
   153             exc(lr, _("reading manifest delta %s") % short(n), inst)
   158             exc(lr, _("reading manifest delta %s") % short(n), inst)
       
   159     ui.progress('manifests', None)
   154 
   160 
   155     ui.status(_("crosschecking files in changesets and manifests\n"))
   161     ui.status(_("crosschecking files in changesets and manifests\n"))
   156 
   162 
       
   163     total = len(mflinkrevs) + len(filelinkrevs) + len(filenodes)
       
   164     count = 0
   157     if havemf:
   165     if havemf:
   158         for c, m in sorted([(c, m) for m in mflinkrevs
   166         for c, m in sorted([(c, m) for m in mflinkrevs
   159                             for c in mflinkrevs[m]]):
   167                             for c in mflinkrevs[m]]):
       
   168             count += 1
       
   169             ui.progress('crosscheck', count, total=total)
   160             err(c, _("changeset refers to unknown manifest %s") % short(m))
   170             err(c, _("changeset refers to unknown manifest %s") % short(m))
   161         mflinkrevs = None # del is bad here due to scope issues
   171         mflinkrevs = None # del is bad here due to scope issues
   162 
   172 
   163         for f in sorted(filelinkrevs):
   173         for f in sorted(filelinkrevs):
       
   174             count += 1
       
   175             ui.progress('crosscheck', count, total=total)
   164             if f not in filenodes:
   176             if f not in filenodes:
   165                 lr = filelinkrevs[f][0]
   177                 lr = filelinkrevs[f][0]
   166                 err(lr, _("in changeset but not in manifest"), f)
   178                 err(lr, _("in changeset but not in manifest"), f)
   167 
   179 
   168     if havecl:
   180     if havecl:
   169         for f in sorted(filenodes):
   181         for f in sorted(filenodes):
       
   182             count += 1
       
   183             ui.progress('crosscheck', count, total=total)
   170             if f not in filelinkrevs:
   184             if f not in filelinkrevs:
   171                 try:
   185                 try:
   172                     fl = repo.file(f)
   186                     fl = repo.file(f)
   173                     lr = min([fl.linkrev(fl.rev(n)) for n in filenodes[f]])
   187                     lr = min([fl.linkrev(fl.rev(n)) for n in filenodes[f]])
   174                 except:
   188                 except:
   175                     lr = None
   189                     lr = None
   176                 err(lr, _("in manifest but not in changeset"), f)
   190                 err(lr, _("in manifest but not in changeset"), f)
   177 
   191 
       
   192     ui.progress('crosscheck', None)
       
   193 
   178     ui.status(_("checking files\n"))
   194     ui.status(_("checking files\n"))
   179 
   195 
   180     storefiles = set()
   196     storefiles = set()
   181     for f, f2, size in repo.store.datafiles():
   197     for f, f2, size in repo.store.datafiles():
   182         if not f:
   198         if not f:
   183             err(None, _("cannot decode filename '%s'") % f2)
   199             err(None, _("cannot decode filename '%s'") % f2)
   184         elif size > 0:
   200         elif size > 0:
   185             storefiles.add(f)
   201             storefiles.add(f)
   186 
   202 
   187     files = sorted(set(filenodes) | set(filelinkrevs))
   203     files = sorted(set(filenodes) | set(filelinkrevs))
   188     for f in files:
   204     total = len(files)
       
   205     for i, f in enumerate(files):
       
   206         ui.progress('files', i, item=f, total=total)
   189         try:
   207         try:
   190             linkrevs = filelinkrevs[f]
   208             linkrevs = filelinkrevs[f]
   191         except KeyError:
   209         except KeyError:
   192             # in manifest but not in changelog
   210             # in manifest but not in changelog
   193             linkrevs = []
   211             linkrevs = []
   261         # cross-check
   279         # cross-check
   262         if f in filenodes:
   280         if f in filenodes:
   263             fns = [(lr, n) for n, lr in filenodes[f].iteritems()]
   281             fns = [(lr, n) for n, lr in filenodes[f].iteritems()]
   264             for lr, node in sorted(fns):
   282             for lr, node in sorted(fns):
   265                 err(lr, _("%s in manifests not found") % short(node), f)
   283                 err(lr, _("%s in manifests not found") % short(node), f)
       
   284     ui.progress('files', None)
   266 
   285 
   267     for f in storefiles:
   286     for f in storefiles:
   268         warn(_("warning: orphan revlog '%s'") % f)
   287         warn(_("warning: orphan revlog '%s'") % f)
   269 
   288 
   270     ui.status(_("%d files, %d changesets, %d total revisions\n") %
   289     ui.status(_("%d files, %d changesets, %d total revisions\n") %