mercurial/localrepo.py
changeset 4270 cd7b36b7869c
parent 4267 b11a2fb59cf5
child 4274 f38f90a177dc
equal deleted inserted replaced
4269:bdbfc2193524 4270:cd7b36b7869c
     5 # This software may be used and distributed according to the terms
     5 # This software may be used and distributed according to the terms
     6 # of the GNU General Public License, incorporated herein by reference.
     6 # of the GNU General Public License, incorporated herein by reference.
     7 
     7 
     8 from node import *
     8 from node import *
     9 from i18n import _
     9 from i18n import _
    10 import repo, appendfile, changegroup
    10 import repo, changegroup
    11 import changelog, dirstate, filelog, manifest, context
    11 import changelog, dirstate, filelog, manifest, context
    12 import re, lock, transaction, tempfile, stat, mdiff, errno, ui
    12 import re, lock, transaction, tempfile, stat, mdiff, errno, ui
    13 import os, revlog, time, util
    13 import os, revlog, time, util
    14 
    14 
    15 class localrepository(repo.repository):
    15 class localrepository(repo.repository):
  1780 
  1780 
  1781         tr = self.transaction()
  1781         tr = self.transaction()
  1782 
  1782 
  1783         # write changelog data to temp files so concurrent readers will not see
  1783         # write changelog data to temp files so concurrent readers will not see
  1784         # inconsistent view
  1784         # inconsistent view
  1785         cl = None
  1785         cl = self.changelog
  1786         try:
  1786         cl.delayupdate()
  1787             cl = appendfile.appendchangelog(self.sopener)
  1787         oldheads = len(cl.heads())
  1788             oldheads = len(cl.heads())
  1788 
  1789 
  1789         # pull off the changeset group
  1790             # pull off the changeset group
  1790         self.ui.status(_("adding changesets\n"))
  1791             self.ui.status(_("adding changesets\n"))
  1791         cor = cl.count() - 1
  1792             cor = cl.count() - 1
  1792         chunkiter = changegroup.chunkiter(source)
       
  1793         if cl.addgroup(chunkiter, csmap, tr, 1) is None:
       
  1794             raise util.Abort(_("received changelog group is empty"))
       
  1795         cnr = cl.count() - 1
       
  1796         changesets = cnr - cor
       
  1797 
       
  1798         # pull off the manifest group
       
  1799         self.ui.status(_("adding manifests\n"))
       
  1800         chunkiter = changegroup.chunkiter(source)
       
  1801         # no need to check for empty manifest group here:
       
  1802         # if the result of the merge of 1 and 2 is the same in 3 and 4,
       
  1803         # no new manifest will be created and the manifest group will
       
  1804         # be empty during the pull
       
  1805         self.manifest.addgroup(chunkiter, revmap, tr)
       
  1806 
       
  1807         # process the files
       
  1808         self.ui.status(_("adding file changes\n"))
       
  1809         while 1:
       
  1810             f = changegroup.getchunk(source)
       
  1811             if not f:
       
  1812                 break
       
  1813             self.ui.debug(_("adding %s revisions\n") % f)
       
  1814             fl = self.file(f)
       
  1815             o = fl.count()
  1793             chunkiter = changegroup.chunkiter(source)
  1816             chunkiter = changegroup.chunkiter(source)
  1794             if cl.addgroup(chunkiter, csmap, tr, 1) is None:
  1817             if fl.addgroup(chunkiter, revmap, tr) is None:
  1795                 raise util.Abort(_("received changelog group is empty"))
  1818                 raise util.Abort(_("received file revlog group is empty"))
  1796             cnr = cl.count() - 1
  1819             revisions += fl.count() - o
  1797             changesets = cnr - cor
  1820             files += 1
  1798 
       
  1799             # pull off the manifest group
       
  1800             self.ui.status(_("adding manifests\n"))
       
  1801             chunkiter = changegroup.chunkiter(source)
       
  1802             # no need to check for empty manifest group here:
       
  1803             # if the result of the merge of 1 and 2 is the same in 3 and 4,
       
  1804             # no new manifest will be created and the manifest group will
       
  1805             # be empty during the pull
       
  1806             self.manifest.addgroup(chunkiter, revmap, tr)
       
  1807 
       
  1808             # process the files
       
  1809             self.ui.status(_("adding file changes\n"))
       
  1810             while 1:
       
  1811                 f = changegroup.getchunk(source)
       
  1812                 if not f:
       
  1813                     break
       
  1814                 self.ui.debug(_("adding %s revisions\n") % f)
       
  1815                 fl = self.file(f)
       
  1816                 o = fl.count()
       
  1817                 chunkiter = changegroup.chunkiter(source)
       
  1818                 if fl.addgroup(chunkiter, revmap, tr) is None:
       
  1819                     raise util.Abort(_("received file revlog group is empty"))
       
  1820                 revisions += fl.count() - o
       
  1821                 files += 1
       
  1822 
       
  1823             cl.writedata()
       
  1824         finally:
       
  1825             if cl:
       
  1826                 cl.cleanup()
       
  1827 
  1821 
  1828         # make changelog see real files again
  1822         # make changelog see real files again
  1829         self.changelog = changelog.changelog(self.sopener)
  1823         cl.finalize(tr)
  1830         self.changelog.checkinlinesize(tr)
       
  1831 
  1824 
  1832         newheads = len(self.changelog.heads())
  1825         newheads = len(self.changelog.heads())
  1833         heads = ""
  1826         heads = ""
  1834         if oldheads and newheads != oldheads:
  1827         if oldheads and newheads != oldheads:
  1835             heads = _(" (%+d heads)") % (newheads - oldheads)
  1828             heads = _(" (%+d heads)") % (newheads - oldheads)