hgwebdir.cgi
author Sune Foldager <cryo@cyanite.org>
Mon, 02 Nov 2009 10:20:04 +0100
changeset 9694 8269fe2d48f6
parent 7526 b7d4db95e95a
child 10282 08a0f04b56bd
permissions -rw-r--r--
hgweb: send proper error messages to the client Fixes a bug in protocol which caused an exception during exception handling in some cases on Windows. Also makes sure the server error message is correctly propagated to the client, instead of being thrown away.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents:
diff changeset
     1
#!/usr/bin/env python
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents:
diff changeset
     2
#
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents:
diff changeset
     3
# An example CGI script to export multiple hgweb repos, edit as necessary
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents:
diff changeset
     4
5244
79279b5583c6 cgi: sys.path.insert should be before importing mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 5197
diff changeset
     5
# adjust python path if not a system-wide install:
79279b5583c6 cgi: sys.path.insert should be before importing mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 5197
diff changeset
     6
#import sys
79279b5583c6 cgi: sys.path.insert should be before importing mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 5197
diff changeset
     7
#sys.path.insert(0, "/path/to/python/lib")
79279b5583c6 cgi: sys.path.insert should be before importing mercurial
Benoit Boissinot <benoit.boissinot@ens-lyon.org>
parents: 5197
diff changeset
     8
5197
55860a45bbf2 Enable demandimport only in scripts, not in importable modules (issue605)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3868
diff changeset
     9
# enable importing on demand to reduce startup time
55860a45bbf2 Enable demandimport only in scripts, not in importable modules (issue605)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3868
diff changeset
    10
from mercurial import demandimport; demandimport.enable()
55860a45bbf2 Enable demandimport only in scripts, not in importable modules (issue605)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3868
diff changeset
    11
6080
4baad19c4801 hgweb: disable cgitb by default
Maxim Dounin <mdounin@mdounin.ru>
parents: 5995
diff changeset
    12
# Uncomment to send python tracebacks to the browser if an error occurs:
4baad19c4801 hgweb: disable cgitb by default
Maxim Dounin <mdounin@mdounin.ru>
parents: 5995
diff changeset
    13
#import cgitb
4baad19c4801 hgweb: disable cgitb by default
Maxim Dounin <mdounin@mdounin.ru>
parents: 5995
diff changeset
    14
#cgitb.enable()
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents:
diff changeset
    15
3868
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    16
# If you'd like to serve pages with UTF-8 instead of your default
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    17
# locale charset, you can do so by uncommenting the following lines.
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    18
# Note that this will cause your .hgrc files to be interpreted in
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    19
# UTF-8 and all your repo files to be displayed using UTF-8.
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    20
#
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    21
#import os
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    22
#os.environ["HGENCODING"] = "UTF-8"
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    23
2506
d0db3462d568 This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents: 1829
diff changeset
    24
from mercurial.hgweb.hgwebdir_mod import hgwebdir
d0db3462d568 This patch make several WSGI related alterations.
Eric Hopper <hopper@omnifarious.org>
parents: 1829
diff changeset
    25
import mercurial.hgweb.wsgicgi as wsgicgi
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents:
diff changeset
    26
1829
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    27
# The config file looks like this.  You can have paths to individual
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    28
# repos, collections of repos in a directory tree, or both.
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    29
#
941
4cf418c2a013 Add a multi-repository server
mpm@selenic.com
parents:
diff changeset
    30
# [paths]
7450
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    31
# virtual/path1 = /real/path1
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    32
# virtual/path2 = /real/path2
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    33
# virtual/root = /real/root/*
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    34
# / = /real/root2/*
7523
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    35
# virtual/root2 = /real/root2/**
1829
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    36
#
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    37
# [collections]
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    38
# /prefix/to/strip/off = /root/of/tree/full/of/repos
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    39
#
7450
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    40
# paths example: 
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    41
#
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    42
# * First two lines mount one repository into one virtual path, like
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    43
# '/real/path1' into 'virtual/path1'.
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    44
#
7523
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    45
# * The third entry mounts every mercurial repository found in '/real/root'
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    46
# in 'virtual/root'. This format is preferred over the [collections] one,
7526
b7d4db95e95a fix typo
Benoit Allard <benoit@aeteurope.nl>
parents: 7523
diff changeset
    47
# since using absolute paths as configuration keys is not supported on every
7523
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    48
# platform (especially on Windows).
7450
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    49
#
7523
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    50
# * The fourth entry is a special case mounting all repositories in
7450
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    51
# /'real/root2' in the root of the virtual directory.
79d1bb737c16 hgweb: extend [paths] syntax to match repositories recursively (issue852)
Patrick Mezard <pmezard@gmail.com>
parents: 6142
diff changeset
    52
#
7523
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    53
# * The fifth entry recursively finds all repositories under the real root,
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    54
# and mounts them using their relative path (to given real root) under the
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    55
# virtual root.
e60aaae83323 hgweb: recurse down collections only if ** in [paths]
Benoit Allard <benoit@aeteurope.nl>
parents: 7450
diff changeset
    56
#
1829
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    57
# collections example: say directory tree /foo contains repos /foo/bar,
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    58
# /foo/quux/baz.  Give this config section:
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    59
#   [collections]
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    60
#   /foo = /foo
b0f6af327fd4 hgwebdir: export collections of repos
Vadim Gelfer <vadim.gelfer@gmail.com>
parents: 1144
diff changeset
    61
# Then repos will list as bar and quux/baz.
3868
6033d9f28052 hgweb.cgi and hgwebdir.cgi fixes/cleanups for user configurable parts:
Thomas Arendsen Hein <thomas@intevation.de>
parents: 3781
diff changeset
    62
#
1144
8a39df05d2c1 Documented passing list or dict instead of config file in hgwebdir.cgi
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1064
diff changeset
    63
# Alternatively you can pass a list of ('virtual/path', '/real/path') tuples
8a39df05d2c1 Documented passing list or dict instead of config file in hgwebdir.cgi
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1064
diff changeset
    64
# or use a dictionary with entries like 'virtual/path': '/real/path'
8a39df05d2c1 Documented passing list or dict instead of config file in hgwebdir.cgi
Thomas Arendsen Hein <thomas@intevation.de>
parents: 1064
diff changeset
    65
6141
90e5c82a3859 Backed out changeset b913d3aacddc (see issue971/msg5317)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5995
diff changeset
    66
application = hgwebdir('hgweb.config')
90e5c82a3859 Backed out changeset b913d3aacddc (see issue971/msg5317)
Thomas Arendsen Hein <thomas@intevation.de>
parents: 5995
diff changeset
    67
wsgicgi.launch(application)