Настройка Mercurial в связке с IIS6
Слушая весной подкаст UTP от Umputun'а, я не думал, что спустя всего полгода реально оценю всю прелесть распределенных систем контроля версий и в частности - Mercurial. Для начала я опробовал его дома для личных проектов, потом настроил для них связку с BitBucket, что придало мне еще больше восторга из-за встроенного баг-трекера и вики. И вот, наконец, я решил заменить им на работе порядком поднадоевший SVN.
Заменил волевым усилием, перенеся стабильную версию проектов без сохранения истории правок в SVN. Потом встал вопрос о создании центрального репозитория для более удобной командной работы. Создать репозиторий - очень просто, но захотелось организовать еще какой-нибудь web-интерфейс для всех репозиторев, чтобы визуально наблюдать за процессом разработки и иметь централизованные адреса для push/pull.
Беглый поиск по интернету дал результат: есть встроенный в Mercurial web-сервер, который может хостить один репозиторий. Для того, чтобы разместить несколько репозиториев по одному адресу - нужны дополнительные пляски с бубном. Тот же поиск вывел на несколько записей с инструкциями для более ранних версий Mercurial (например 1.4.3), который можно было скачать отдельно от TortoiseHg и в состав которого входил скрипт hgwebdir.cgi. У меня же была установлена последняя версия меркуриала 1.7.2 вместе с TortoiseHg 1.1.7, в котором данного скрипта нет. Путем проб и ошибок я смог настроить работу Mercurial с IIS6.
- Итак, для начала нам понадобится скачать сам TortoiseHg и Python (если он не установлен на вашем сервере). Я использовал Python 2.7.1. Устанавливаем их с настройками по умолчанию.
- Создаем папку, в которой будет обитать веб сервис.
- Скачиваем исходники Mercurial - Mercurial 1.7.2 source release
- Содержимое архива распаковываем в созданную папку. Таким образом, в корне этой папки окажется файлик hgweb.cgi.
- Открываем Менеджер IIS из средств Администрирования
- Создаем новый сайт, либо, как делал я, создаем виртуальную директорию в уже существующем сайте и настраиваем ее путь к ранее созданной папке.
- В свойствах сайта/виртуальной директории открываем закладку Home Directory или Virtual Directory.
- Жмем кнопку Configuration.
- На закладке Mappings жмем кнопку Add.
- Вводим расширение файла .cgi, исполняемый файл - <PythonInstallDir>\python.exe -u "%s". Отмечаем галочку Script engine.
- Жмем OK, OK, OK, тем самым закрывая окна и возвращаясь непосредственно к менеджеру IIS.
- Выбираем узел дерева Web Service Extensions
- Жмем на нем правой кнопкой мыши и выбираем пункт Add a new Web service extension
- В появившемся окне вводит имя расширения (например Python) и жмем кнопку Add для добавления файлов расширения.
- Выбираем файл python.exe и прописываем параметры вызова. Должно получиться вот так: <PythonInstallDir>\python.exe -u "%s"
- Ставим галочку Allowed и жмем OK.
- Закрываем Менеджер IIS.
Теперь все должно работать. Однако, надо еще сконфигурировать web-сервис меркуриала. Для этого в папке, в которой лежит файл скрипта hgweb.cgi создаем файл hgweb.config с примерно следующим содержанием:
[collections]
D:\RepositoriesHG\ = D:\RepositoriesHG\
[web]
style = monoblue
push_ssl = false
allow_push = *
В данном конфиге я указываю не конкретные репозитории, которые хочу сделать доступными через Web, а папку, в которой они все находятся. Для этого служит секция [collections]. В секции [web] задается стиль отображения web-приложения, а также разрешение пушить всем, без необходимости использования SSL.
Финальным этапом необходимо указать меркуаловскому сервису на файл конфигурации. Для этого правим файл hgweb.cgi, изменяя путь, указанный в свойстве config, например:
config = "C:\Mercurial\hgweb.config"
Надеюсь данная статья будет полезна и сэкономит вам время на решение вопросов по настройке доступа к репозиториям через web-интерфейс.
Пт, 17.12.2010