Mercurial

Минимальная инфраструктура для работы с распределенной системой контроля версий Mercurial настраивается следующим образом.

Во-первых, нужно где-то разместить репозитории. Поскольку никаких других рекомендаций не поступало, по аналогии с cvs и svn будем класть все в /srv/hg/repos. Во-вторых, нужно обеспечить теперь доступ разным пользователям, которые счастливо существуют на компьютере и что-то там делают. Основная инструкция тут: http://mercurial.selenic.com/wiki/MultipleCommitters. Краткая инструкция: по аналогии с cvs и svn, создаем системную группу hg, системного пользователя hg, добавляем всех пользователей в группу hg.

Схема создания нового репозитория выглядит следующим образом:
cd repos/
mkdir test
chown -R hg:hg test
cd test/
hg init
chown -R hg:hg .hg
chmod -R g+w .hg
chmod g+s .hg .hg/store .hg/store/data

Mercurial >1.0 сам, о чудо, разбирается с правами доступа и делает так, чтобы все кому надо могли туда писать. Вообще говоря, данный подход (пулить всем вместе в один репозиторий) полностью противоречит идеологии hg.

В-третьих, никак не обойтись без веб-интерфейса. В /usr/share/doc/packages/mercurial живет пример под названием hgweb.cgi. Кладем его в /srv/hg/bin/hgweb.fcgi и меняем примерно следующим образом (чтобы через FastCGI работал):
#!/usr/bin/python

config = "/srv/hg/config"

from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb import hgweb, wsgicgi
from flup.server import fcgi
application = hgweb(config)
fcgi.WSGIServer(application).run()

Конфигурация для lighttpd (обычно кладется куда-нибудь в /etc/lighttpd/vhosts.d/hgweb.conf):
fastcgi.server += (
        "/hg" => ((
                        "bin-path" => "/srv/hg/bin/hgweb.fcgi",
                        "socket" => socket_dir + "/hgweb.sock",
                        "max-procs" => 1,
                        "check-local" => "disable",
                        "fix-root-scriptname" => "enable",
        ))
)

Что писать в /srv/hg/config подсказывают в hg help hgweb:
[paths]
/ = /srv/hg/repos/*
/home/user = /home/user/hg/**

Последняя строчка для того, чтобы пользователям было не обидно, там они хранят свои личные репозитории. Вот только . Поля "Description" и "Contact" настраиваются в .hg/hgrc персонально для каждого репозитория. Кроме того, теперь через http возможно анонимное клонирование.
В openSUSE перерабатывают страницу software.opensuse.org и придумали полезную вещь, встраиваемый в веб-страницы виджет с информацией о пакетах; инструкция здесь.

Выглядит примерно так: