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)