Mercurial > evolve
diff hgext/evolve.py @ 1097:580a2d838996
pull: use discovery to pull less obsmarkers through bundle2
This hooks in the official API for bundle2
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Fri, 29 Aug 2014 16:13:19 +0200 |
parents | 661f3a112f7a |
children | 1c227ecb744d |
line wrap: on
line diff
--- a/hgext/evolve.py Fri Aug 29 16:13:01 2014 +0200 +++ b/hgext/evolve.py Fri Aug 29 16:13:19 2014 +0200 @@ -2494,7 +2494,33 @@ @eh.uisetup def addgetbundleargs(self): - gboptsmap['evo_obscommon'] = 'plain' + gboptsmap['evo_obscommon'] = 'nodes' + +@eh.wrapfunction(exchange, '_pullbundle2extraprepare') +def _addobscommontob2pull(orig, pullop, kwargs): + ret = orig(pullop, kwargs) + if 'obsmarkers' in kwargs and pullop.remote.capable('_evoext_getbundle_obscommon'): + boundaries = _buildpullobsmarkersboundaries(pullop) + common = boundaries['common'] + if common != [nullid]: + kwargs['evo_obscommon'] = common + return ret + +@eh.wrapfunction(exchange, '_getbundleobsmarkerpart') +def _getbundleobsmarkerpart(orig, bundler, repo, source, heads=None, common=None, + bundlecaps=None, **kwargs): + if 'evo_obscommon' not in kwargs: + return orig(bundler, repo, source, heads, common, bundlecaps, **kwargs) + + if kwargs.get('obsmarkers', False): + if heads is None: + heads = repo.heads() + obscommon = kwargs.get('evo_obscommon', ()) + obsset = repo.set('::%ln - ::%ln', heads, obscommon) + subset = [c.node() for c in obsset] + markers = repo.obsstore.relevantmarkers(subset) + exchange.buildobsmarkerspart(bundler, markers) + @eh.wrapfunction(exchange, '_pullobsolete') def _pullobsolete(orig, pullop):