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