From patchwork Wed Aug 7 00:28:27 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [2,of,4] schemas: add wireproto implementations of schema passing From: Durham Goode X-Patchwork-Id: 2012 Message-Id: To: mercurial-devel@selenic.com Date: Tue, 06 Aug 2013 17:28:27 -0700 # HG changeset patch # User Durham Goode # Date 1375827497 25200 # Tue Aug 06 15:18:17 2013 -0700 # Node ID ef29e2e8de0198d5041f60e9cbfc7b5a29fea93d # Parent f6fca02b697a67bec6e6ca2c9a48d7c7d7f1d077 schemas: add wireproto implementations of schema passing 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'), }