[PATCH] pull: make discovery phase extensible

Augie Fackler raf at durin42.com
Tue Oct 14 14:50:48 CDT 2014


On Mon, Oct 13, 2014 at 12:52:12PM -0700, Pierre-Yves David wrote:
> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1411802946 25200
> #      Sat Sep 27 00:29:06 2014 -0700
> # Node ID f70d2e37b0cc8e09fd5a50d0f38c68a4aaff2a5f
> # Parent  1533e642262de32c5a2445789710f49237019fd6
> pull: make discovery phase extensible

queued, thanks

>
> We apply the same approach as for push and make the discovery extensible. There
> is only one user in core right now but we already know we'll need something
> smarter for obsmarkers. In fact the evolve extension could use this to cleanly
> extend discovery.
>
> Main motivation for this change is consistency between push and pull.
>
> diff --git a/mercurial/exchange.py b/mercurial/exchange.py
> --- a/mercurial/exchange.py
> +++ b/mercurial/exchange.py
> @@ -866,11 +866,42 @@ def pull(repo, remote, heads=None, force
>          pullop.releasetransaction()
>          lock.release()
>
>      return pullop
>
> +# list of steps to perform discovery before pull
> +pulldiscoveryorder = []
> +
> +# Mapping between step name and function
> +#
> +# This exists to help extensions wrap steps if necessary
> +pulldiscoverymapping = {}
> +
> +def pulldiscovery(stepname):
> +    """decorator for function performing discovery before pull
> +
> +    The function is added to the step -> function mapping and appended to the
> +    list of steps.  Beware that decorated function will be added in order (this
> +    may matter).
> +
> +    You can only use this decorator for a new step, if you want to wrap a step
> +    from an extension, change the pulldiscovery dictionary directly."""
> +    def dec(func):
> +        assert stepname not in pulldiscoverymapping
> +        pulldiscoverymapping[stepname] = func
> +        pulldiscoveryorder.append(stepname)
> +        return func
> +    return dec
> +
>  def _pulldiscovery(pullop):
> +    """Run all discovery steps"""
> +    for stepname in pulldiscoveryorder:
> +        step = pulldiscoverymapping[stepname]
> +        step(pullop)
> +
> + at pulldiscovery('changegroup')
> +def _pulldiscoverychangegroup(pullop):
>      """discovery phase for the pull
>
>      Current handle changeset discovery only, will change handle all discovery
>      at some point."""
>      tmp = discovery.findcommonincoming(pullop.repo.unfiltered(),
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list