wiki:MercurialPublishingViaWebInterface

Публикация программ через веб-интерфейс (под Юниксом)

Publishing Repositories with hgwebdir.cgi

Publishing Mercurial repositories

Протоколы для обмена информацией между репозиториями

Репозитории могут обмениваться информациями через файловую систему, через ssh, через http/https или через пересылку файлов (например, по электронной почте).

При работе через http/https есть возможность делать доступным содержимое репозиториев через веб-интерфейс, чтобы содержимое репозиториев можно было просматривать через браузер.

Установка Mercurial

Первым делом нужно установить Mercurial, чтобы hg вызывался из командной строки, и проверить, что все работает.

Устанавливать можно либо из исходных текстов, либо из бинарного дистрибутива.

Установить Mercurial можно либо для всех пользователей, либо только для одного пользователя.

Настройка сценария hgwebdir.cgi

Допустим, пользователь pupkin решил выставить несколько репозиториев. Предположим, что веб-сервер настроен так, что pupkin имеет право помещать свои веб-страницы и сценарии в папку

/home/pupkin/public_html

Тогда pupkin может создать папку

/home/pupkin/public_html/hg

и разместить в ней сценарий hgwebdir.cgi.

При этом web-сервер должен быть настроен таким образом, что доступ к /home/pupkin/public_html/hg осуществляется посредством вызова сценария hgwebdir.cgi оттуда.

Apache-specific:

В последних версиях apache запрещено использование Options в .htaccess, поэтому для разрешения запуска сценария hgwebdir.cgi требуется глобальная настройка сервера администратором.

Обращение к /home/pupkin/public_html/hg перенаправляется на hgwebdir.cgi с помощью следующих команд в /home/pupkin/public_html/hg/.htaccess:

RewriteEngine on
RewriteBase /~pupkin/hg
RewriteRule ^$ hgwebdir.cgi  [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule (.*) hgwebdir.cgi/$1  [QSA,L]

Затем создается папка

/home/pupkin/public_html/hg/repos

в которой размещаются репозитории. Каждая подпапка в repos при этом соответствует репозиторию.

В файле

/home/pupkin/public_html/hg/hgweb.config

прописываются пути к этим репозиториям:

[paths]
xxx = repos/xxx
...

Таким образом, репозиторий xxx попадает в папку

/home/pupkin/public_html/hg/repos/xxx

а доступ к нему получается через url

http://host/~pupkin/hg/xxx

Либо можно в hgweb.config разрешить показ через веб-интерфейс сразу всех репозиториев, находящихся в папке repo:

[collections]
/home/pupkin/public_html/hg/repos = /home/pupkin/public_html/hg/repos

Справа от знака = нужно указать путь к папке с репозиториями, а слева от = указывается часть пути, которую нужно "откусить" от этого пути, и вставить в url то, что остается. В данном случае, указано, что для вставки в url не надо оставлять ничего, и url репозитория yyy, лежащего в repo выглядит как

http://host/~pupkin/hg/yyy

И в том, и в другом случае, список репозиториев можно увидеть через браузер через url

http://host/~pupkin/hg/

Настройка прав доступа к папкам и файлам

Веб-сервер, скорее всего, работает не под тем аккаунтом, под которым работает пользователь. Поэтому, если хочется разрешить запись в репозитории по https или http, нужно правильно выставить права доступа к репозиториям, дав веб-серверу возможность их модифицировать.

Например, если веб-сервер запускается с группой www-data, то имеет смысл после создания директории hg отдать команды:

chgrp www-data /home/pupkin/public_html/hg
chmod g+rws /home/pupkin/public_html/hg

Тогда веб-сервер будет иметь право записи в директорию hg, а также во все её поддиректории, созданные после данных команд.

Первую из этих команд (chgrp) имеет возможность отдать только администратор.

Регистрация пользователей репозиториев

Для каждого репозитория можно настраивать права доступа: кто его может читать, и кто его может модифицировать. Для этого регистрируются "пользователи" репозиториев, которые могут и не иметь отношения к пользователям Юникса. Т.е. можно давать доступ к репозиториям даже тем пользователям, которые не зарегистрированы под Юниксом.

Для этого выбирается файл, в котором будут в зашифрованном виде храниться пароли пользователей. Например,

/home/pupkin/etc/hgpasswd

Apache-specific:

Информация о нём и о способе аутентификации записывается в файл

/home/pupkin/public_html/hg/.htaccess

следующим образом:

AuthUserFile /home/pupkin/etc/hgpasswd
AuthGroupFile /dev/null
AuthName "Mercurial Repository"
AuthType Basic
<Limit POST PUT>
Require valid-user
</Limit>

Пароли для пользователей репозиториев заносятся в hgpasswd при помощью утилиты htpasswd. Например,

cd /home/pupkin/etc
htpasswd hgpasswd sidorov

после чего нужно ввести пароль.

Если файла /home/pupkin/etc/hgpasswd не существует, то утилите htpasswd необходимо указать опцию -c:

htpasswd -c hgpasswd sidorov

Индивидуальная настройка репозиториев

Допустим, что пользователь pupkin расположил репозитории в папке

/home/pupkin/public_html/hg/repos

Тогда для репозитория xxx можно создать файл

/home/pupkin/public_html/hg/repos/xxx/.hg/hgrc

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

Чтобы дать разрешение на запись для пользователей pupkin и sidorov, вставляем следующее:

[web]
allow_push = pupkin, sidorov

Чтобы разрешить запись вообще всем:

[web]
allow_push = *

Чтобы при показе репозитория использовался стиль gitweb, указываем:

[web]
style = gitweb

А чтобы можно было скачивать отдельные версии содержимого репозитория в виде архивов, указываем

[web]
allow_archive = gz zip bz2

что может быть полезно для людей, у которых Mercurial не установлен, и которые не могут получить содержимое репозитория, клонировав его через http.

По умолчанию запись в репозиторий разрешена только по https. Чтобы это работало, веб-сервер должен быть настроен для обслуживания https, что можно проверить по адресу

https://host/~pupkin/hg/

Если отображается список репозиториев, значит всё в порядке.

Если нет возможности использовать https, то можно (но не рекомендуется) разрешить внесение изменений по http:

[web]
push_ssl = false

Отображение русских букв при просмотре репозиториев через веб-интерфейс

hgweb encoding

Mercurial хранит комментарии к изменениям репозитория в кодировке UTF-8. Если в них используются русские буквы, то чтобы они нормально отображались через веб-интерфейс, необходимо в файле hgwebdir.cgi раскомментировать две строчки:

import os
os.environ["HGENCODING"] = "UTF-8"

После это также нормально будет отображаться содержимое файлов в репозитории, если они закодированы с помощью UTF-8.

Если же хочется просматривать через веб содержимое файлов в какой-нибудь другой кодировке, то вместо UTF-8 выше следует прописать её. Однако, в этом случае просмотр через веб русских комментариев будет невозможен.

Last modified 13 years ago Last modified on Sep 6, 2007, 11:28:22 PM