diff --git a/mercurial/changegroup.py b/mercurial/changegroup.py --- a/mercurial/changegroup.py +++ b/mercurial/changegroup.py @@ -493,6 +493,25 @@ def getlocalbundle(repo, source, outgoin bundler = bundle10(repo, bundlecaps) return getsubset(repo, outgoing, bundler, source) +def _computeoutgoing(repo, heads, common): + """Computes which revs are outgoing given a set of common + and a set of heads. + + This is a separate function so extensions can have access to + the logic. + + Returns a discovery.outgoing object. + """ + cl = repo.changelog + if common: + hasnode = cl.hasnode + common = [n for n in common if hasnode(n)] + else: + common = [nullid] + if not heads: + heads = cl.heads() + return discovery.outgoing(cl, common, heads) + def getbundle(repo, source, heads=None, common=None, bundlecaps=None): """Like changegroupsubset, but returns the set difference between the ancestors of heads and the ancestors common. @@ -502,15 +521,7 @@ def getbundle(repo, source, heads=None, The nodes in common might not all be known locally due to the way the current discovery protocol works. """ - cl = repo.changelog - if common: - hasnode = cl.hasnode - common = [n for n in common if hasnode(n)] - else: - common = [nullid] - if not heads: - heads = cl.heads() - outgoing = discovery.outgoing(cl, common, heads) + outgoing = _computeoutgoing(repo, heads, common) return getlocalbundle(repo, source, outgoing, bundlecaps=bundlecaps) def changegroup(repo, basenodes, source):