diff mercurial/localrepo.py @ 19204:e9c5b1c246dc

bundle-ng: move bundle generation to changegroup.py
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Sun, 10 Feb 2013 16:03:20 +0100
parents 627cd7842e5d
children 93635f69c93b
line wrap: on
line diff
--- a/mercurial/localrepo.py	Fri May 10 22:20:32 2013 +0200
+++ b/mercurial/localrepo.py	Sun Feb 10 16:03:20 2013 +0100
@@ -2035,13 +2035,6 @@
         commonrevs = outgoing.common
         csets = outgoing.missing
         heads = outgoing.missingheads
-        cl = bundler._changelog
-        mf = bundler._manifest
-        mfs = {} # needed manifests
-        fnodes = {} # needed file nodes
-        changedfiles = set()
-        fstate = ['', {}]
-
         # We go through the fast path if we get told to, or if all (unfiltered
         # heads have been requested (since we then know there all linkrevs will
         # be pulled by the client).
@@ -2051,70 +2044,7 @@
 
         self.hook('preoutgoing', throw=True, source=source)
         self.changegroupinfo(csets, source)
-
-        # filter any nodes that claim to be part of the known set
-        def prune(revlog, missing):
-            rr, rl = revlog.rev, revlog.linkrev
-            return [n for n in missing
-                    if rl(rr(n)) not in commonrevs]
-
-        progress = self.ui.progress
-        _bundling = _('bundling')
-        _changesets = _('changesets')
-        _manifests = _('manifests')
-        _files = _('files')
-
-        def lookup(revlog, x):
-            count = bundler.count
-            if revlog == cl:
-                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
-            elif revlog == mf:
-                clnode = mfs[x]
-                if not fastpathlinkrev:
-                    mdata = mf.readfast(x)
-                    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
-            else:
-                progress(_bundling, count[0], item=fstate[0],
-                         unit=_files, total=count[1])
-                return fstate[1][x]
-
-        bundler.start(lookup)
-
-        def getmfnodes():
-            for f in changedfiles:
-                fnodes[f] = {}
-            bundler.count[:] = [0, len(mfs)]
-            return prune(mf, mfs)
-        def getfiles():
-            mfs.clear()
-            return changedfiles
-        def getfilenodes(fname, filerevlog):
-            if fastpathlinkrev:
-                ln, llr = filerevlog.node, filerevlog.linkrev
-                def genfilenodes():
-                    for r in filerevlog:
-                        linkrev = llr(r)
-                        if linkrev not in commonrevs:
-                            yield filerevlog.node(r), cl.node(linkrev)
-                fnodes[fname] = dict(genfilenodes())
-            fstate[0] = fname
-            fstate[1] = fnodes.pop(fname, {})
-            return prune(filerevlog, fstate[1])
-
-        gengroup = bundler.generate(csets, getmfnodes, getfiles, getfilenodes,
-                                    source)
+        gengroup = bundler.generate(commonrevs, csets, fastpathlinkrev, source)
         return changegroup.unbundle10(util.chunkbuffer(gengroup), 'UN')
 
     def changegroup(self, basenodes, source):