comparison mercurial/changegroup.py @ 38346:83534c4ec58b

changegroup: use progress helper in apply() (API) Differential Revision: https://phab.mercurial-scm.org/D3766
author Martin von Zweigbergk <martinvonz@google.com>
date Fri, 15 Jun 2018 23:04:44 -0700
parents aac4be30e250
children ef692614e601
comparison
equal deleted inserted replaced
38345:bec1212eceaa 38346: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)