contrib/win32/hgwebdir_wsgi.py
changeset 43076 2372284d9457
parent 41849 d22198b4b3dd
child 48875 6000f5b25c9b
equal deleted inserted replaced
43075:57875cf423c9 43076:2372284d9457
    82 
    82 
    83 # Configuration file location
    83 # Configuration file location
    84 hgweb_config = r'c:\your\directory\wsgi.config'
    84 hgweb_config = r'c:\your\directory\wsgi.config'
    85 
    85 
    86 # Global settings for IIS path translation
    86 # Global settings for IIS path translation
    87 path_strip = 0   # Strip this many path elements off (when using url rewrite)
    87 path_strip = 0  # Strip this many path elements off (when using url rewrite)
    88 path_prefix = 1  # This many path elements are prefixes (depends on the
    88 path_prefix = 1  # This many path elements are prefixes (depends on the
    89                  # virtual path of the IIS application).
    89 # virtual path of the IIS application).
    90 
    90 
    91 import sys
    91 import sys
    92 
    92 
    93 # Adjust python path if this is not a system-wide install
    93 # Adjust python path if this is not a system-wide install
    94 #sys.path.insert(0, r'C:\your\custom\hg\build\lib.win32-2.7')
    94 # sys.path.insert(0, r'C:\your\custom\hg\build\lib.win32-2.7')
    95 
    95 
    96 # Enable tracing. Run 'python -m win32traceutil' to debug
    96 # Enable tracing. Run 'python -m win32traceutil' to debug
    97 if getattr(sys, 'isapidllhandle', None) is not None:
    97 if getattr(sys, 'isapidllhandle', None) is not None:
    98     import win32traceutil
    98     import win32traceutil
    99     win32traceutil.SetupForPrint # silence unused import warning
    99 
       
   100     win32traceutil.SetupForPrint  # silence unused import warning
   100 
   101 
   101 import isapi_wsgi
   102 import isapi_wsgi
   102 from mercurial.hgweb.hgwebdir_mod import hgwebdir
   103 from mercurial.hgweb.hgwebdir_mod import hgwebdir
   103 
   104 
   104 # Example tweak: Replace isapi_wsgi's handler to provide better error message
   105 # Example tweak: Replace isapi_wsgi's handler to provide better error message
   105 # Other stuff could also be done here, like logging errors etc.
   106 # Other stuff could also be done here, like logging errors etc.
   106 class WsgiHandler(isapi_wsgi.IsapiWsgiHandler):
   107 class WsgiHandler(isapi_wsgi.IsapiWsgiHandler):
   107     error_status = '500 Internal Server Error' # less silly error message
   108     error_status = '500 Internal Server Error'  # less silly error message
       
   109 
   108 
   110 
   109 isapi_wsgi.IsapiWsgiHandler = WsgiHandler
   111 isapi_wsgi.IsapiWsgiHandler = WsgiHandler
   110 
   112 
   111 # Only create the hgwebdir instance once
   113 # Only create the hgwebdir instance once
   112 application = hgwebdir(hgweb_config)
   114 application = hgwebdir(hgweb_config)
       
   115 
   113 
   116 
   114 def handler(environ, start_response):
   117 def handler(environ, start_response):
   115 
   118 
   116     # Translate IIS's weird URLs
   119     # Translate IIS's weird URLs
   117     url = environ['SCRIPT_NAME'] + environ['PATH_INFO']
   120     url = environ['SCRIPT_NAME'] + environ['PATH_INFO']
   123     environ['SCRIPT_NAME'] = script_name
   126     environ['SCRIPT_NAME'] = script_name
   124     environ['PATH_INFO'] = path_info
   127     environ['PATH_INFO'] = path_info
   125 
   128 
   126     return application(environ, start_response)
   129     return application(environ, start_response)
   127 
   130 
       
   131 
   128 def __ExtensionFactory__():
   132 def __ExtensionFactory__():
   129     return isapi_wsgi.ISAPISimpleHandler(handler)
   133     return isapi_wsgi.ISAPISimpleHandler(handler)
   130 
   134 
   131 if __name__=='__main__':
   135 
       
   136 if __name__ == '__main__':
   132     from isapi.install import ISAPIParameters, HandleCommandLine
   137     from isapi.install import ISAPIParameters, HandleCommandLine
       
   138 
   133     params = ISAPIParameters()
   139     params = ISAPIParameters()
   134     HandleCommandLine(params)
   140     HandleCommandLine(params)