# HG changeset patch # User Durham Goode # Date 2013-06-25 20:23:12 # Node ID 95a49112e7abc3f3842ca5b74162f3c0d9ab4617 # Parent 0cfb62e043e86d8576de1a7950625ab8dba0fd89 bundle: move file chunk generation to it's own function Moves the file chunk generation part of bundle creation to it's own function. This allows extensions to customize the filelog part of bundle generation. diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -354,14 +354,8 @@ class bundle10(object): 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 @@ class bundle10(object): 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 @@ class bundle10(object): 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)