Во-первых, нужно где-то разместить репозитории. Поскольку никаких других рекомендаций не поступало, по аналогии с 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 возможно анонимное клонирование.