##// END OF EJS Templates
wireprotoserver: move error response handling out of hgweb...
Gregory Szorc -
r36004:98a00aa0 default
parent child Browse files
Show More
@@ -369,18 +369,7 b' class hgweb(object):'
369 if cmd in perms:
369 if cmd in perms:
370 self.check_perm(rctx, req, perms[cmd])
370 self.check_perm(rctx, req, perms[cmd])
371 except ErrorResponse as inst:
371 except ErrorResponse as inst:
372 # A client that sends unbundle without 100-continue will
372 return protohandler['handleerror'](inst)
373 # break if we respond early.
374 if (cmd == 'unbundle' and
375 (req.env.get('HTTP_EXPECT',
376 '').lower() != '100-continue') or
377 req.env.get('X-HgHttp2', '')):
378 req.drain()
379 else:
380 req.headers.append((r'Connection', r'Close'))
381 req.respond(inst, wireprotoserver.HGTYPE,
382 body='0\n%s\n' % inst)
383 return ''
384
373
385 return protohandler['dispatch']()
374 return protohandler['dispatch']()
386
375
@@ -242,6 +242,7 b' def parsehttprequest(repo, req, query):'
242 'cmd': cmd,
242 'cmd': cmd,
243 'proto': proto,
243 'proto': proto,
244 'dispatch': lambda: _callhttp(repo, req, proto, cmd),
244 'dispatch': lambda: _callhttp(repo, req, proto, cmd),
245 'handleerror': lambda ex: _handlehttperror(ex, req, cmd),
245 }
246 }
246
247
247 def _callhttp(repo, req, proto, cmd):
248 def _callhttp(repo, req, proto, cmd):
@@ -303,6 +304,22 b' def _callhttp(repo, req, proto, cmd):'
303 return []
304 return []
304 raise error.ProgrammingError('hgweb.protocol internal failure', rsp)
305 raise error.ProgrammingError('hgweb.protocol internal failure', rsp)
305
306
307 def _handlehttperror(e, req, cmd):
308 """Called when an ErrorResponse is raised during HTTP request processing."""
309 # A client that sends unbundle without 100-continue will
310 # break if we respond early.
311 if (cmd == 'unbundle' and
312 (req.env.get('HTTP_EXPECT',
313 '').lower() != '100-continue') or
314 req.env.get('X-HgHttp2', '')):
315 req.drain()
316 else:
317 req.headers.append((r'Connection', r'Close'))
318
319 req.respond(e, HGTYPE, body='0\n%s\n' % e)
320
321 return ''
322
306 class sshserver(abstractserverproto):
323 class sshserver(abstractserverproto):
307 def __init__(self, ui, repo):
324 def __init__(self, ui, repo):
308 self._ui = ui
325 self._ui = ui
General Comments 0
You need to be logged in to leave comments. Login now