comparison mercurial/localrepo.py @ 2232:ef3c039e7ab8

Always remove appendopener tmp files (fixes issue235). test-hup triggered this bug by killing "hg serve --stdio".
author Thomas Arendsen Hein <thomas@intevation.de>
date Tue, 09 May 2006 17:03:00 +0200
parents 332950340788
children 181b0643ffb1
comparison
equal deleted inserted replaced
2231:9a2f4b2e7cf1 2232:ef3c039e7ab8
1475 1475
1476 tr = self.transaction() 1476 tr = self.transaction()
1477 1477
1478 # write changelog and manifest data to temp files so 1478 # write changelog and manifest data to temp files so
1479 # concurrent readers will not see inconsistent view 1479 # concurrent readers will not see inconsistent view
1480 cl = appendfile.appendchangelog(self.opener, self.changelog.version) 1480 cl = None
1481 1481 try:
1482 oldheads = len(cl.heads()) 1482 cl = appendfile.appendchangelog(self.opener, self.changelog.version)
1483 1483
1484 # pull off the changeset group 1484 oldheads = len(cl.heads())
1485 self.ui.status(_("adding changesets\n")) 1485
1486 co = cl.tip() 1486 # pull off the changeset group
1487 chunkiter = changegroup.chunkiter(source) 1487 self.ui.status(_("adding changesets\n"))
1488 cn = cl.addgroup(chunkiter, csmap, tr, 1) # unique 1488 co = cl.tip()
1489 cnr, cor = map(cl.rev, (cn, co))
1490 if cn == nullid:
1491 cnr = cor
1492 changesets = cnr - cor
1493
1494 mf = appendfile.appendmanifest(self.opener, self.manifest.version)
1495
1496 # pull off the manifest group
1497 self.ui.status(_("adding manifests\n"))
1498 mm = mf.tip()
1499 chunkiter = changegroup.chunkiter(source)
1500 mo = mf.addgroup(chunkiter, revmap, tr)
1501
1502 # process the files
1503 self.ui.status(_("adding file changes\n"))
1504 while 1:
1505 f = changegroup.getchunk(source)
1506 if not f:
1507 break
1508 self.ui.debug(_("adding %s revisions\n") % f)
1509 fl = self.file(f)
1510 o = fl.count()
1511 chunkiter = changegroup.chunkiter(source) 1489 chunkiter = changegroup.chunkiter(source)
1512 n = fl.addgroup(chunkiter, revmap, tr) 1490 cn = cl.addgroup(chunkiter, csmap, tr, 1) # unique
1513 revisions += fl.count() - o 1491 cnr, cor = map(cl.rev, (cn, co))
1514 files += 1 1492 if cn == nullid:
1515 1493 cnr = cor
1516 # write order here is important so concurrent readers will see 1494 changesets = cnr - cor
1517 # consistent view of repo 1495
1518 mf.writedata() 1496 mf = None
1519 cl.writedata() 1497 try:
1498 mf = appendfile.appendmanifest(self.opener,
1499 self.manifest.version)
1500
1501 # pull off the manifest group
1502 self.ui.status(_("adding manifests\n"))
1503 mm = mf.tip()
1504 chunkiter = changegroup.chunkiter(source)
1505 mo = mf.addgroup(chunkiter, revmap, tr)
1506
1507 # process the files
1508 self.ui.status(_("adding file changes\n"))
1509 while 1:
1510 f = changegroup.getchunk(source)
1511 if not f:
1512 break
1513 self.ui.debug(_("adding %s revisions\n") % f)
1514 fl = self.file(f)
1515 o = fl.count()
1516 chunkiter = changegroup.chunkiter(source)
1517 n = fl.addgroup(chunkiter, revmap, tr)
1518 revisions += fl.count() - o
1519 files += 1
1520
1521 # write order here is important so concurrent readers will see
1522 # consistent view of repo
1523 mf.writedata()
1524 finally:
1525 if mf:
1526 mf.cleanup()
1527 cl.writedata()
1528 finally:
1529 if cl:
1530 cl.cleanup()
1520 1531
1521 # make changelog and manifest see real files again 1532 # make changelog and manifest see real files again
1522 self.changelog = changelog.changelog(self.opener, self.changelog.version) 1533 self.changelog = changelog.changelog(self.opener, self.changelog.version)
1523 self.manifest = manifest.manifest(self.opener, self.manifest.version) 1534 self.manifest = manifest.manifest(self.opener, self.manifest.version)
1524 self.changelog.checkinlinesize(tr) 1535 self.changelog.checkinlinesize(tr)