[PATCH 2 of 4] schemas: add wireproto implementations of schema passing

Augie Fackler raf at durin42.com
Wed Aug 7 08:24:20 CDT 2013


On Tue, Aug 06, 2013 at 05:28:27PM -0700, Durham Goode wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1375827497 25200
> #      Tue Aug 06 15:18:17 2013 -0700
> # Node ID ef29e2e8de0198d5041f60e9cbfc7b5a29fea93d
> # Parent  f6fca02b697a67bec6e6ca2c9a48d7c7d7f1d077
> schemas: add wireproto implementations of schema passing

Why this instead of some pushkey love? This feels like a very good fit
for pushkey and a 3rd-party extension as a way to test the idea.

>
> This adds the wire protocol logic for requesting and transmitting
> schema data. It is transmitted as a series of lines:
> "%s %s\n" % (schema name, url)
>
> '*' is used as the args for the api in case we want to change the signature
> later.
>
> diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
> --- a/mercurial/wireproto.py
> +++ b/mercurial/wireproto.py
> @@ -293,6 +293,19 @@
>          f = self._callstream("getbundle", **opts)
>          return changegroupmod.unbundle10(self._decompress(f), 'UN')
>
> +    @batchable
> +    def schemas(self):
> +        f = future()
> +        yield {}, f
> +        d = f.value
> +        lines = d.splitlines()
> +        schemas = {}
> +        for line in lines:
> +            key, value = line.split(' ', 1)
> +            schemas[key] = value
> +
> +        yield schemas
> +
>      def unbundle(self, cg, heads, source):
>          '''Send cg (a readable file-like object representing the
>          changegroup to push, typically a chunkbuffer object) to the
> @@ -525,6 +538,13 @@
>                       encoding.tolocal(old), new)
>      return '%s\n' % int(r)
>
> +def schemas(repo, proto, others):
> +    schemas = repo.schemas
> +    serialized = ""
> +    for k, v in schemas.iteritems():
> +        serialized += "%s %s\n" % (k, v)
> +    return serialized
> +
>  def _allowstream(ui):
>      return ui.configbool('server', 'uncompressed', True, untrusted=True)
>
> @@ -660,6 +680,7 @@
>      'listkeys': (listkeys, 'namespace'),
>      'lookup': (lookup, 'key'),
>      'pushkey': (pushkey, 'namespace key old new'),
> +    'schemas' : (schemas, '*'),
>      'stream_out': (stream, ''),
>      'unbundle': (unbundle, 'heads'),
>  }
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel


More information about the Mercurial-devel mailing list