comparison mercurial/changegroup.py @ 38410:1c5c4a5dd86d

changegroup: use progress helper Although it looks like this code was micro-optimized, I could not measure any slow-down. Differential Revision: https://phab.mercurial-scm.org/D3811
author Martin von Zweigbergk <martinvonz@google.com>
date Mon, 18 Jun 2018 15:55:38 -0700
parents daa08d45740f
children 0db41eb0a3ac
comparison
equal deleted inserted replaced
38409:ce65c25dc161 38410:1c5c4a5dd86d
514 reorder = None 514 reorder = None
515 else: 515 else:
516 reorder = stringutil.parsebool(reorder) 516 reorder = stringutil.parsebool(reorder)
517 self._repo = repo 517 self._repo = repo
518 self._reorder = reorder 518 self._reorder = reorder
519 self._progress = repo.ui.progress
520 if self._repo.ui.verbose and not self._repo.ui.debugflag: 519 if self._repo.ui.verbose and not self._repo.ui.debugflag:
521 self._verbosenote = self._repo.ui.note 520 self._verbosenote = self._repo.ui.note
522 else: 521 else:
523 self._verbosenote = lambda s: None 522 self._verbosenote = lambda s: None
524 523
563 # add the parent of the first rev 562 # add the parent of the first rev
564 p = revlog.parentrevs(revs[0])[0] 563 p = revlog.parentrevs(revs[0])[0]
565 revs.insert(0, p) 564 revs.insert(0, p)
566 565
567 # build deltas 566 # build deltas
568 total = len(revs) - 1 567 progress = None
569 msgbundling = _('bundling') 568 if units is not None:
569 progress = self._repo.ui.makeprogress(_('bundling'), unit=units,
570 total=(len(revs) - 1))
570 for r in xrange(len(revs) - 1): 571 for r in xrange(len(revs) - 1):
571 if units is not None: 572 if progress:
572 self._progress(msgbundling, r + 1, unit=units, total=total) 573 progress.update(r + 1)
573 prev, curr = revs[r], revs[r + 1] 574 prev, curr = revs[r], revs[r + 1]
574 linknode = lookup(revlog.node(curr)) 575 linknode = lookup(revlog.node(curr))
575 for c in self.revchunk(revlog, curr, prev, linknode): 576 for c in self.revchunk(revlog, curr, prev, linknode):
576 yield c 577 yield c
577 578
578 if units is not None: 579 if progress:
579 self._progress(msgbundling, None) 580 progress.complete()
580 yield self.close() 581 yield self.close()
581 582
582 # filter any nodes that claim to be part of the known set 583 # filter any nodes that claim to be part of the known set
583 def prune(self, revlog, missing, commonrevs): 584 def prune(self, revlog, missing, commonrevs):
584 rr, rl = revlog.rev, revlog.linkrev 585 rr, rl = revlog.rev, revlog.linkrev
740 yield self._manifestsdone() 741 yield self._manifestsdone()
741 742
742 # The 'source' parameter is useful for extensions 743 # The 'source' parameter is useful for extensions
743 def generatefiles(self, changedfiles, linknodes, commonrevs, source): 744 def generatefiles(self, changedfiles, linknodes, commonrevs, source):
744 repo = self._repo 745 repo = self._repo
745 progress = self._progress 746 progress = repo.ui.makeprogress(_('bundling'), unit=_('files'),
746 msgbundling = _('bundling') 747 total=len(changedfiles))
747
748 total = len(changedfiles)
749 # for progress output
750 msgfiles = _('files')
751 for i, fname in enumerate(sorted(changedfiles)): 748 for i, fname in enumerate(sorted(changedfiles)):
752 filerevlog = repo.file(fname) 749 filerevlog = repo.file(fname)
753 if not filerevlog: 750 if not filerevlog:
754 raise error.Abort(_("empty or missing file data for %s") % 751 raise error.Abort(_("empty or missing file data for %s") %
755 fname) 752 fname)
760 def lookupfilelog(x): 757 def lookupfilelog(x):
761 return linkrevnodes[x] 758 return linkrevnodes[x]
762 759
763 filenodes = self.prune(filerevlog, linkrevnodes, commonrevs) 760 filenodes = self.prune(filerevlog, linkrevnodes, commonrevs)
764 if filenodes: 761 if filenodes:
765 progress(msgbundling, i + 1, item=fname, unit=msgfiles, 762 progress.update(i + 1, item=fname)
766 total=total)
767 h = self.fileheader(fname) 763 h = self.fileheader(fname)
768 size = len(h) 764 size = len(h)
769 yield h 765 yield h
770 for chunk in self.group(filenodes, filerevlog, lookupfilelog): 766 for chunk in self.group(filenodes, filerevlog, lookupfilelog):
771 size += len(chunk) 767 size += len(chunk)
772 yield chunk 768 yield chunk
773 self._verbosenote(_('%8.i %s\n') % (size, fname)) 769 self._verbosenote(_('%8.i %s\n') % (size, fname))
774 progress(msgbundling, None) 770 progress.complete()
775 771
776 def deltaparent(self, revlog, rev, p1, p2, prev): 772 def deltaparent(self, revlog, rev, p1, p2, prev):
777 if not revlog.candelta(prev, rev): 773 if not revlog.candelta(prev, rev):
778 raise error.ProgrammingError('cg1 should not be used in this case') 774 raise error.ProgrammingError('cg1 should not be used in this case')
779 return prev 775 return prev