view tests/test-non-interactive-wsgi @ 5675:a5fe27b83a4a

Issue 882: add standard hook to reject text files with CRLF. While the win32text extension does LF <-> CRLF conversion, and will issue a warning in case a file already in the repository uses CRLF, it provides no mechanism for verifying that incoming changes use LF. In a large development team with some Windows users, it is virtually guaranteed that someone will forget to set up the encode filter correctly and accidentally check in a file using CRLF, which can cause warnings for other Windows users when they next fetch changes. Since this is a general problem it is desirable to have a pre-commit (or -push) hook available to reject such accidents earlier rather than trying to fix them up after the fact.
author Jesse Glick <jesse.glick@sun.com>
date Wed, 19 Dec 2007 17:02:31 -0500
parents f429e0e067a8
children 6b5522cb2ad2
line wrap: on
line source

#!/bin/sh
# Tests if hgweb can run without touching sys.stdin, as is required
# by the WSGI standard and strictly implemented by mod_wsgi.

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.ui import ui
from mercurial import hg
from StringIO import StringIO
import os, 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': os.environ['HGPORT'],
	'SERVER_PROTOCOL': 'HTTP/1.0'
}

hgweb('.')(env, startrsp)
print '---- ERRORS'
print errors.getvalue()
EOF

python request.py