Mercurial > public > mercurial-scm > hg-stable
diff tests/test-non-interactive-wsgi @ 5337:8c5ef3b87cb1
Don't try to determine interactivity if ui() called with interactive=False.
WSGI applications are not supposed to refer to sys.stdin. In ed6df6b1c29a,
hgweb and hgwebdir were fixed to pass interactive=False to their ui()'s, but
sys.stdin.isatty() was still called by the ui objects. This change makes sure
only the ui.fixconfig() method will call ui.isatty() (by making the
ui._readline() method, which is currently only called from ui.prompt(),
private). ui.fixconfig() is changed to let config files override the initial
interactivity setting, but not check isatty() if interactive=False was
specified in the creation of the ui.
author | Dirkjan Ochtman <dirkjan@ochtman.nl> |
---|---|
date | Tue, 25 Sep 2007 19:05:34 +0200 |
parents | |
children | e3a0c092b4e2 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/test-non-interactive-wsgi Tue Sep 25 19:05:34 2007 +0200 @@ -0,0 +1,70 @@ +#!/bin/sh + +mkdir repo +cd repo +hg init +echo foo > bar +hg add bar +hg commit -m "test" -d "0 0" +hg tip + +cat > request.py <<EOF +from mercurial import dispatch +from mercurial.hgweb.hgweb_mod import hgweb +from mercurial.hgweb.request import _wsgirequest +from mercurial.ui import ui +from mercurial import hg +from StringIO import StringIO +import sys + +class FileLike(object): + def __init__(self, real): + self.real = real + def fileno(self): + print >> sys.__stdout__, 'FILENO' + return self.real.fileno() + def read(self): + print >> sys.__stdout__, 'READ' + return self.real.read() + def readline(self): + print >> sys.__stdout__, 'READLINE' + return self.real.readline() + def isatty(self): + print >> sys.__stdout__, 'ISATTY' + return False + +sys.stdin = FileLike(sys.stdin) +errors = StringIO() +input = StringIO() +output = StringIO() + +def startrsp(headers, data): + print '---- HEADERS' + print headers + print '---- DATA' + print data + return output.write + +env = { + 'wsgi.version': (1, 0), + 'wsgi.url_scheme': 'http', + 'wsgi.errors': errors, + 'wsgi.input': input, + 'wsgi.multithread': False, + 'wsgi.multiprocess': False, + 'wsgi.run_once': False, + 'REQUEST_METHOD': 'GET', + 'SCRIPT_NAME': '', + 'PATH_INFO': '', + 'QUERY_STRING': '', + 'SERVER_NAME': '127.0.0.1', + 'SERVER_PORT': '20059', + 'SERVER_PROTOCOL': 'HTTP/1.0' +} + +_wsgirequest(hgweb('.'), env, startrsp) +print '---- ERRORS' +print errors.getvalue() +EOF + +python request.py