hg
changeset 121 66fb61d9d97d
parent 107 707a7481a861
child 122 82fd709deb8e
equal deleted inserted replaced
120:bae6f0328f63 121:66fb61d9d97d
   452             ui.warn("manifest %s points to %s, not %s\n" %
   452             ui.warn("manifest %s points to %s, not %s\n" %
   453                     (hg.hex(n), hg.hex(ca), hg.hex(cc)))
   453                     (hg.hex(n), hg.hex(ca), hg.hex(cc)))
   454             errors += 1
   454             errors += 1
   455 
   455 
   456         try:
   456         try:
   457             m = repo.manifest.read(n)
   457             delta = mdiff.patchtext(repo.manifest.delta(n))
       
   458         except KeyboardInterrupt:
       
   459             print "aborted"
       
   460             sys.exit(0)
   458         except Exception, inst:
   461         except Exception, inst:
   459             ui.warn("unpacking manifest %s: %s\n" % (hg.short(n), inst))
   462             ui.warn("unpacking manifest %s: %s\n" % (hg.short(n), inst))
   460             errors += 1
   463             errors += 1
   461             
   464             
   462         for f, fn in m.items():
   465         ff = [ l.split('\0') for l in delta.splitlines() ]
   463             filenodes.setdefault(f, {})[fn] = 1
   466         for f, fn in ff:
       
   467             filenodes.setdefault(f, {})[hg.bin(fn)] = 1
   464 
   468 
   465     ui.status("crosschecking files in changesets and manifests\n")
   469     ui.status("crosschecking files in changesets and manifests\n")
   466     for f in filenodes:
   470     for f in filenodes:
   467         if f not in filelinkrevs:
   471         if f not in filelinkrevs:
   468             ui.warn("file %s in manifest but not in changesets\n" % f)
   472             ui.warn("file %s in manifest but not in changesets\n" % f)
   469             errors += 1
   473             errors += 1
   470 
   474 
   471     for f in filelinkrevs:
   475     for f in filelinkrevs:
   472         if f not in filenodes:
   476         if f not in filenodes:
   473             ui.warn("file %s in changeset but not in manifest" % f)
   477             ui.warn("file %s in changeset but not in manifest\n" % f)
   474             errors += 1
   478             errors += 1
   475 
   479 
   476     ui.status("checking files\n")
   480     ui.status("checking files\n")
   477     for f in filenodes:
   481     ff = filenodes.keys()
       
   482     ff.sort()
       
   483     for f in ff:
       
   484         if f == "/dev/null": continue
   478         files += 1
   485         files += 1
   479         fl = repo.file(f)
   486         fl = repo.file(f)
   480         nodes = { hg.nullid: 1 }
   487         nodes = { hg.nullid: 1 }
   481         for i in range(fl.count()):
   488         for i in range(fl.count()):
   482             n = fl.node(i)
   489             n = fl.node(i)
   483 
   490 
   484             if n not in filenodes[f]:
   491             if n not in filenodes[f]:
   485                 ui.warn("%s:%s not in manifests\n" % (f, hg.short(n)))
   492                 ui.warn("%s: %d:%s not in manifests\n" % (f, i, hg.short(n)))
       
   493                 print len(filenodes[f].keys()), fl.count(), f
   486                 errors += 1
   494                 errors += 1
   487             else:
   495             else:
   488                 del filenodes[f][n]
   496                 del filenodes[f][n]
   489 
   497 
   490             flr = fl.linkrev(n)
   498             flr = fl.linkrev(n)