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) |