This document describes how to install and configure mercurial on linux debian squeeze. With minor changes you can use this procedure on different linux distributions.
1. Install required packages
[codesyntax lang="bash"]
aptitude install mercurial libapache2-mod-wsgi
[/codesyntax]
2. Create repositories directories
mkdir -pv /repositories
chown -R www-data:www-data /repositories
cd /repositories
3. Configure hgweb.cgi script in order to server the repositories via Apache
[codesyntax lang="bash"]
cp /usr/share/doc/mercurial/examples/hgweb.cgi . chmod a+x hgweb.cgi vim /repositories/hgweb.cgi :%s/\/path\/to\/repo\/or\/config/\/repositories\/hgweb.config :wq
[/codesyntax]
4. Configure hgweb.config
[codesyntax lang="bash"]
vim /repositories/hgweb.config
[/codesyntax]
[collections]
/repositories = /repositories
[codesyntax lang="bash"]
:wq
[/codesyntax]
5. Configure Apache
[codesyntax lang="bash"]
vim /etc/apache2/sites-available/code.domain.com
[/codesyntax]
ServerName code.domain.com
ServerAlias code.domain.com
ScriptAlias /repositories "/repositories/hgweb.cgi"
DocumentRoot /repositories
ErrorLog /var/log/apache2/code.domain.com-error_log
CustomLog /var/log/apache2/code.domain.com-access.log combined
LogLevel warn
ServerSignature Off
[codesyntax lang="bash"]
:wq
[/codesyntax]
6. Restart Apache
[codesyntax lang="bash"]
/etc/init.d/apache2 restart
[/codesyntax]
7. Make a test repository
[codesyntax lang="bash"]
mkdir test cd test hg init
[/codesyntax]
8. Enable notify extension
[codesyntax lang="bash"]
vim /etc/mercurial/hgrc.d/hgext.rc :%s/# hgext.notify/hgext.notify :wq
[/codesyntax]
9. Configure email notifications for earlier created repository
[codesyntax lang="bash"]
vim /repositories/test/.hg/hgrc
[/codesyntax]
[paths]
default = ssh://root@code.domain.com//repositories/configs
default-push = ssh://root@code.domain.com//repositories/configs
# in case you have ssh on a non standard port then you should use something like that
#default-push = ssh://root@code.domain.com:port//repositories/configs
[extensions]
hgext.notify=
[hooks]
changegroup.notify = python:hgext.notify.hook
[email]
from = mercurial@domain.com
[smtp]
host = domain.com
[web]
baseurl= http://code.domain.com/repositories/
[notify]
sources = serve
test = False
diffstat = False
merge = False
maxdiff = 0
template = Subject: [{webroot|basename}]: {desc|strip|firstline}\n\ndetails: {baseurl}{webroot|basename}/rev/{node|short}\nchangeset: {rev}:{node|short}\nuser: {author}\ndate: {date|date}\ndescription:\n{desc}\n\nfiles changed:\n {files}\n\n\n
[usersubs]
user@example.com = *
[reposubs]
configs = user@example.com
[codesyntax lang="bash"]
:wq
[/codesyntax]
10. Copying some files in the repository
[codesyntax lang="bash"]
rsync -avz /some/files/* . hg add hg status hg commit -m "Added initial files to the repo" -u user hg push
[/codesyntax]
it does not adress all the other issues
multi user access, hoocks, read only reps...