[PATCH 9 of 9] bundle-ng: move progress out of the linkrev callback
Sune Foldager
cryo at cyanite.org
Thu Feb 14 23:07:27 UTC 2013
# HG changeset patch
# User Benoit Boissinot <benoit.boissinot at ens-lyon.org>
# Date 1360592532 -3600
# Node ID d9674d2d2ea1e775c408d562ee9aafd361d16f6a
# Parent 67f558991d99dca49cd51485b0e9f96b70dc7301
bundle-ng: move progress out of the linkrev callback
diff -r 67f558991d99 -r d9674d2d2ea1 mercurial/changegroup.py
--- a/mercurial/changegroup.py Sun Feb 10 16:55:30 2013 +0100
+++ b/mercurial/changegroup.py Mon Feb 11 15:22:12 2013 +0100
@@ -242,13 +242,14 @@
reorder = False
self._repo = repo
self._reorder = reorder
+ self._progress = repo.ui.progress
def close(self):
return closechunk()
def fileheader(self, fname):
return chunkheader(len(fname)) + fname
- def group(self, nodelist, revlog, lookup, reorder=None):
+ def group(self, nodelist, revlog, lookup, units=None, reorder=None):
"""Calculate a delta group, yielding a sequence of changegroup chunks
(strings).
@@ -260,6 +261,7 @@
changegroup starts with a full revision.
"""
+ _bundling = _('bundling')
# if we don't have any revisions touched by these changesets, bail
if len(nodelist) == 0:
yield self.close()
@@ -279,7 +281,10 @@
revs.insert(0, p)
# build deltas
+ total = len(revs) - 1
for r in xrange(len(revs) - 1):
+ if units is not None:
+ self._progress(_bundling, r + 1, unit=units, total=total)
prev, curr = revs[r], revs[r + 1]
linknode = lookup(revlog.node(curr))
for c in self.revchunk(revlog, curr, prev, linknode):
@@ -293,8 +298,7 @@
cl = self._changelog
mf = self._manifest
reorder = self._reorder
- progress = repo.ui.progress
- count = [0, 0]
+ progress = self._progress
_bundling = _('bundling')
_changesets = _('changesets')
_manifests = _('manifests')
@@ -314,9 +318,6 @@
c = cl.read(x)
changedfiles.update(c[3])
mfs.setdefault(c[0], x)
- count[0] += 1
- progress(_bundling, count[0],
- unit=_changesets, total=count[1])
return x
def lookupmf(x):
@@ -326,27 +327,24 @@
for f, n in mdata.iteritems():
if f in changedfiles:
fnodes[f].setdefault(n, clnode)
- count[0] += 1
- progress(_bundling, count[0],
- unit=_manifests, total=count[1])
return clnode
- count[:] = [0, len(clnodes)]
- for chunk in self.group(clnodes, cl, lookupcl, reorder=reorder):
+ for chunk in self.group(clnodes, cl, lookupcl, units=_changesets,
+ reorder=reorder):
yield chunk
progress(_bundling, None)
for f in changedfiles:
fnodes[f] = {}
- count[:] = [0, len(mfs)]
mfnodes = prune(mf, mfs)
- for chunk in self.group(mfnodes, mf, lookupmf, reorder=reorder):
+ for chunk in self.group(mfnodes, mf, lookupmf, units=_manifests,
+ reorder=reorder):
yield chunk
progress(_bundling, None)
mfs.clear()
- count[:] = [0, len(changedfiles)]
- for fname in sorted(changedfiles):
+ total = len(changedfiles)
+ for i, fname in enumerate(sorted(changedfiles)):
filerevlog = repo.file(fname)
if not len(filerevlog):
raise util.Abort(_("empty or missing revlog for %s")
@@ -364,16 +362,15 @@
linkrevnodes = fnodes.pop(fname, {})
# Lookup for filenodes.
def lookupfilelog(x):
- progress(_bundling, count[0], item=fname,
- unit=_files, total=count[1])
return linkrevnodes[x]
filenodes = prune(filerevlog, linkrevnodes)
if filenodes:
- count[0] += 1
+ progress(_bundling, i + 1, item=fname, unit=_files,
+ total=total)
yield self.fileheader(fname)
for chunk in self.group(filenodes, filerevlog, lookupfilelog,
- reorder):
+ reorder=reorder):
yield chunk
yield self.close()
progress(_bundling, None)
More information about the Mercurial-devel
mailing list