diff -r d4e026341e16 -r 8d226db31f20 mercurial/exchange.py --- a/mercurial/exchange.py Tue Aug 09 17:00:38 2016 +0200 +++ b/mercurial/exchange.py Tue Aug 09 17:06:35 2016 +0200 @@ -257,6 +257,25 @@ return bundler.newpart('obsmarkers', data=stream) return None +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(repo, common, heads) + def _forcebundle1(op): """return true if a pull/push must use bundle1 @@ -1536,7 +1555,7 @@ if kwargs: raise ValueError(_('unsupported getbundle arguments: %s') % ', '.join(sorted(kwargs.keys()))) - outgoing = changegroup.computeoutgoing(repo, heads, common) + outgoing = _computeoutgoing(repo, heads, common) return changegroup.getchangegroup(repo, source, outgoing, bundlecaps=bundlecaps) @@ -1573,7 +1592,7 @@ if not cgversions: raise ValueError(_('no common changegroup version')) version = max(cgversions) - outgoing = changegroup.computeoutgoing(repo, heads, common) + outgoing = _computeoutgoing(repo, heads, common) cg = changegroup.getlocalchangegroupraw(repo, source, outgoing, bundlecaps=bundlecaps, version=version) @@ -1626,7 +1645,7 @@ if not (kwargs.get('cg', True) and 'hgtagsfnodes' in b2caps): return - outgoing = changegroup.computeoutgoing(repo, heads, common) + outgoing = _computeoutgoing(repo, heads, common) if not outgoing.missingheads: return