This page (revision-9) was last changed on 22-Jun-2009 20:38 by ThomasBayen 

This page was created on 11-Jun-2008 16:01 by JensKapitza

Only authorized users are allowed to rename pages.

Only authorized users are allowed to delete pages.

Page revision history

Version Date Modified Size Author Changes ... Change note
8 22-Jun-2009 20:38 5 KB ThomasBayen to previous | to last MercurialVersionControl ==> MercurialVersionControlServer
9 22-Jun-2009 20:38 5 KB ThomasBayen to previous MercurialVersionControl ==> MercurialVersionControlServer
7 23-Feb-2009 22:55 5 KB JensKapitza to previous | to last need update to lenny
6 14-Dec-2008 11:59 5 KB Peter Hormanns to previous | to last
5 13-Dec-2008 18:36 5 KB JensKapitza to previous | to last nachtrag bug
4 13-Dec-2008 18:19 4 KB JensKapitza to previous | to last hg serve nutzen
3 13-Dec-2008 12:30 3 KB JensKapitza to previous | to last tags und links
2 13-Dec-2008 11:55 3 KB JensKapitza to previous | to last rewrite damit man ein wenig mehr versteht, 2ter anlauf.
1 11-Jun-2008 16:01 2 KB JensKapitza to last hg einstellen

Page References

Incoming links Outgoing links

Version management

Difference between version and

= MercurialVersionControlServerMercurialVersionControl>> =
<<
>>Für das nutzen der Web Oberfläche ist ein Web-Server mit CGI Unterstüzung notwendig.<<
kurz
>> <<Icherwähnt>> <<verweisesei>> <<[hier|ApacheWebServer]hier>> <<aufApache2>> <<eineden>> <<Anleitungman>> in <<derDebian>> <<Wiki.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 <<RepositoryReposetorie>> über den Webserver erreichbar zu machen ist das Anlegen eines <<[VirtualHost|ApacheVirtualHosts].~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. Einige informationen zur Konfiguration des Apache2 Webserver stehen auch auf [Apache2Module]>>

{{{
<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 <<RepositoriesReposetories>> stehen. Hier ist wichtig zu sagen, dass im ~VirtualHost ein /hg/ verwendet wurde um die daten zum script zu schicken. Da sonst ein <<RepositoryReposetorie>> 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 <<cgitbcgitb, 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 <<RepositoriesRepositoris>> 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 <<RepositoryReposetorie zu arbeiten. Da ein
{{{
$> hg commit
}}}
keine Netzwerkanbindung brauch.

<<: Ich habe leider Probleme mit der Version 0.9.x, die in Etch (Debian 4.0) drin ist. Die Verzeichnisse werden leider nicht gelesen. Dass kann auch an der VM liegen oder an meiner Installation oder es ist ein BUG. Wer auch Probleme hat kann auch einfach hg serve verwenden die Installation wie oben ist da nicht komplett notwendig. Nur die hgweb.config muss erstellt werden.

{{{
$> 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)
}}}

[{Tag Linux VersionsVerwaltung Apache}]