--- a/mercurial/changegroup.py Tue Nov 04 16:43:33 2014 -0600
+++ b/mercurial/changegroup.py Fri Oct 17 14:41:02 2014 +0200
@@ -443,7 +443,7 @@
for node in nodes:
repo.ui.debug("%s\n" % hex(node))
-def getsubset(repo, outgoing, bundler, source, fastpath=False):
+def getsubsetraw(repo, outgoing, bundler, source, fastpath=False):
repo = repo.unfiltered()
commonrevs = outgoing.common
csets = outgoing.missing
@@ -457,7 +457,10 @@
repo.hook('preoutgoing', throw=True, source=source)
_changegroupinfo(repo, csets, source)
- gengroup = bundler.generate(commonrevs, csets, fastpathlinkrev, source)
+ return bundler.generate(commonrevs, csets, fastpathlinkrev, source)
+
+def getsubset(repo, outgoing, bundler, source, fastpath=False):
+ gengroup = getsubsetraw(repo, outgoing, bundler, source, fastpath)
return cg1unpacker(util.chunkbuffer(gengroup), 'UN')
def changegroupsubset(repo, roots, heads, source):
@@ -485,6 +488,16 @@
bundler = cg1packer(repo)
return getsubset(repo, outgoing, bundler, source)
+def getlocalchangegroupraw(repo, source, outgoing, bundlecaps=None):
+ """Like getbundle, but taking a discovery.outgoing as an argument.
+
+ This is only implemented for local repos and reuses potentially
+ precomputed sets in outgoing. Returns a raw changegroup generator."""
+ if not outgoing.missing:
+ return None
+ bundler = cg1packer(repo, bundlecaps)
+ return getsubsetraw(repo, outgoing, bundler, source)
+
def getlocalchangegroup(repo, source, outgoing, bundlecaps=None):
"""Like getbundle, but taking a discovery.outgoing as an argument.
@@ -514,6 +527,18 @@
heads = cl.heads()
return discovery.outgoing(cl, common, heads)
+def getchangegroupraw(repo, source, heads=None, common=None, bundlecaps=None):
+ """Like changegroupsubset, but returns the set difference between the
+ ancestors of heads and the ancestors common.
+
+ If heads is None, use the local heads. If common is None, use [nullid].
+
+ The nodes in common might not all be known locally due to the way the
+ current discovery protocol works. Returns a raw changegroup generator.
+ """
+ outgoing = _computeoutgoing(repo, heads, common)
+ return getlocalchangegroupraw(repo, source, outgoing, bundlecaps=bundlecaps)
+
def getchangegroup(repo, source, heads=None, common=None, bundlecaps=None):
"""Like changegroupsubset, but returns the set difference between the
ancestors of heads and the ancestors common.