# HG changeset patch # User Sune Foldager # Date 1368219474 -7200 # Node ID 6308896b1d4a763f3c347aee8787067abeaf608d # Parent 94a22595f702c404f5de746d436668376cd09cb7 bundle-ng: simplify bundle10.generate Remove complex local sub-functions mutating function-global variables. Simplify counting used for progress output. diff -r 94a22595f702 -r 6308896b1d4a mercurial/changegroup.py --- a/mercurial/changegroup.py Fri May 10 22:47:12 2013 +0200 +++ b/mercurial/changegroup.py Fri May 10 22:57:54 2013 +0200 @@ -245,8 +245,6 @@ self._repo = repo self._reorder = reorder self.count = [0, 0] - def start(self, lookup): - self._lookup = lookup def close(self): return closechunk() @@ -340,17 +338,29 @@ unit=_files, total=count[1]) return fstate[1][x] - self.start(lookup) + self._lookup = lookup + + count[:] = [0, len(clnodes)] + for chunk in self.group(clnodes, cl, reorder=reorder): + yield chunk + progress(_bundling, None) - def getmfnodes(): - for f in changedfiles: - fnodes[f] = {} - count[:] = [0, len(mfs)] - return prune(mf, mfs) - def getfiles(): - mfs.clear() - return changedfiles - def getfilenodes(fname, filerevlog): + for f in changedfiles: + fnodes[f] = {} + count[:] = [0, len(mfs)] + mfnodes = prune(mf, mfs) + for chunk in self.group(mfnodes, mf, reorder=reorder): + yield chunk + progress(_bundling, None) + + mfs.clear() + count[:] = [0, len(changedfiles)] + for fname in sorted(changedfiles): + filerevlog = repo.file(fname) + if not len(filerevlog): + raise util.Abort(_("empty or missing revlog for %s") + % fname) + if fastpathlinkrev: ln, llr = filerevlog.node, filerevlog.linkrev def genfilenodes(): @@ -361,30 +371,11 @@ fnodes[fname] = dict(genfilenodes()) fstate[0] = fname fstate[1] = fnodes.pop(fname, {}) - return prune(filerevlog, fstate[1]) - - - count[:] = [0, len(clnodes)] - for chunk in self.group(clnodes, cl, reorder=reorder): - yield chunk - progress(_bundling, None) - - for chunk in self.group(getmfnodes(), mf, reorder=reorder): - yield chunk - progress(_bundling, None) - - changedfiles = getfiles() - count[:] = [0, len(changedfiles)] - for fname in sorted(changedfiles): - filerevlog = repo.file(fname) - if not len(filerevlog): - raise util.Abort(_("empty or missing revlog for %s") - % fname) - nodelist = getfilenodes(fname, filerevlog) - if nodelist: + filenodes = prune(filerevlog, fstate[1]) + if filenodes: count[0] += 1 yield self.fileheader(fname) - for chunk in self.group(nodelist, filerevlog, reorder): + for chunk in self.group(filenodes, filerevlog, reorder): yield chunk yield self.close() progress(_bundling, None)