##// END OF EJS Templates
Always remove appendopener tmp files (fixes issue235)....
Thomas Arendsen Hein -
r2232:ef3c039e default
parent child Browse files
Show More
@@ -134,10 +134,16 b' class appendopener(object):'
134 134 s = fp.read()
135 135 fp.close()
136 136 os.unlink(tmpname)
137 del self.tmpnames[name]
137 138 fp = self.realopener(name, 'a')
138 139 fp.write(s)
139 140 fp.close()
140 141
142 def cleanup(self):
143 '''delete temp files (this discards unwritten data!)'''
144 for tmpname in self.tmpnames.values():
145 os.unlink(tmpname)
146
141 147 # files for changelog and manifest are in different appendopeners, so
142 148 # not mixed up together.
143 149
@@ -1477,46 +1477,57 b' class localrepository(object):'
1477 1477
1478 1478 # write changelog and manifest data to temp files so
1479 1479 # concurrent readers will not see inconsistent view
1480 cl = appendfile.appendchangelog(self.opener, self.changelog.version)
1480 cl = None
1481 try:
1482 cl = appendfile.appendchangelog(self.opener, self.changelog.version)
1481 1483
1482 oldheads = len(cl.heads())
1484 oldheads = len(cl.heads())
1483 1485
1484 # pull off the changeset group
1485 self.ui.status(_("adding changesets\n"))
1486 co = cl.tip()
1487 chunkiter = changegroup.chunkiter(source)
1488 cn = cl.addgroup(chunkiter, csmap, tr, 1) # unique
1489 cnr, cor = map(cl.rev, (cn, co))
1490 if cn == nullid:
1491 cnr = cor
1492 changesets = cnr - cor
1486 # pull off the changeset group
1487 self.ui.status(_("adding changesets\n"))
1488 co = cl.tip()
1489 chunkiter = changegroup.chunkiter(source)
1490 cn = cl.addgroup(chunkiter, csmap, tr, 1) # unique
1491 cnr, cor = map(cl.rev, (cn, co))
1492 if cn == nullid:
1493 cnr = cor
1494 changesets = cnr - cor
1493 1495
1494 mf = appendfile.appendmanifest(self.opener, self.manifest.version)
1496 mf = None
1497 try:
1498 mf = appendfile.appendmanifest(self.opener,
1499 self.manifest.version)
1495 1500
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 # 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)
1501 1506
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)
1512 n = fl.addgroup(chunkiter, revmap, tr)
1513 revisions += fl.count() - o
1514 files += 1
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
1515 1520
1516 # write order here is important so concurrent readers will see
1517 # consistent view of repo
1518 mf.writedata()
1519 cl.writedata()
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 1532 # make changelog and manifest see real files again
1522 1533 self.changelog = changelog.changelog(self.opener, self.changelog.version)
General Comments 0
You need to be logged in to leave comments. Login now