annotate hgwebdir.cgi @ 10189:e451e599fbcf

patch: support diff data loss detection and upgrade In worst case, generating diff in upgrade mode can be two times more expensive than generating it in git mode directly: we may have to regenerate the whole diff again whenever a git feature is detected. Also, the first diff attempt is completely buffered instead of being streamed. That said, even without having profiled it yet, I am convinced we can fast-path the upgrade mode if necessary were it to be used in regular diff commands, and not only in mq where avoiding data loss is worth the price.
author Patrick Mezard <pmezard@gmail.com>
date Fri, 01 Jan 2010 20:54:05 +0100
parents b7d4db95e95a
children 08a0f04b56bd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
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)