Настройка 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.

  1. Итак, для начала нам понадобится скачать сам TortoiseHg и Python (если он не установлен на вашем сервере). Я использовал Python 2.7.1. Устанавливаем их с настройками по умолчанию.
  2. Создаем папку, в которой будет обитать веб сервис.
  3. Скачиваем исходники Mercurial - Mercurial 1.7.2 source release
  4. Содержимое архива распаковываем в созданную папку. Таким образом, в корне этой папки окажется файлик hgweb.cgi.
  5. Открываем Менеджер IIS из средств Администрирования
  6. Создаем новый сайт, либо, как делал я, создаем виртуальную директорию в уже существующем сайте и настраиваем ее путь к ранее созданной папке.
  7. В свойствах сайта/виртуальной директории открываем закладку Home Directory или Virtual Directory.
  8. Жмем кнопку Configuration.
  9. На закладке Mappings жмем кнопку Add.
  10. Вводим расширение файла .cgi, исполняемый файл - <PythonInstallDir>\python.exe -u "%s". Отмечаем галочку Script engine.
  11. Жмем OK, OK, OK, тем самым закрывая окна и возвращаясь непосредственно к менеджеру IIS.
  12. Выбираем узел дерева Web Service Extensions
  13. Жмем на нем правой кнопкой мыши и выбираем пункт Add a new Web service extension
  14. В появившемся окне вводит имя расширения (например Python) и жмем кнопку Add для добавления файлов расширения.
  15. Выбираем файл python.exe и прописываем параметры вызова. Должно получиться вот так: <PythonInstallDir>\python.exe -u "%s"
  16. Ставим галочку Allowed и жмем OK.
  17. Закрываем Менеджер 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

Теги: руководство, IIS6