##// 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 s = fp.read()
134 s = fp.read()
135 fp.close()
135 fp.close()
136 os.unlink(tmpname)
136 os.unlink(tmpname)
137 del self.tmpnames[name]
137 fp = self.realopener(name, 'a')
138 fp = self.realopener(name, 'a')
138 fp.write(s)
139 fp.write(s)
139 fp.close()
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 # files for changelog and manifest are in different appendopeners, so
147 # files for changelog and manifest are in different appendopeners, so
142 # not mixed up together.
148 # not mixed up together.
143
149
@@ -1477,46 +1477,57 b' class localrepository(object):'
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 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
1486 # pull off the changeset group
1485 self.ui.status(_("adding changesets\n"))
1487 self.ui.status(_("adding changesets\n"))
1486 co = cl.tip()
1488 co = cl.tip()
1487 chunkiter = changegroup.chunkiter(source)
1489 chunkiter = changegroup.chunkiter(source)
1488 cn = cl.addgroup(chunkiter, csmap, tr, 1) # unique
1490 cn = cl.addgroup(chunkiter, csmap, tr, 1) # unique
1489 cnr, cor = map(cl.rev, (cn, co))
1491 cnr, cor = map(cl.rev, (cn, co))
1490 if cn == nullid:
1492 if cn == nullid:
1491 cnr = cor
1493 cnr = cor
1492 changesets = 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
1501 # pull off the manifest group
1497 self.ui.status(_("adding manifests\n"))
1502 self.ui.status(_("adding manifests\n"))
1498 mm = mf.tip()
1503 mm = mf.tip()
1499 chunkiter = changegroup.chunkiter(source)
1504 chunkiter = changegroup.chunkiter(source)
1500 mo = mf.addgroup(chunkiter, revmap, tr)
1505 mo = mf.addgroup(chunkiter, revmap, tr)
1501
1506
1502 # process the files
1507 # process the files
1503 self.ui.status(_("adding file changes\n"))
1508 self.ui.status(_("adding file changes\n"))
1504 while 1:
1509 while 1:
1505 f = changegroup.getchunk(source)
1510 f = changegroup.getchunk(source)
1506 if not f:
1511 if not f:
1507 break
1512 break
1508 self.ui.debug(_("adding %s revisions\n") % f)
1513 self.ui.debug(_("adding %s revisions\n") % f)
1509 fl = self.file(f)
1514 fl = self.file(f)
1510 o = fl.count()
1515 o = fl.count()
1511 chunkiter = changegroup.chunkiter(source)
1516 chunkiter = changegroup.chunkiter(source)
1512 n = fl.addgroup(chunkiter, revmap, tr)
1517 n = fl.addgroup(chunkiter, revmap, tr)
1513 revisions += fl.count() - o
1518 revisions += fl.count() - o
1514 files += 1
1519 files += 1
1515
1520
1516 # write order here is important so concurrent readers will see
1521 # write order here is important so concurrent readers will see
1517 # consistent view of repo
1522 # consistent view of repo
1518 mf.writedata()
1523 mf.writedata()
1519 cl.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)
General Comments 0
You need to be logged in to leave comments. Login now