[PATCH 2 of 2] wireproto: move wireproto capabilities computation in a subfunction

David Soria Parra dsp at experimentalworks.net
Thu Mar 13 17:27:57 CDT 2014


pierre-yves.david at ens-lyon.org writes:

> # HG changeset patch
> # User Pierre-Yves David <pierre-yves.david at fb.com>
> # Date 1394660801 25200
> #      Wed Mar 12 14:46:41 2014 -0700
> # Node ID ccf1552655b90cac5157e86fc914a0a33c46ea24
> # Parent  1bfa5d82da6540e6559c3396c692db848ea650f2
> wireproto: move wireproto capabilities computation in a subfunction
>
> It will help people that need to add capabilities (in a more subtle was that
> just adding some to the list) in multiple way:
>
> 1. This function returns a list, not a string. Making it easier to look at,
>    extend or alter the content.
>
> 2. The original capabilities function will be store in the dictionary of wire
>    protocol command. So extension that wrap this function also need to update
>    the dictionary entry.
>
>    Both wrapping and update of the dictionary entry are needed because the
>    `hello` wire protocol use the function itself. This is specifically sneaky for
>    extension writer as ssh use the `hello` command while http use the
>    `capabilities` command.
>
>    With this new `_capabilities` function there is one and only one obvious
>    place to wrap when needed.
>
> diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
> --- a/mercurial/wireproto.py
> +++ b/mercurial/wireproto.py
> @@ -415,11 +415,20 @@ def branches(repo, proto, nodes):
>      return "".join(r)
>  
>  
>  WIREPROTOCAPS = ['lookup', 'changegroupsubset', 'branchmap', 'pushkey',
>                   'known', 'getbundle', 'unbundlehash', 'batch']
> -def capabilities(repo, proto):
> +
> +def _capabilities(repo, proto):
> +    """return a list of capabilities for a repo
> +
> +    This function exist to easy wrapping process from extension
Maybe it's because I am not a native speaker but I honestly have a hard
time understanding what you mean.

> +    - returns a lists: easy to alter
> +    - change done here will be progated to both `capabilities` and `hello`
> +      command without any other effort. without any other action needed.
> +    """
my dictionary doesn't find "progated".
>      # copy to prevent modification of the global list
>      caps = list(WIREPROTOCAPS)
>      if _allowstream(repo.ui):
>          if repo.ui.configbool('server', 'preferuncompressed', False):
>              caps.append('stream-preferred')
> @@ -430,10 +439,16 @@ def capabilities(repo, proto):
>          # otherwise, add 'streamreqs' detailing our local revlog format
>          else:
>              caps.append('streamreqs=%s' % ','.join(requiredformats))
>      caps.append('unbundle=%s' % ','.join(changegroupmod.bundlepriority))
>      caps.append('httpheader=1024')
> +    return caps
> +
> +# If you are writting and extension and consider wrapping this function. Wrap
> +# `_capabilities` instead.
> +def capabilities(repo, proto):
> +    caps = _capabilities(repo, proto)
why not just return ' '.join(_capabilities(repo,proto)) ?

besodes the nits it looks good to me.


More information about the Mercurial-devel mailing list