--- a/mercurial/changegroup.py Tue Jun 18 13:05:16 2013 -0700
+++ b/mercurial/changegroup.py Tue Jun 25 13:23:12 2013 -0700
@@ -354,14 +354,8 @@
progress(msgbundling, None)
mfs.clear()
- total = len(changedfiles)
- # for progress output
- msgfiles = _('files')
- for i, fname in enumerate(sorted(changedfiles)):
- filerevlog = repo.file(fname)
- if not filerevlog:
- raise util.Abort(_("empty or missing revlog for %s") % fname)
+ def linknodes(filerevlog, fname):
if fastpathlinkrev:
ln, llr = filerevlog.node, filerevlog.linkrev
needed = set(cl.rev(x) for x in clnodes)
@@ -371,8 +365,33 @@
if linkrev in needed:
yield filerevlog.node(r), cl.node(linkrev)
fnodes[fname] = dict(genfilenodes())
+ return fnodes.get(fname, {})
- linkrevnodes = fnodes.pop(fname, {})
+ for chunk in self.generatefiles(changedfiles, linknodes, commonrevs,
+ source):
+ yield chunk
+
+ yield self.close()
+ progress(msgbundling, None)
+
+ if clnodes:
+ repo.hook('outgoing', node=hex(clnodes[0]), source=source)
+
+ def generatefiles(self, changedfiles, linknodes, commonrevs, source):
+ repo = self._repo
+ progress = self._progress
+ reorder = self._reorder
+ msgbundling = _('bundling')
+
+ total = len(changedfiles)
+ # for progress output
+ msgfiles = _('files')
+ for i, fname in enumerate(sorted(changedfiles)):
+ filerevlog = repo.file(fname)
+ if not filerevlog:
+ raise util.Abort(_("empty or missing revlog for %s") % fname)
+
+ linkrevnodes = linknodes(filerevlog, fname)
# Lookup for filenodes, we collected the linkrev nodes above in the
# fastpath case and with lookupmf in the slowpath case.
def lookupfilelog(x):
@@ -386,11 +405,6 @@
for chunk in self.group(filenodes, filerevlog, lookupfilelog,
reorder=reorder):
yield chunk
- yield self.close()
- progress(msgbundling, None)
-
- if clnodes:
- repo.hook('outgoing', node=hex(clnodes[0]), source=source)
def revchunk(self, revlog, rev, prev, linknode):
node = revlog.node(rev)