суббота, 5 июня 2010 г.

Microsoft Visual Studio + Mercurial

После недолгого пробного использования TFS я таки в нем разочаровался, ибо уж очень много он пожирает ресурсов, а для меня одного, выхлопа от него мало. После краткого осмотра иных вариантов замены системы контроля версии я остановился на Mercurial. Ибо:
1. Без проблем работает на Windows и NIX;
2. Стабилен;
3. Приличный список возможностей;
4. Множество утилит для интеграции с разнообразными IDE и шеллами;
5. Использует минимум ресурсов;
6. Множество плагинов.

Немного по-рывшись в гугле, нашел плагин к Visual Studio 2010 - VisualHG, судя по описанию, довольно приличный. Осталось ему прокинуть доступ к репозиториям Mercurial'a на другом сервере под Windows 2008. Поскольку VisualHG работает только в связке с TortoiseHG, то пришлось создавать отдельный web-интерфейс к репозитариям, благо IIS на сервере уже стоит.
Начнем с того, что создадим отдельный каталог в дереве сайтов IIS, хотя в принципе можно и отдельный сайт.
Для наглядности пусть будет: localhost/hg/, а физический путь будет соответствовать V:\hg\.
Вместе с дистрибутивом Mercurial'a распространяются и скрипты на Python'e для создания web-страницы репозитариев. Находятся они в архиве library.zip в каталоге дистрибутива, если конечено было указано их извлечь при инсталяции. Этот самый архив распаковывается в какую-нибудь дочернюю директорию от localhost/hg/, например localhost/hg/lib/, как физический путь это будет - V:\hg\lib\.
Для запуска скриптов под IIS'ом из дополнительного ПО понадобится только Python 2.6 x86. Если использовать дистрибутив c бинарниками amd64, то скрипты попросту не будут работать. В чем причина, я так и не разобрался.
Подключение Python'a происходит через панель IIS'a в настройках "Сопоставления обработчиков". Туда необходимо добавить "сопоставление сценария" с следующими параметрами:
Путь запроса: *.cgi
Исполняемый файл: C:\Python26_x86\python.exe -u "%s %s"
Имя: Python

Путь к дистрибутиву Python'a естественно может отличаться.
Для проверки работоспособности можно в создать файл "V:\hg\test.cgi" c содержимым:
print 'Status: 200 OK'
print 'Content-type: text/html'
print ''
print '<html><head><title>Тестовая страница</title></head>'
print '<body>'
print '<h1>Тестовая страница!</h1>'
print '</body></html>'

Если все отобразилось нормально, то можно переходить дальше.
После этого необходимо в папку hg добавить файл hgwebdir.cgi для запуска python-скриптов.
После его редактирования изменения выглядят так:


Так же в эту директорию необходимо добавить файл hgweb.config с таким содержимым:
[paths]
/ = repos/*

[web]
baseurl = /hg
push_ssl = false
allow_push = *

Где repos является каталог репозиториев, полный путь к которому - v:\hg\repos.
Для более удобного и наглядного использования можно ещё прицепить URL Rewrite. Он позводит убрать из строки адреса "hgwebdir.cgi". Для этого необходимо создать правило с подобными параметрами:
Requested URL: Matches and Pattern
Using: Wildcards
Pattern: *
Action type: Rewrite
Rewrite URL: hgwebdir.cgi/{R:1}

Все остальные параметры по-умолчанию.
Для создания репозитория в качестве теста можно использовать консольную команду "hg.exe init v:\hg\repos\test".
Просмотр списка репозиториев:


Теперь для использования репозитория, в качестве минимального требования, будет только наличие TortoiseHG на произвольном компьютере. Для использования репозиториев Mercurial'a из MS VS 2010 достаточно установить плагин VisualHG, создать в директории проекта репозиторий и открыть этот проект в студии. Теперь оттуда будет возможность управлять коммитами, а из TortoiseHG заливать их на сервер.


Используемое ПО:
Mercurial 1.5.4
TortoiseHG 1.0.4
Python 2.6.4 x86
IIS 7.5
MS VS 2010