Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hgweb/request.py @ 5561:22713dce19f6
hgweb: return meaningful HTTP status codes instead of nonsense
author | Bryan O'Sullivan <bos@serpentine.com> |
---|---|
date | Wed, 28 Nov 2007 08:38:42 -0800 |
parents | ff7253a0d1da |
children | d61fea133f2d |
line wrap: on
line diff
--- a/mercurial/hgweb/request.py Wed Nov 28 08:38:06 2007 -0800 +++ b/mercurial/hgweb/request.py Wed Nov 28 08:38:42 2007 -0800 @@ -8,6 +8,7 @@ import socket, cgi, errno from mercurial.i18n import gettext as _ +from common import ErrorResponse class wsgiapplication(object): def __init__(self, destmaker): @@ -42,25 +43,37 @@ def read(self, count=-1): return self.inp.read(count) - def write(self, *things): + def respond(self, status, *things): for thing in things: if hasattr(thing, "__iter__"): for part in thing: - self.write(part) + self.respond(status, part) else: thing = str(thing) if self.server_write is None: if not self.headers: raise RuntimeError("request.write called before headers sent (%s)." % thing) - self.server_write = self.start_response('200 Script output follows', + code = None + if isinstance(status, ErrorResponse): + code = status.code + elif isinstance(status, int): + code = status + if code: + from httplib import responses + status = '%d %s' % ( + code, responses.get(code, 'Error')) + self.server_write = self.start_response(status, self.headers) self.start_response = None - self.headers = None + self.headers = [] try: self.server_write(thing) except socket.error, inst: if inst[0] != errno.ECONNRESET: raise + + def write(self, *things): + self.respond('200 Script output follows', *things) def writelines(self, lines): for line in lines: