MercurialVersionControlServer #
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
Links #
- http://www.selenic.com/mercurial/wiki/index.cgi/HgWebDirStepByStep
- http://www.selenic.com/mercurial/wiki/index.cgi/BinaryPackages Hier sind auch Pakete für Etch http://packages.debian.org/etch-backports/mercurial
BUGS #
Das Script, das in Etch unter /usr/share/doc/mercurial/examples/hgwebdir.cgi liegt, scheint nicht zu laufen. Nachdem ich ein Upgrade auf Version 1.0.1 gemacht habe hat es dennoch nicht geklappt. Es folgt ein weiteres Script, was in dem neuem Paket ist.#!/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)