diff -r bda5f35fbf67 -r c36dad4f6e54 mercurial/localrepo.py --- a/mercurial/localrepo.py Fri Dec 10 13:31:06 2010 -0600 +++ b/mercurial/localrepo.py Fri Dec 10 13:30:37 2010 -0600 @@ -1501,8 +1501,13 @@ group = cl.group(msng_cl_lst, identity, collect) for cnt, chnk in enumerate(group): yield chnk - self.ui.progress(_('bundling changes'), cnt, unit=_('chunks')) - self.ui.progress(_('bundling changes'), None) + # revlog.group yields three entries per node, so + # dividing by 3 gives an approximation of how many + # nodes have been processed. + self.ui.progress(_('bundling'), cnt / 3, + unit=_('changesets')) + changecount = cnt / 3 + self.ui.progress(_('bundling'), None) prune(mnfst, msng_mnfst_set) add_extra_nodes(1, msng_mnfst_set) @@ -1514,10 +1519,17 @@ group = mnfst.group(msng_mnfst_lst, lambda mnode: msng_mnfst_set[mnode], filenode_collector(changedfiles)) + efiles = {} for cnt, chnk in enumerate(group): + if cnt % 3 == 1: + mnode = chnk[:20] + efiles.update(mnfst.readdelta(mnode)) yield chnk - self.ui.progress(_('bundling manifests'), cnt, unit=_('chunks')) - self.ui.progress(_('bundling manifests'), None) + # see above comment for why we divide by 3 + self.ui.progress(_('bundling'), cnt / 3, + unit=_('manifests'), total=changecount) + self.ui.progress(_('bundling'), None) + efiles = len(efiles) # These are no longer needed, dereference and toss the memory for # them. @@ -1531,8 +1543,7 @@ msng_filenode_set.setdefault(fname, {}) changedfiles.add(fname) # Go through all our files in order sorted by name. - cnt = 0 - for fname in sorted(changedfiles): + for idx, fname in enumerate(sorted(changedfiles)): filerevlog = self.file(fname) if not len(filerevlog): raise util.Abort(_("empty or missing revlog for %s") % fname) @@ -1555,13 +1566,16 @@ group = filerevlog.group(nodeiter, lambda fnode: missingfnodes[fnode]) for chnk in group: + # even though we print the same progress on + # most loop iterations, put the progress call + # here so that time estimates (if any) can be updated self.ui.progress( - _('bundling files'), cnt, item=fname, unit=_('chunks')) - cnt += 1 + _('bundling'), idx, item=fname, + unit=_('files'), total=efiles) yield chnk # Signal that no more groups are left. yield changegroup.closechunk() - self.ui.progress(_('bundling files'), None) + self.ui.progress(_('bundling'), None) if msng_cl_lst: self.hook('outgoing', node=hex(msng_cl_lst[0]), source=source) @@ -1609,20 +1623,30 @@ collect = changegroup.collector(cl, mmfs, changedfiles) for cnt, chnk in enumerate(cl.group(nodes, identity, collect)): - self.ui.progress(_('bundling changes'), cnt, unit=_('chunks')) + # revlog.group yields three entries per node, so + # dividing by 3 gives an approximation of how many + # nodes have been processed. + self.ui.progress(_('bundling'), cnt / 3, unit=_('changesets')) yield chnk - self.ui.progress(_('bundling changes'), None) + changecount = cnt / 3 + self.ui.progress(_('bundling'), None) mnfst = self.manifest nodeiter = gennodelst(mnfst) + efiles = {} for cnt, chnk in enumerate(mnfst.group(nodeiter, lookuplinkrev_func(mnfst))): - self.ui.progress(_('bundling manifests'), cnt, unit=_('chunks')) + if cnt % 3 == 1: + mnode = chnk[:20] + efiles.update(mnfst.readdelta(mnode)) + # see above comment for why we divide by 3 + self.ui.progress(_('bundling'), cnt / 3, + unit=_('manifests'), total=changecount) yield chnk - self.ui.progress(_('bundling manifests'), None) + efiles = len(efiles) + self.ui.progress(_('bundling'), None) - cnt = 0 - for fname in sorted(changedfiles): + for idx, fname in enumerate(sorted(changedfiles)): filerevlog = self.file(fname) if not len(filerevlog): raise util.Abort(_("empty or missing revlog for %s") % fname) @@ -1634,10 +1658,10 @@ lookup = lookuplinkrev_func(filerevlog) for chnk in filerevlog.group(nodeiter, lookup): self.ui.progress( - _('bundling files'), cnt, item=fname, unit=_('chunks')) - cnt += 1 + _('bundling'), idx, item=fname, + total=efiles, unit=_('files')) yield chnk - self.ui.progress(_('bundling files'), None) + self.ui.progress(_('bundling'), None) yield changegroup.closechunk()