Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hgweb/protocol.py @ 5993:948a41e77902
hgweb: explicit response status
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Fri, 01 Feb 2008 10:31:13 +0100 |
parents | 5be210afe1b8 |
children | c050548307a4 |
line wrap: on
line diff
--- a/mercurial/hgweb/protocol.py Fri Feb 01 10:31:09 2008 +0100 +++ b/mercurial/hgweb/protocol.py Fri Feb 01 10:31:13 2008 +0100 @@ -9,6 +9,7 @@ from mercurial import util, streamclone from mercurial.i18n import gettext as _ from mercurial.node import * +from common import HTTP_OK, HTTP_NOT_FOUND, HTTP_SERVER_ERROR # __all__ is populated with the allowed commands. Be sure to add to it if # you're adding a new command, or the new command won't work. @@ -18,6 +19,8 @@ 'changegroupsubset', 'capabilities', 'unbundle', 'stream_out', ] +HGTYPE = 'application/mercurial-0.1' + def lookup(web, req): try: r = hex(web.repo.lookup(req.form['key'][0])) @@ -26,12 +29,12 @@ r = str(inst) success = 0 resp = "%s %s\n" % (success, r) - req.httphdr("application/mercurial-0.1", length=len(resp)) + req.respond(HTTP_OK, HGTYPE, length=len(resp)) req.write(resp) def heads(web, req): resp = " ".join(map(hex, web.repo.heads())) + "\n" - req.httphdr("application/mercurial-0.1", length=len(resp)) + req.respond(HTTP_OK, HGTYPE, length=len(resp)) req.write(resp) def branches(web, req): @@ -42,7 +45,7 @@ for b in web.repo.branches(nodes): resp.write(" ".join(map(hex, b)) + "\n") resp = resp.getvalue() - req.httphdr("application/mercurial-0.1", length=len(resp)) + req.respond(HTTP_OK, HGTYPE, length=len(resp)) req.write(resp) def between(web, req): @@ -53,11 +56,11 @@ for b in web.repo.between(pairs): resp.write(" ".join(map(hex, b)) + "\n") resp = resp.getvalue() - req.httphdr("application/mercurial-0.1", length=len(resp)) + req.respond(HTTP_OK, HGTYPE, length=len(resp)) req.write(resp) def changegroup(web, req): - req.httphdr("application/mercurial-0.1") + req.respond(HTTP_OK, HGTYPE) nodes = [] if not web.allowpull: return @@ -76,7 +79,7 @@ req.write(z.flush()) def changegroupsubset(web, req): - req.httphdr("application/mercurial-0.1") + req.respond(HTTP_OK, HGTYPE) bases = [] heads = [] if not web.allowpull: @@ -106,7 +109,7 @@ if unbundleversions: caps.append('unbundle=%s' % ','.join(unbundleversions)) resp = ' '.join(caps) - req.httphdr("application/mercurial-0.1", length=len(resp)) + req.respond(HTTP_OK, HGTYPE, length=len(resp)) req.write(resp) def unbundle(web, req): @@ -116,7 +119,8 @@ # drain incoming bundle, else client will not see # response when run outside cgi script pass - req.httphdr("application/mercurial-0.1", headers=headers) + req.header(headers.items()) + req.respond(HTTP_OK, HGTYPE) req.write('0\n') req.write(response) @@ -148,7 +152,7 @@ bail(_('unsynced changes\n')) return - req.httphdr("application/mercurial-0.1") + req.respond(HTTP_OK, HGTYPE) # do not lock repo until all changegroup data is # streamed. save to temporary file. @@ -232,14 +236,15 @@ filename = '' error = getattr(inst, 'strerror', 'Unknown error') if inst.errno == errno.ENOENT: - code = 404 + code = HTTP_NOT_FOUND else: - code = 500 - req.respond(code, '%s: %s\n' % (error, filename)) + code = HTTP_SERVER_ERROR + req.respond(code) + req.write('%s: %s\n' % (error, filename)) finally: fp.close() os.unlink(tempname) def stream_out(web, req): - req.httphdr("application/mercurial-0.1") + req.respond(HTTP_OK, HGTYPE) streamclone.stream_out(web.repo, req, untrusted=True)