Mercurial > hg
changeset 6785:4879468fa28f
hgweb: return content iterator instead of using write() callable
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Sun, 29 Jun 2008 22:36:18 +0200 |
parents | 18c429ea3a0e |
children | 97e214dccaa9 943f066c0d58 |
files | mercurial/hgweb/hgweb_mod.py mercurial/hgweb/hgwebdir_mod.py tests/test-hgweb-no-path-info tests/test-hgweb-no-path-info.out tests/test-hgweb-no-request-uri tests/test-hgweb-no-request-uri.out |
diffstat | 6 files changed, 47 insertions(+), 52 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hgweb/hgweb_mod.py Sun Jun 29 15:23:09 2008 +0200 +++ b/mercurial/hgweb/hgweb_mod.py Sun Jun 29 22:36:18 2008 +0200 @@ -169,20 +169,20 @@ req.write(content) del tmpl - return req + return ''.join(content), except revlog.LookupError, err: req.respond(HTTP_NOT_FOUND, ctype) msg = str(err) if 'manifest' not in msg: msg = 'revision not found: %s' % err.name - req.write(tmpl('error', error=msg)) + return ''.join(tmpl('error', error=msg)), except (RepoError, revlog.RevlogError), inst: req.respond(HTTP_SERVER_ERROR, ctype) - req.write(tmpl('error', error=str(inst))) + return ''.join(tmpl('error', error=str(inst))), except ErrorResponse, inst: req.respond(inst.code, ctype) - req.write(tmpl('error', error=inst.message)) + return ''.join(tmpl('error', error=inst.message)), def templater(self, req):
--- a/mercurial/hgweb/hgwebdir_mod.py Sun Jun 29 15:23:09 2008 +0200 +++ b/mercurial/hgweb/hgwebdir_mod.py Sun Jun 29 22:36:18 2008 +0200 @@ -70,8 +70,7 @@ def __call__(self, env, respond): req = wsgirequest(env, respond) - self.run_wsgi(req) - return req + return self.run_wsgi(req) def run_wsgi(self, req): @@ -90,14 +89,12 @@ fname = virtual[7:] else: fname = req.form['static'][0] - req.write(staticfile(static, fname, req)) - return + return staticfile(static, fname, req), # top-level index elif not virtual: req.respond(HTTP_OK, ctype) - req.write(self.makeindex(req, tmpl)) - return + return ''.join(self.makeindex(req, tmpl)), # nested indexes and hgwebs @@ -108,8 +105,7 @@ req.env['REPO_NAME'] = virtual try: repo = hg.repository(self.parentui, real) - hgweb(repo).run_wsgi(req) - return + return hgweb(repo).run_wsgi(req) except IOError, inst: msg = inst.strerror raise ErrorResponse(HTTP_SERVER_ERROR, msg) @@ -120,8 +116,7 @@ subdir = virtual + '/' if [r for r in repos if r.startswith(subdir)]: req.respond(HTTP_OK, ctype) - req.write(self.makeindex(req, tmpl, subdir)) - return + return ''.join(self.makeindex(req, tmpl, subdir)), up = virtual.rfind('/') if up < 0: @@ -130,11 +125,11 @@ # prefixes not found req.respond(HTTP_NOT_FOUND, ctype) - req.write(tmpl("notfound", repo=virtual)) + return ''.join(tmpl("notfound", repo=virtual)), except ErrorResponse, err: req.respond(err.code, ctype) - req.write(tmpl('error', error=err.message or '')) + return ''.join(tmpl('error', error=err.message or '')), finally: tmpl = None
--- a/tests/test-hgweb-no-path-info Sun Jun 29 15:23:09 2008 +0200 +++ b/tests/test-hgweb-no-path-info Sun Jun 29 22:36:18 2008 +0200 @@ -43,15 +43,17 @@ output = StringIO() env['QUERY_STRING'] = 'style=atom' -hgweb('.', name = 'repo')(env, startrsp) -print output.getvalue() +content = hgweb('.', name = 'repo')(env, startrsp) +sys.stdout.write(output.getvalue()) +sys.stdout.write(''.join(content)) print '---- ERRORS' print errors.getvalue() output = StringIO() env['QUERY_STRING'] = 'style=raw' -hgwebdir({'repo': '.'})(env, startrsp) -print output.getvalue() +content = hgwebdir({'repo': '.'})(env, startrsp) +sys.stdout.write(output.getvalue()) +sys.stdout.write(''.join(content)) print '---- ERRORS' print errors.getvalue() EOF
--- a/tests/test-hgweb-no-path-info.out Sun Jun 29 15:23:09 2008 +0200 +++ b/tests/test-hgweb-no-path-info.out Sun Jun 29 22:36:18 2008 +0200 @@ -35,7 +35,6 @@ </entry> </feed> - ---- ERRORS ---- HEADERS @@ -45,6 +44,5 @@ repo/ - ---- ERRORS
--- a/tests/test-hgweb-no-request-uri Sun Jun 29 15:23:09 2008 +0200 +++ b/tests/test-hgweb-no-request-uri Sun Jun 29 22:36:18 2008 +0200 @@ -44,32 +44,36 @@ output = StringIO() env['PATH_INFO'] = '/' env['QUERY_STRING'] = 'style=atom' -hgweb('.', name = 'repo')(env, startrsp) -print output.getvalue() +content = hgweb('.', name = 'repo')(env, startrsp) +sys.stdout.write(output.getvalue()) +sys.stdout.write(''.join(content)) print '---- ERRORS' print errors.getvalue() output = StringIO() env['PATH_INFO'] = '/file/tip/' env['QUERY_STRING'] = 'style=raw' -hgweb('.', name = 'repo')(env, startrsp) -print output.getvalue() +content = hgweb('.', name = 'repo')(env, startrsp) +sys.stdout.write(output.getvalue()) +sys.stdout.write(''.join(content)) print '---- ERRORS' print errors.getvalue() output = StringIO() env['PATH_INFO'] = '/' env['QUERY_STRING'] = 'style=raw' -hgwebdir({'repo': '.'})(env, startrsp) -print output.getvalue() +content = hgwebdir({'repo': '.'})(env, startrsp) +sys.stdout.write(output.getvalue()) +sys.stdout.write(''.join(content)) print '---- ERRORS' print errors.getvalue() output = StringIO() env['PATH_INFO'] = '/repo/file/tip/' env['QUERY_STRING'] = 'style=raw' -hgwebdir({'repo': '.'})(env, startrsp) -print output.getvalue() +content = hgwebdir({'repo': '.'})(env, startrsp) +sys.stdout.write(output.getvalue()) +sys.stdout.write(''.join(content)) print '---- ERRORS' print errors.getvalue() EOF
--- a/tests/test-hgweb-no-request-uri.out Sun Jun 29 15:23:09 2008 +0200 +++ b/tests/test-hgweb-no-request-uri.out Sun Jun 29 22:36:18 2008 +0200 @@ -35,6 +35,24 @@ </entry> </feed> +---- ERRORS + +---- HEADERS +200 Script output follows +---- DATA +[('Content-Type', 'text/plain; charset=ascii')] + +-rw-r--r-- 4 bar + + +---- ERRORS + +---- HEADERS +200 Script output follows +---- DATA +[('Content-Type', 'text/plain; charset=ascii')] + +/repo/ ---- ERRORS @@ -46,27 +64,5 @@ -rw-r--r-- 4 bar - ---- ERRORS ----- HEADERS -200 Script output follows ----- DATA -[('Content-Type', 'text/plain; charset=ascii')] - -/repo/ - - ----- ERRORS - ----- HEADERS -200 Script output follows ----- DATA -[('Content-Type', 'text/plain; charset=ascii')] - --rw-r--r-- 4 bar - - - ----- ERRORS -