Mercurial > hg
view contrib/win32/hgwebdir_wsgi.py @ 10579:f142fa3c0a8c stable
Make annotate --follow an alias for -f/--file to behave like in older versions
Since 98a0421b9e52 annotate follows copies/renames by default, but the output
of e.g. "annotate --follow --number" should not change without some
deprecation time.
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Wed, 03 Mar 2010 22:04:59 +0100 |
parents | 704af22f4907 |
children | 36715cd6ee3d |
line wrap: on
line source
# An example WSGI script for IIS/isapi-wsgi to export multiple hgweb repos # Copyright 2010 Sune Foldager <cryo@cyanite.org> # # Requirements: # - Python 2.6 # - IIS 7 # - PyWin32 build 214 or newer # # Earlier versions will in general work as well, but the PyWin32 version is # necessary for win32traceutil to work correctly. # # # Installation and use: # # - Download the isapi-wsgi source and run python setup.py install: # http://code.google.com/p/isapi-wsgi/ # # - Run this script (i.e. python hgwebdir_wsgi.py) to get a shim dll. The # shim is identical for all scripts, so you can just copy and rename one # from an earlier run instead. # # - Setup an IIS application where your hgwebdir is to be served from. # Make sure it's assigned a 32-bit app pool. # # - In the application, setup a wildcard script handler mapping of type # IpsapiModule, with the shim dll as its executable. This file MUST reside # in the same directory as the shim. Remove all other handlers, if you wish. # # - Make sure the ISAPI and CGI restrictions (configured globally on the # web server) includes the shim dll, to allow it to run. # # - Adjust the configuration variables below to match your needs. # # Configuration file location hgweb_config = r'c:\src\iis\hg\hgweb.config' # Global settings for IIS path translation path_strip = 0 # Strip this many path elements off (when using url rewrite) path_prefix = 1 # This many path elements are prefixes (depends on the # virtual path of the IIS application). import sys # To stop serving pages in UTF-8, remove the two lines below import os os.environ['HGENCODING'] = 'UTF-8' # Adjust python path if this is not a system-wide install #sys.path.insert(0, "/path/to/python/lib") # Enable tracing. Run 'python -m win32traceutil' to debug if hasattr(sys, 'isapidllhandle'): import win32traceutil import isapi_wsgi from mercurial import demandimport; demandimport.enable() from mercurial.hgweb.hgwebdir_mod import hgwebdir # Example tweak: Replace isapi_wsgi's handler to provide better error message # Other stuff could also be done here, like logging errors etc. class WsgiHandler(isapi_wsgi.IsapiWsgiHandler): error_status = '500 Internal Server Error' # less silly error message isapi_wsgi.IsapiWsgiHandler = WsgiHandler # Only create the hgwebdir instance once application = hgwebdir(hgweb_config) def handler(environ, start_response): # Translate IIS's weird URLs url = environ['SCRIPT_NAME'] + environ['PATH_INFO'] paths = url[1:].split('/')[path_strip:] script_name = '/' + '/'.join(paths[:path_prefix]) path_info = '/'.join(paths[path_prefix:]) if path_info: path_info = '/' + path_info environ['SCRIPT_NAME'] = script_name environ['PATH_INFO'] = path_info return application(environ, start_response) def __ExtensionFactory__(): return isapi_wsgi.ISAPISimpleHandler(handler) if __name__=='__main__': from isapi.install import * params = ISAPIParameters() HandleCommandLine(params)