mercurial/localrepo.py
changeset 2232 ef3c039e7ab8
parent 2230 332950340788
child 2259 181b0643ffb1
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)