comparison mercurial/hgweb/hgweb_mod.py @ 6784:18c429ea3a0e

hgweb: all protocol functions have become generators Using the write() callable supplied by the start_response() call is frowned upon by the WSGI spec, returning an iterable over the content chunks is the recommended way. Be aware, though: returning many small chunks will slow down responses, because the server has to flush each chunk separately.
author Dirkjan Ochtman <dirkjan@ochtman.nl>
date Sun, 29 Jun 2008 15:23:09 +0200
parents b4b7261164d5
children 4879468fa28f
comparison
equal deleted inserted replaced
6783:6d824dc86907 6784:18c429ea3a0e
74 import mercurial.hgweb.wsgicgi as wsgicgi 74 import mercurial.hgweb.wsgicgi as wsgicgi
75 wsgicgi.launch(self) 75 wsgicgi.launch(self)
76 76
77 def __call__(self, env, respond): 77 def __call__(self, env, respond):
78 req = wsgirequest(env, respond) 78 req = wsgirequest(env, respond)
79 self.run_wsgi(req) 79 return self.run_wsgi(req)
80 return req
81 80
82 def run_wsgi(self, req): 81 def run_wsgi(self, req):
83 82
84 self.refresh() 83 self.refresh()
85 84
88 # and the clients always use the old URL structure 87 # and the clients always use the old URL structure
89 88
90 cmd = req.form.get('cmd', [''])[0] 89 cmd = req.form.get('cmd', [''])[0]
91 if cmd and cmd in protocol.__all__: 90 if cmd and cmd in protocol.__all__:
92 if cmd in perms and not self.check_perm(req, perms[cmd]): 91 if cmd in perms and not self.check_perm(req, perms[cmd]):
93 return 92 return []
94 method = getattr(protocol, cmd) 93 method = getattr(protocol, cmd)
95 method(self.repo, req) 94 return method(self.repo, req)
96 return
97 95
98 # work with CGI variables to create coherent structure 96 # work with CGI variables to create coherent structure
99 # use SCRIPT_NAME, PATH_INFO and QUERY_STRING as well as our REPO_NAME 97 # use SCRIPT_NAME, PATH_INFO and QUERY_STRING as well as our REPO_NAME
100 98
101 req.url = req.env['SCRIPT_NAME'] 99 req.url = req.env['SCRIPT_NAME']
169 content = getattr(webcommands, cmd)(self, req, tmpl) 167 content = getattr(webcommands, cmd)(self, req, tmpl)
170 req.respond(HTTP_OK, ctype) 168 req.respond(HTTP_OK, ctype)
171 169
172 req.write(content) 170 req.write(content)
173 del tmpl 171 del tmpl
172 return req
174 173
175 except revlog.LookupError, err: 174 except revlog.LookupError, err:
176 req.respond(HTTP_NOT_FOUND, ctype) 175 req.respond(HTTP_NOT_FOUND, ctype)
177 msg = str(err) 176 msg = str(err)
178 if 'manifest' not in msg: 177 if 'manifest' not in msg: