Differences between revisions 1 and 2
Revision 1 as of 2005-08-28 08:20:13
Size: 2701
Editor: mpm
Comment:
Revision 2 as of 2005-09-18 16:48:51
Size: 2918
Comment:
Deletions are marked like this. Additions are marked like this.
Line 6: Line 6:
Line 22: Line 23:
== Edit your apache configuration file ==
Line 24: Line 24:
Modifying your apache configuration file is not necessary if you run the the CGI script with a .cgi extension and in a directory that allows CGI execution. In this case, for the step of "Set up {{{index.py}}}", instead of copying hgweb.cgi to index.py, copy it to index.cgi.
Line 26: Line 25:
Place the following in your apache configuration file and reload the apache server so that the configuration changes take effect: == Setup the cgi script to refer to your repository ==
Line 28: Line 27:
{{{
 Alias /hg /home/hg
Most people adding new content to the repository don't need to change the cgi script, so keeping that
separate (maybe even protected by root permissions) is best. Copy the {{{hgweb.cgi}}} script from the
mercurial sources to {{{/var/www/cgi-hg/index.cgi}}} and change the call to hgweb.hgweb() so that the
first argument lists the path to the repository and the second argument gives the name of the repository.
Line 31: Line 32:
 <Directory /home/hg/>
         DirectoryIndex index.py
         AddHandler cgi-script .py
         Options +ExecCGI
 </Directory>
}}}
== Set up index.py ==

Copy hgweb.cgi from the Mercurial source distribution to the root of the repository (i.e., {{{/home/hg/repo-name}}}) as {{{index.py}}} and change the call to hgweb.hgweb() so that the first argument lists the path to the repository and the second argument gives the name of the repository.

Using the example names as used above, the {{{index.py}}} file might look like this:
Using the example names as used above, the {{{index.cgi}}} file might look like this:
Line 45: Line 36:
#
Line 56: Line 46:
Make sure the {{{index.py}}} file is executable: Make sure the {{{index.cgi}}} file is executable:
Line 59: Line 49:
$ chmod a+x index.py $ chmod a+x index.cgi
Line 61: Line 51:


== Edit your apache configuration file ==

Place the following in your apache configuration file and reload the apache server so that the configuration changes take effect:

{{{
Alias /hg /var/www/cgi-hg
<Directory "/var/www/cgi-hg">
    DirectoryIndex index.cgi
    AddHandler cgi-script .cgi
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>
}}}

In case you also want to make the repository available as static html files (which should normally
not be necessary), you could add:

{{{
Alias /hg-static /home/hg/repo-name
<Directory "/home/hg/repo-name">
    Options Indexes
    Order allow,deny
    Allow from all
</Directory>
}}}

Line 63: Line 83:
Once you have populated the repository, users will be able to access the repositry using the URL: {{{http://example.org/hg/repo-name}}}.   Once you have populated the repository, users will be able to access the repositry using the URL: {{{http://example.org/hg/}}}.

Setting up a Mercurial CGI Server

If you would like to publish your repository to the world, it must be made available via a web server. ["Mercurial"] does have a built-in web server which can be used for this, which can be accessed via hg serve. However, it will only allow one connection at a time, and it is not very robust; a broken connection at the wrong time can cause the hg serve to exit. A much better way to do things is to access Mercurial from a CGI script using an Apache web server.

The following example shows you one way of doing making a repository named repo-name available on the host example.org

Create a user for the repository.

This is not strictly necessary, but it will make it easier to update the repository remotely.

$ adduser hg
$ cd /home/hg
$ mkdir repo-name; cd repo-name
$ hg init

This will create a repository inhomehg/repo-name. If you create a directory in /home/hg/.ssh and set up its authorized_keys file appropriately, you will be able to remotely update the repository via the command

$ hg push ssh://hg@example.org/repo-name

Setup the cgi script to refer to your repository

Most people adding new content to the repository don't need to change the cgi script, so keeping that separate (maybe even protected by root permissions) is best. Copy the hgweb.cgi script from the mercurial sources to /var/www/cgi-hg/index.cgi and change the call to hgweb.hgweb() so that the first argument lists the path to the repository and the second argument gives the name of the repository.

Using the example names as used above, the index.cgi file might look like this:

import cgitb, os, sys
cgitb.enable()

# sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install
from mercurial import hgweb

h = hgweb.hgweb("/home/hg/repo-name", "name of repository")
h.run()

Make sure the index.cgi file is executable:

$ chmod a+x index.cgi

Edit your apache configuration file

Place the following in your apache configuration file and reload the apache server so that the configuration changes take effect:

Alias /hg /var/www/cgi-hg
<Directory "/var/www/cgi-hg">
    DirectoryIndex index.cgi
    AddHandler cgi-script .cgi
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

In case you also want to make the repository available as static html files (which should normally not be necessary), you could add:

Alias /hg-static /home/hg/repo-name
<Directory "/home/hg/repo-name">
    Options Indexes
    Order allow,deny
    Allow from all
</Directory>

That's it!

Once you have populated the repository, users will be able to access the repositry using the URL: http://example.org/hg/.

CGIinstall (last edited 2009-11-30 17:50:03 by PaulBoddie)