mercurial/changegroup.py
changeset 38352 83534c4ec58b
parent 38197 aac4be30e250
child 38379 ef692614e601
equal deleted inserted replaced
38351:bec1212eceaa 38352:83534c4ec58b
   235                     next = pos + 2**20
   235                     next = pos + 2**20
   236                     yield chunk[pos:next]
   236                     yield chunk[pos:next]
   237                     pos = next
   237                     pos = next
   238             yield closechunk()
   238             yield closechunk()
   239 
   239 
   240     def _unpackmanifests(self, repo, revmap, trp, prog, numchanges):
   240     def _unpackmanifests(self, repo, revmap, trp, prog):
   241         # We know that we'll never have more manifests than we had
   241         self.callback = prog.increment
   242         # changesets.
       
   243         self.callback = prog(_('manifests'), numchanges)
       
   244         # no need to check for empty manifest group here:
   242         # no need to check for empty manifest group here:
   245         # if the result of the merge of 1 and 2 is the same in 3 and 4,
   243         # if the result of the merge of 1 and 2 is the same in 3 and 4,
   246         # no new manifest will be created and the manifest group will
   244         # no new manifest will be created and the manifest group will
   247         # be empty during the pull
   245         # be empty during the pull
   248         self.manifestheader()
   246         self.manifestheader()
   249         deltas = self.deltaiter()
   247         deltas = self.deltaiter()
   250         repo.manifestlog._revlog.addgroup(deltas, revmap, trp)
   248         repo.manifestlog._revlog.addgroup(deltas, revmap, trp)
   251         repo.ui.progress(_('manifests'), None)
   249         prog.update(None)
   252         self.callback = None
   250         self.callback = None
   253 
   251 
   254     def apply(self, repo, tr, srctype, url, targetphase=phases.draft,
   252     def apply(self, repo, tr, srctype, url, targetphase=phases.draft,
   255               expectedtotal=None):
   253               expectedtotal=None):
   256         """Add the changegroup returned by source.read() to this repo.
   254         """Add the changegroup returned by source.read() to this repo.
   291 
   289 
   292             trp = weakref.proxy(tr)
   290             trp = weakref.proxy(tr)
   293             # pull off the changeset group
   291             # pull off the changeset group
   294             repo.ui.status(_("adding changesets\n"))
   292             repo.ui.status(_("adding changesets\n"))
   295             clstart = len(cl)
   293             clstart = len(cl)
   296             class prog(object):
   294             progress = repo.ui.makeprogress(_('changesets'), unit=_('chunks'),
   297                 def __init__(self, step, total):
   295                                             total=expectedtotal)
   298                     self._step = step
   296             self.callback = progress.increment
   299                     self._total = total
       
   300                     self._count = 1
       
   301                 def __call__(self):
       
   302                     repo.ui.progress(self._step, self._count, unit=_('chunks'),
       
   303                                      total=self._total)
       
   304                     self._count += 1
       
   305             self.callback = prog(_('changesets'), expectedtotal)
       
   306 
   297 
   307             efiles = set()
   298             efiles = set()
   308             def onchangelog(cl, node):
   299             def onchangelog(cl, node):
   309                 efiles.update(cl.readfiles(node))
   300                 efiles.update(cl.readfiles(node))
   310 
   301 
   316             if not cgnodes:
   307             if not cgnodes:
   317                 repo.ui.develwarn('applied empty changegroup',
   308                 repo.ui.develwarn('applied empty changegroup',
   318                                   config='warn-empty-changegroup')
   309                                   config='warn-empty-changegroup')
   319             clend = len(cl)
   310             clend = len(cl)
   320             changesets = clend - clstart
   311             changesets = clend - clstart
   321             repo.ui.progress(_('changesets'), None)
   312             progress.update(None)
   322             self.callback = None
   313             self.callback = None
   323 
   314 
   324             # pull off the manifest group
   315             # pull off the manifest group
   325             repo.ui.status(_("adding manifests\n"))
   316             repo.ui.status(_("adding manifests\n"))
   326             self._unpackmanifests(repo, revmap, trp, prog, changesets)
   317             # We know that we'll never have more manifests than we had
       
   318             # changesets.
       
   319             progress = repo.ui.makeprogress(_('manifests'), unit=_('chunks'),
       
   320                                             total=changesets)
       
   321             self._unpackmanifests(repo, revmap, trp, progress)
   327 
   322 
   328             needfiles = {}
   323             needfiles = {}
   329             if repo.ui.configbool('server', 'validate'):
   324             if repo.ui.configbool('server', 'validate'):
   330                 cl = repo.changelog
   325                 cl = repo.changelog
   331                 ml = repo.manifestlog
   326                 ml = repo.manifestlog
   473 
   468 
   474     def _deltaheader(self, headertuple, prevnode):
   469     def _deltaheader(self, headertuple, prevnode):
   475         node, p1, p2, deltabase, cs, flags = headertuple
   470         node, p1, p2, deltabase, cs, flags = headertuple
   476         return node, p1, p2, deltabase, cs, flags
   471         return node, p1, p2, deltabase, cs, flags
   477 
   472 
   478     def _unpackmanifests(self, repo, revmap, trp, prog, numchanges):
   473     def _unpackmanifests(self, repo, revmap, trp, prog):
   479         super(cg3unpacker, self)._unpackmanifests(repo, revmap, trp, prog,
   474         super(cg3unpacker, self)._unpackmanifests(repo, revmap, trp, prog)
   480                                                   numchanges)
       
   481         for chunkdata in iter(self.filelogheader, {}):
   475         for chunkdata in iter(self.filelogheader, {}):
   482             # If we get here, there are directory manifests in the changegroup
   476             # If we get here, there are directory manifests in the changegroup
   483             d = chunkdata["filename"]
   477             d = chunkdata["filename"]
   484             repo.ui.debug("adding %s revisions\n" % d)
   478             repo.ui.debug("adding %s revisions\n" % d)
   485             dirlog = repo.manifestlog._revlog.dirlog(d)
   479             dirlog = repo.manifestlog._revlog.dirlog(d)