mercurial/localrepo.py
changeset 1382 b113e7db06e9
parent 1375 f2b00be33e2c
child 1383 3d6d45faf8b2
equal deleted inserted replaced
1381:c29c36745c6e 1382:b113e7db06e9
  1308     def verify(self):
  1308     def verify(self):
  1309         filelinkrevs = {}
  1309         filelinkrevs = {}
  1310         filenodes = {}
  1310         filenodes = {}
  1311         changesets = revisions = files = 0
  1311         changesets = revisions = files = 0
  1312         errors = 0
  1312         errors = 0
       
  1313         neededmanifests = {}
  1313 
  1314 
  1314         seen = {}
  1315         seen = {}
  1315         self.ui.status("checking changesets\n")
  1316         self.ui.status("checking changesets\n")
  1316         for i in range(self.changelog.count()):
  1317         for i in range(self.changelog.count()):
  1317             changesets += 1
  1318             changesets += 1
  1318             n = self.changelog.node(i)
  1319             n = self.changelog.node(i)
       
  1320             l = self.changelog.linkrev(n)
       
  1321             if l != i:
       
  1322                 self.ui.warn("incorrect linkrev (%d) for changeset revision %d"
       
  1323                              % (l, i))
  1319             if n in seen:
  1324             if n in seen:
  1320                 self.ui.warn("duplicate changeset at revision %d\n" % i)
  1325                 self.ui.warn("duplicate changeset at revision %d\n" % i)
  1321                 errors += 1
  1326                 errors += 1
  1322             seen[n] = 1
  1327             seen[n] = 1
  1323 
  1328 
  1330                 changes = self.changelog.read(n)
  1335                 changes = self.changelog.read(n)
  1331             except Exception, inst:
  1336             except Exception, inst:
  1332                 self.ui.warn("unpacking changeset %s: %s\n" % (short(n), inst))
  1337                 self.ui.warn("unpacking changeset %s: %s\n" % (short(n), inst))
  1333                 errors += 1
  1338                 errors += 1
  1334 
  1339 
       
  1340             neededmanifests[changes[0]] = n
       
  1341 
  1335             for f in changes[3]:
  1342             for f in changes[3]:
  1336                 filelinkrevs.setdefault(f, []).append(i)
  1343                 filelinkrevs.setdefault(f, []).append(i)
  1337 
  1344 
  1338         seen = {}
  1345         seen = {}
  1339         self.ui.status("checking manifests\n")
  1346         self.ui.status("checking manifests\n")
  1340         for i in range(self.manifest.count()):
  1347         for i in range(self.manifest.count()):
  1341             n = self.manifest.node(i)
  1348             n = self.manifest.node(i)
       
  1349             l = self.manifest.linkrev(n)
       
  1350 
       
  1351             if l < 0 or l >= self.changelog.count():
       
  1352                 self.ui.warn("bad manifest link (%d) at revision %d\n" %
       
  1353                              (l, i))
       
  1354                 errors += 1
       
  1355 
       
  1356             if n in neededmanifests:
       
  1357                 del neededmanifests[n]
       
  1358 
  1342             if n in seen:
  1359             if n in seen:
  1343                 self.ui.warn("duplicate manifest at revision %d\n" % i)
  1360                 self.ui.warn("duplicate manifest at revision %d\n" % i)
  1344                 errors += 1
  1361                 errors += 1
  1345             seen[n] = 1
  1362             seen[n] = 1
  1346 
  1363 
  1363             ff = [ l.split('\0') for l in delta.splitlines() ]
  1380             ff = [ l.split('\0') for l in delta.splitlines() ]
  1364             for f, fn in ff:
  1381             for f, fn in ff:
  1365                 filenodes.setdefault(f, {})[bin(fn[:40])] = 1
  1382                 filenodes.setdefault(f, {})[bin(fn[:40])] = 1
  1366 
  1383 
  1367         self.ui.status("crosschecking files in changesets and manifests\n")
  1384         self.ui.status("crosschecking files in changesets and manifests\n")
       
  1385 
       
  1386         for m,c in neededmanifests.items():
       
  1387             self.ui.warn("Changeset %s refers to unknown manifest %s\n"
       
  1388                          % (m, c))
       
  1389             errors += 1
       
  1390         del neededmanifests
       
  1391 
  1368         for f in filenodes:
  1392         for f in filenodes:
  1369             if f not in filelinkrevs:
  1393             if f not in filelinkrevs:
  1370                 self.ui.warn("file %s in manifest but not in changesets\n" % f)
  1394                 self.ui.warn("file %s in manifest but not in changesets\n" % f)
  1371                 errors += 1
  1395                 errors += 1
  1372 
  1396