--- a/mercurial/wireprotov2server.py Wed Sep 26 15:02:19 2018 -0700
+++ b/mercurial/wireprotov2server.py Wed Sep 26 18:07:55 2018 -0700
@@ -312,7 +312,7 @@
res.headers[b'Content-Type'] = FRAMINGTYPE
try:
- objs = dispatch(repo, proto, command['command'])
+ objs = dispatch(repo, proto, command['command'], command['redirect'])
action, meta = reactor.oncommandresponsereadyobjects(
outstream, command['requestid'], objs)
@@ -339,7 +339,7 @@
def getdispatchrepo(repo, proto, command):
return repo.filtered('served')
-def dispatch(repo, proto, command):
+def dispatch(repo, proto, command, redirect):
"""Run a wire protocol command.
Returns an iterable of objects that will be sent to the client.
@@ -364,8 +364,17 @@
yield o
return
+ if redirect:
+ redirecttargets = redirect[b'targets']
+ redirecthashes = redirect[b'hashes']
+ else:
+ redirecttargets = []
+ redirecthashes = []
+
cacher = makeresponsecacher(repo, proto, command, args,
- cborutil.streamencode)
+ cborutil.streamencode,
+ redirecttargets=redirecttargets,
+ redirecthashes=redirecthashes)
# But we have no cacher. Do default handling.
if not cacher:
@@ -751,7 +760,8 @@
return cachekeyfn
-def makeresponsecacher(repo, proto, command, args, objencoderfn):
+def makeresponsecacher(repo, proto, command, args, objencoderfn,
+ redirecttargets, redirecthashes):
"""Construct a cacher for a cacheable command.
Returns an ``iwireprotocolcommandcacher`` instance.