[PATCH 2 of 3 V2 (resend)] wireproto: move wireproto capabilities computation in a subfunction

Jordi Gutiérrez Hermoso jordigh at octave.org
Tue Mar 18 15:47:24 CDT 2014


There are some English problems with the commit message, but I'm not
sure how to fix them without altering your intended meaning.

On Tue, 2014-03-18 at 11:12 -0700, pierre-yves.david at ens-lyon.org wrote:
> # 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 90a13777b8ad1c1bed8263587596031c62d15e6e
> # Parent  0d064ce8b34079cb817eb265bf1827fa0aee1629
> 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,21 @@ 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 exists to allow extensions to easily wrap capabilities
> +    computation

"... to easily wrap computation of capabilities"

> +
> +    - returns a lists: easy to alter

"returns a list"

> +    - change done here will be propagated to both `capabilities` and `hello`
> +      command without any other effort. without any other action needed.
> +    """

"changes done here will be propagated to both the `capabilities` and `hello`"
commands without no further action needed."

>      # 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,11 +440,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 ' '.join(caps)
> +    return caps
> +
> +# If you are writting and extension and consider wrapping this function. Wrap
> +# `_capabilities` instead.

"If you are writing an extension and are considering wrapping this
function, consider wrapping _capabilities instead"

> +def capabilities(repo, proto):
> +    return ' '.join(_capabilities(repo, proto))
>  
>  def changegroup(repo, proto, roots):
>      nodes = decodelist(roots)
>      cg = repo.changegroup(nodes, 'serve')
>      return streamres(proto.groupchunks(cg))
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
> 









More information about the Mercurial-devel mailing list