Mercurial > public > mercurial-scm > hg-stable
diff mercurial/hgweb/hgweb_mod.py @ 11593:d054cc5c7737
protocol: unify unbundle on the server side
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Thu, 15 Jul 2010 11:24:42 -0500 |
parents | 5d907fbb9703 |
children | 368cd5325348 |
line wrap: on
line diff
--- a/mercurial/hgweb/hgweb_mod.py Wed Jul 14 17:12:18 2010 -0500 +++ b/mercurial/hgweb/hgweb_mod.py Thu Jul 15 11:24:42 2010 -0500 @@ -6,8 +6,8 @@ # This software may be used and distributed according to the terms of the # GNU General Public License version 2 or any later version. -import os, zlib -from mercurial import ui, hg, hook, error, encoding, templater, wireproto +import os, zlib, sys, cStringIO, urllib +from mercurial import ui, hg, hook, error, encoding, templater, wireproto, util from common import get_mtime, ErrorResponse, permhooks from common import HTTP_OK, HTTP_BAD_REQUEST, HTTP_NOT_FOUND, HTTP_SERVER_ERROR from request import wsgirequest @@ -56,6 +56,23 @@ def respond(self, s): self.req.respond(HTTP_OK, HGTYPE, length=len(s)) self.response = s + def getfile(self, fp): + length = int(self.req.env['CONTENT_LENGTH']) + for s in util.filechunkiter(self.req, limit=length): + fp.write(s) + def redirect(self): + self.oldio = sys.stdout, sys.stderr + sys.stderr = sys.stdout = cStringIO.StringIO() + def respondpush(self, ret): + val = sys.stdout.getvalue() + sys.stdout, sys.stderr = self.oldio + self.req.respond(HTTP_OK, HGTYPE) + self.response = '%d\n%s' % (ret, val) + def _client(self): + return 'remote:%s:%s:%s' % ( + self.req.env.get('wsgi.url_scheme') or 'http', + urllib.quote(self.req.env.get('REMOTE_HOST', '')), + urllib.quote(self.req.env.get('REMOTE_USER', ''))) def callproto(repo, req, cmd): p = webproto(req)