MercurialVersionControl #

Für das nutzen der Web Oberfläche ist ein Web-Server mit CGI Unterstüzung notwendig. kurz erwähnt sei hier Apache2 den man in Debian mit
apt-get install apache2 libapache2-mod-python
installieren kann.

Des weiteren brauch man die Pakete mercurial und python. Das installieren kann zum Beispiel so aussehen.

apt-get install mercurial python
Die einfachste Variante ein Mercurial Reposetorie über den Webserver erreichbar zu machen ist das Anlegen eines VirtualHost. Hier ist zu sagen, wenn kein globales schreiben erwünscht ist sollten POST und PUT beim Webserver limitiert sein. Ein Beispiel für den Apache2 kann wie folgt aussehen.
 <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 Reposetories stehen. Hier ist wichtig zu sagen, dass im VirtualHost ein /hg/ verwendet wurde um die daten zum script zu schicken. Da sonst ein Reposetorie 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

#debug
import cgitb, sys
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 Repositoris 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/rep1
lädt das rep1 herunter damit man lokal damit arbeiten kann. später kann man mit
$> hg push
wieder 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 Reposetorie zu arbeiten. Da ein

$> hg commit
keine Netzwerkanbindung brauch.