Für das nutzen der Web Oberfläche ist ein Web-Server mit CGI Unterstüzung notwendig. Ich verweise hier auf eine Anleitung in der Wiki. Des weiteren brauch man die Pakete mercurial und python.
apt-get install mercurial python
Die einfachste Variante ein Mercurial Repository über den Webserver erreichbar zu machen ist das Anlegen eines VirtualHost.
<VirtualHost *:80>
ServerAdmin webmaster@back2heaven.de
ServerName hg.back2heaven.de
DocumentRoot /mnt/mercurial
# index.cgi ist das webdir.cgi aus /usr/share/doc/mercurial/examples/
ScriptAliasMatch ^/hg/(.*) /mnt/mercurial/cgi-bin/index.cgi/$1
<Directory /mnt/mercurial/>
Options +ExecCGI
Order allow,deny
Allow from all
#cgi modul muss ann sein
AddHandler cgi-script .cgi
#für den schreibzugriff
AuthUserFile /etc/apache2/htpasswd
AuthName "hgdev"
AuthType Basic
<Limit POST PUT>
Require valid-user
</Limit>
</Directory>
ErrorLog /var/log/apache2/error_hg.log
LogLevel warn
CustomLog /var/log/apache2/access_hg.log combined
</VirtualHost>
Das hgwebdir.cgi brauch eine Konfigurationsdatei in dem die Speicherorte der Repositories stehen. Hier ist wichtig zu sagen, dass im VirtualHost ein /hg/ verwendet wurde um die daten zum script zu schicken. Da sonst ein Repository eventuell nicht erreichbar ist. (evtl. BUG)
#hgweb.config # unter /mnt/mercurial/data sind alle unsere reposetories [collections] /mnt/mercurial/ = /mnt/mercurial/data #eine leerzeile muss bei mir drin sein
Das hgwebdir.cgi sieht dann nach löschen einiger Dinge etwa so aus.
#!/usr/bin/env python
#hgwebdir
# hier ist eventl. ein Fehler drin. weiter unten auf der Seite ist ein
# Skript, welches mit Version 1.0.X aus den backports (von lenny nach etch)
# arbeitet.
#debug
import cgitb
cgitb.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
from mercurial.hgweb.request import wsgiapplication
import mercurial.hgweb.wsgicgi as wsgicgi
def make_web_app():
return hgwebdir("hgweb.config")
wsgicgi.launch(wsgiapplication(make_web_app))
Damit ist alles eingerichtet. Nun fehlen uns noch die Repositories in data/ die werden einfach angelegt.
$> cd /mnt/mercurial $> mkdir -p data/rep1 data/rep2 $> cd data/rep1 $> hg init . $> cd ../rep2 $> hg init .
Damit später auch geschrieben werden kann, einfach eine htpasswd anlegen.
$> htpasswd -c /etc/apache2/htpasswd
Wer will kann mercurial noch ein wenig Konfigurieren.
#/etc/mercurial/hgrc [web] allow_archive = bz2 gz zip allowpull = true contact =developer@schwarze-allianz.de maxchanges = 15 maxfiles = 15 style = gitweb # wenn man kein ssl nutzen will push_ssl = false # brauch man allow_push = *
Nun sollte alles erreichbar sein. Ähnlich wie ViewCVS kann man nun auch über die Web-Oberfläche alles sehen. Der Befehl
$> hg clone http://hg.back2heaven.de/hg/rep1lädt das rep1 herunter damit man lokal damit arbeiten kann. später kann man mit
$> hg pushwieder alles zum Server senden.
Ein Vorteil gegenüber nutzung von CVS oder auch SVN ist, dass es auch möglich ist in ohne Netzanbindung mit dem Repository zu arbeiten. Da ein
$> hg commitkeine Netzwerkanbindung brauch.
$> sudo -u www-data hg serve --webdir-conf /var/hg/hgweb.config
Hier sind auch Pakete für Etch http://packages.debian.org/etch-backports/mercurial
#!/usr/bin/env python
#
# An example CGI script to export multiple hgweb repos, edit as necessary
# adjust python path if not a system-wide install:
#import sys
#sys.path.insert(0, "/path/to/python/lib")
# enable importing on demand to reduce startup time
from mercurial import demandimport; demandimport.enable()
# Uncomment to send python tracebacks to the browser if an error occurs:
import cgitb
cgitb.enable()
# If you'd like to serve pages with UTF-8 instead of your default
# locale charset, you can do so by uncommenting the following lines.
# Note that this will cause your .hgrc files to be interpreted in
# UTF-8 and all your repo files to be displayed using UTF-8.
#
import os
os.environ["HGENCODING"] = "UTF-8"
from mercurial.hgweb.hgwebdir_mod import hgwebdir
import mercurial.hgweb.wsgicgi as wsgicgi
application = hgwebdir('hg.conf')
wsgicgi.launch(application)