Patchwork hgwebdir_wsgi: update script and expand help

login
register
mail settings
Submitter Sune Foldager
Date Feb. 22, 2016, 12:02 p.m.
Message ID <19bca058e2601ee8b2b2.1456142530@d132.edlund.dk>
Download mbox | patch
Permalink /patch/13291/
State Accepted
Headers show

Comments

Sune Foldager - Feb. 22, 2016, 12:02 p.m.
# HG changeset patch
# User Sune Foldager <sune.foldager@edlund.dk>
# Date 1455900628 -3600
#      Fri Feb 19 17:50:28 2016 +0100
# Node ID 19bca058e2601ee8b2b2cd09de10e14014099f2d
# Parent  a036e1ae1fbe88ab99cb861ebfc2e4da7a3912ca
hgwebdir_wsgi: update script and expand help

I've updated the script to reflect changes in Mercurial and to include a much
more through installation guide with configuration examples and details on how
to configure IIS. I've used the script to set up a working server from scratch.
Augie Fackler - Feb. 22, 2016, 11:10 p.m.
On Mon, Feb 22, 2016 at 01:02:10PM +0100, Sune Foldager wrote:
> # HG changeset patch
> # User Sune Foldager <sune.foldager@edlund.dk>
> # Date 1455900628 -3600
> #      Fri Feb 19 17:50:28 2016 +0100
> # Node ID 19bca058e2601ee8b2b2cd09de10e14014099f2d
> # Parent  a036e1ae1fbe88ab99cb861ebfc2e4da7a3912ca
> hgwebdir_wsgi: update script and expand help

Queued. I got a chuckle out of "bitnessXX" being a real config setting
on Windows. Thanks!

>
> I've updated the script to reflect changes in Mercurial and to include a much
> more through installation guide with configuration examples and details on how
> to configure IIS. I've used the script to set up a working server from scratch.
>
> diff --git a/contrib/win32/hgwebdir_wsgi.py b/contrib/win32/hgwebdir_wsgi.py
> --- a/contrib/win32/hgwebdir_wsgi.py
> +++ b/contrib/win32/hgwebdir_wsgi.py
> @@ -1,43 +1,86 @@
>  # An example WSGI script for IIS/isapi-wsgi to export multiple hgweb repos
> -# Copyright 2010 Sune Foldager <cryo@cyanite.org>
> +# Copyright 2010-2016 Sune Foldager <cyano@me.com>
>  #
>  # This software may be used and distributed according to the terms of the
>  # GNU General Public License version 2 or any later version.
>  #
>  # Requirements:
> -# - Python 2.6
> -# - PyWin32 build 214 or newer
> -# - Mercurial installed from source (python setup.py install)
> -# - IIS 7
> -#
> -# Earlier versions will in general work as well, but the PyWin32 version is
> -# necessary for win32traceutil to work correctly.
> +# - Python 2.7, preferably 64 bit
> +# - PyWin32 for Python 2.7 (32 or 64 bit)
> +# - Mercurial installed from source (python setup.py install) or download the
> +#   python module installer from https://www.mercurial-scm.org/wiki/Download
> +# - IIS 7 or newer
>  #
>  #
>  # Installation and use:
>  #
> -# - Download the isapi-wsgi source and run python setup.py install:
> -#   http://code.google.com/p/isapi-wsgi/
> +# - Download or clone the isapi-wsgi source and run python setup.py install.
> +#   https://github.com/hexdump42/isapi-wsgi
> +#
> +# - Create a directory to hold the shim dll, config files etc. This can reside
> +#   inside the standard IIS directory, C:\inetpub, or anywhere else. Copy this
> +#   script there.
>  #
>  # - 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, if you wish.
> +#   from an earlier run, if you wish. The shim needs to reside in the same
> +#   directory as this script.
>  #
> -# - Setup an IIS application where your hgwebdir is to be served from.
> -#   On 64-bit systems, make sure it's assigned a 32-bit app pool.
> +# - Start IIS manager and create a new app pool:
> +#   .NET CLR Version: No Managed Code
> +#   Advanced Settings: Enable 32 Bit Applications, if using 32 bit Python.
> +#   You can adjust the identity and maximum worker processes if you wish. This
> +#   setup works fine with multiple worker processes.
>  #
> -# - In the application, setup a wildcard script handler mapping of type
> -#   IsapiModule 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.
> +# - Create an IIS application where your hgwebdir is to be served from.
> +#   Assign it the app pool you just created and point its physical path to the
> +#   directory you created.
>  #
> -# - Make sure the ISAPI and CGI restrictions (configured globally on the
> -#   web server) includes the shim dll, to allow it to run.
> +# - In the application, remove all handler mappings and setup a wildcard script
> +#   handler mapping of type IsapiModule with the shim dll as its executable.
> +#   This file MUST reside in the same directory as the shim. The easiest way
> +#   to do all this is to close IIS manager, place a web.config file in your
> +#   directory and start IIS manager again. The file should contain:
>  #
> -# - Adjust the configuration variables below to match your needs.
> +#   <?xml version="1.0" encoding="UTF-8"?>
> +#   <configuration>
> +#       <system.webServer>
> +#           <handlers accessPolicy="Read, Script">
> +#               <clear />
> +#               <add name="hgwebdir" path="*" verb="*" modules="IsapiModule"
> +#                    scriptProcessor="C:\your\directory\_hgwebdir_wsgi.dll"
> +#                    resourceType="Unspecified" requireAccess="None"
> +#                    preCondition="bitness64" />
> +#           </handlers>
> +#       </system.webServer>
> +#   </configuration>
> +#
> +#   Where "bitness64" should be replaced with "bitness32" for 32 bit Python.
> +#
> +# - Edit ISAPI And CGI Restrictions on the web server (global setting). Add a
> +#   restriction pointing to your shim dll and allow it to run.
> +#
> +# - Create a configuration file in your directory and adjust the configuration
> +#   variables below to match your needs. Example configuration:
> +#
> +#   [web]
> +#   style = gitweb
> +#   push_ssl = false
> +#   allow_push = *
> +#   encoding = utf8
> +#
> +#   [server]
> +#   validate = true
> +#
> +#   [paths]
> +#   repo1 = c:\your\directory\repo1
> +#   repo2 = c:\your\directory\repo2
> +#
> +# - Restart the web server and see if things are running.
>  #
>
>  # Configuration file location
> -hgweb_config = r'c:\src\iis\hg\hgweb.config'
> +hgweb_config = r'c:\your\directory\wsgi.config'
>
>  # Global settings for IIS path translation
>  path_strip = 0   # Strip this many path elements off (when using url rewrite)
> @@ -47,20 +90,14 @@
>  import sys
>
>  # Adjust python path if this is not a system-wide install
> -#sys.path.insert(0, r'c:\path\to\python\lib')
> +#sys.path.insert(0, r'C:\your\custom\hg\build\lib.win32-2.7')
>
>  # Enable tracing. Run 'python -m win32traceutil' to debug
>  if getattr(sys, 'isapidllhandle', None) is not None:
>      import win32traceutil
>      win32traceutil.SetupForPrint # silence unused import warning
>
> -# To serve pages in local charset instead of UTF-8, remove the two lines below
> -import os
> -os.environ['HGENCODING'] = 'UTF-8'
> -
> -
>  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
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel@mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel

Patch

diff --git a/contrib/win32/hgwebdir_wsgi.py b/contrib/win32/hgwebdir_wsgi.py
--- a/contrib/win32/hgwebdir_wsgi.py
+++ b/contrib/win32/hgwebdir_wsgi.py
@@ -1,43 +1,86 @@ 
 # An example WSGI script for IIS/isapi-wsgi to export multiple hgweb repos
-# Copyright 2010 Sune Foldager <cryo@cyanite.org>
+# Copyright 2010-2016 Sune Foldager <cyano@me.com>
 #
 # This software may be used and distributed according to the terms of the
 # GNU General Public License version 2 or any later version.
 #
 # Requirements:
-# - Python 2.6
-# - PyWin32 build 214 or newer
-# - Mercurial installed from source (python setup.py install)
-# - IIS 7
-#
-# Earlier versions will in general work as well, but the PyWin32 version is
-# necessary for win32traceutil to work correctly.
+# - Python 2.7, preferably 64 bit
+# - PyWin32 for Python 2.7 (32 or 64 bit)
+# - Mercurial installed from source (python setup.py install) or download the
+#   python module installer from https://www.mercurial-scm.org/wiki/Download
+# - IIS 7 or newer
 #
 #
 # Installation and use:
 #
-# - Download the isapi-wsgi source and run python setup.py install:
-#   http://code.google.com/p/isapi-wsgi/
+# - Download or clone the isapi-wsgi source and run python setup.py install.
+#   https://github.com/hexdump42/isapi-wsgi
+#
+# - Create a directory to hold the shim dll, config files etc. This can reside
+#   inside the standard IIS directory, C:\inetpub, or anywhere else. Copy this
+#   script there.
 #
 # - 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, if you wish.
+#   from an earlier run, if you wish. The shim needs to reside in the same
+#   directory as this script.
 #
-# - Setup an IIS application where your hgwebdir is to be served from.
-#   On 64-bit systems, make sure it's assigned a 32-bit app pool.
+# - Start IIS manager and create a new app pool:
+#   .NET CLR Version: No Managed Code
+#   Advanced Settings: Enable 32 Bit Applications, if using 32 bit Python.
+#   You can adjust the identity and maximum worker processes if you wish. This
+#   setup works fine with multiple worker processes.
 #
-# - In the application, setup a wildcard script handler mapping of type
-#   IsapiModule 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.
+# - Create an IIS application where your hgwebdir is to be served from.
+#   Assign it the app pool you just created and point its physical path to the
+#   directory you created.
 #
-# - Make sure the ISAPI and CGI restrictions (configured globally on the
-#   web server) includes the shim dll, to allow it to run.
+# - In the application, remove all handler mappings and setup a wildcard script
+#   handler mapping of type IsapiModule with the shim dll as its executable.
+#   This file MUST reside in the same directory as the shim. The easiest way
+#   to do all this is to close IIS manager, place a web.config file in your
+#   directory and start IIS manager again. The file should contain:
 #
-# - Adjust the configuration variables below to match your needs.
+#   <?xml version="1.0" encoding="UTF-8"?>
+#   <configuration>
+#       <system.webServer>
+#           <handlers accessPolicy="Read, Script">
+#               <clear />
+#               <add name="hgwebdir" path="*" verb="*" modules="IsapiModule"
+#                    scriptProcessor="C:\your\directory\_hgwebdir_wsgi.dll"
+#                    resourceType="Unspecified" requireAccess="None"
+#                    preCondition="bitness64" />
+#           </handlers>
+#       </system.webServer>
+#   </configuration>
+#
+#   Where "bitness64" should be replaced with "bitness32" for 32 bit Python.
+#
+# - Edit ISAPI And CGI Restrictions on the web server (global setting). Add a
+#   restriction pointing to your shim dll and allow it to run.
+#
+# - Create a configuration file in your directory and adjust the configuration
+#   variables below to match your needs. Example configuration:
+#
+#   [web]
+#   style = gitweb
+#   push_ssl = false
+#   allow_push = *
+#   encoding = utf8
+#
+#   [server]
+#   validate = true
+#
+#   [paths]
+#   repo1 = c:\your\directory\repo1
+#   repo2 = c:\your\directory\repo2
+#
+# - Restart the web server and see if things are running.
 #
 
 # Configuration file location
-hgweb_config = r'c:\src\iis\hg\hgweb.config'
+hgweb_config = r'c:\your\directory\wsgi.config'
 
 # Global settings for IIS path translation
 path_strip = 0   # Strip this many path elements off (when using url rewrite)
@@ -47,20 +90,14 @@ 
 import sys
 
 # Adjust python path if this is not a system-wide install
-#sys.path.insert(0, r'c:\path\to\python\lib')
+#sys.path.insert(0, r'C:\your\custom\hg\build\lib.win32-2.7')
 
 # Enable tracing. Run 'python -m win32traceutil' to debug
 if getattr(sys, 'isapidllhandle', None) is not None:
     import win32traceutil
     win32traceutil.SetupForPrint # silence unused import warning
 
-# To serve pages in local charset instead of UTF-8, remove the two lines below
-import os
-os.environ['HGENCODING'] = 'UTF-8'
-
-
 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