[PATCH 2 of 4] schemas: add wireproto implementations of schema passing
Durham Goode
durham at fb.com
Wed Aug 7 16:49:16 UTC 2013
On 8/7/13 6:24 AM, "Augie Fackler" <raf at durin42.com> wrote:
>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.
I didn't use pushkey because you never actually push schemas back to the
server. But now that I look at the pushkey code more closely I see
there's precedence for that already (listing namespaces). I'll switch to
that.
>
>>
>> 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