Mercurial > hg
changeset 37782:99accae4cc59
wireproto: reimplement dispatch() for version 2 server
The code is minimal. I'm trying to create a cleaner break between
version 1 and version 2 server code.
Differential Revision: https://phab.mercurial-scm.org/D3397
author | Gregory Szorc <gregory.szorc@gmail.com> |
---|---|
date | Mon, 16 Apr 2018 22:00:52 -0700 |
parents | 352932a11905 |
children | 9d818539abfa |
files | mercurial/wireproto.py mercurial/wireprotov2server.py |
diffstat | 2 files changed, 14 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/wireproto.py Mon Apr 16 21:52:33 2018 -0700 +++ b/mercurial/wireproto.py Mon Apr 16 22:00:52 2018 -0700 @@ -69,20 +69,10 @@ def dispatch(repo, proto, command): repo = getdispatchrepo(repo, proto, command) - transportversion = wireprototypes.TRANSPORTS[proto.name]['version'] - commandtable = commandsv2 if transportversion == 2 else commands - func, spec = commandtable[command] - + func, spec = commands[command] args = proto.getargs(spec) - # Version 1 protocols define arguments as a list. Version 2 uses a dict. - if isinstance(args, list): - return func(repo, proto, *args) - elif isinstance(args, dict): - return func(repo, proto, **args) - else: - raise error.ProgrammingError('unexpected type returned from ' - 'proto.getargs(): %s' % type(args)) + return func(repo, proto, *args) def options(cmd, keys, others): opts = {}
--- a/mercurial/wireprotov2server.py Mon Apr 16 21:52:33 2018 -0700 +++ b/mercurial/wireprotov2server.py Mon Apr 16 22:00:52 2018 -0700 @@ -296,7 +296,7 @@ res.setbodybytes(_('command in frame must match command in URL')) return True - rsp = wireproto.dispatch(repo, proto, command['command']) + rsp = dispatch(repo, proto, command['command']) res.status = b'200 OK' res.headers[b'Content-Type'] = FRAMINGTYPE @@ -328,6 +328,17 @@ raise error.ProgrammingError('unhandled event from reactor: %s' % action) +def getdispatchrepo(repo, proto, command): + return repo.filtered('served') + +def dispatch(repo, proto, command): + repo = getdispatchrepo(repo, proto, command) + + func, spec = wireproto.commandsv2[command] + args = proto.getargs(spec) + + return func(repo, proto, **args) + @zi.implementer(wireprototypes.baseprotocolhandler) class httpv2protocolhandler(object): def __init__(self, req, ui, args=None):