На днях все-таки переехали с vasa_c'ом на Mercurial. Возникли трудности с перемещением ревизий из Subversion в Mercurial, а также с настройкой Trac.
Работать будем от имени и группы — www.
Путь до файлов с данными svn — «/var/svn», до hg — «/var/hg», для trac — «/var/trac».
Имя проекта для примера — «EXAMPLE».
Запускать hg serve будем на порту 8010.
Установка и настройка Mercurial
Установим сам Mercurial:
make install clean
Создаем каталог для хранения данных Mercurial и репозиториев:
chown -R www:www /var/hg
Проинициализируем проект:
hg init
Отредактируйте файл «/var/hg/repos/EXAMPLE/.hg/hgrc»:
# стиль gitweb
style = gitweb
# при пушенге не использовать SSL
push_ssl = false
# разрешить всем пушинг, по поводу авторизации см. ниже
allow_push = *
Копируем http-auth конфиг из «/var/svn»:
Либо создайте его сами:
htpasswd -b /var/hg/hg-auth-file USER2 PASSWORD2
Настройки на клиенте
Добавим свое имя для hg и авторизационные данные, отредактируя hgrc:
Вы так же можете прописать настройки персонально для проекта, например в «/home/USER1/projects/EXAMPLE/.hg/hgrc», где «/home/USER1/projects/EXAMPLE» — ваша рабочая копия проекта EXAMPLE.
Добавим следующее содержимое:
username = USER1
[auth]
EXAMPLE.prefix = http://hg.example.com/
EXAMPLE.username = USER1
EXAMPLE.password = PASSWORD1
Более подробно о hgrc можно почитать в статье
Настройка hgweb
Вернемся снова на сервер и отредактируем hgweb.config:
Приведите к виду:
# путь который вырезается из строки запроса (http) = путь до файлов репозитория Mercurial
/var/hg/repos = /var/hg/repos
Запуск hg serve
Для запуска вам понадобится скрипт инициализации, который вы можете скачать тут, после чего скопируйте его в каталог «/usr/local/etc/rc.d/»:
wget -O hg http://adw0rd.ru/files/hg.txt
chmod +x hg
Теперь создадим pidfile:
touch /var/run/hgserve/hgserve.8010
chown -R www:www /var/run/hgserve/
Запускаем:
Для того, чтобы при загрузке системы hgserve сам запускался, вам следует добавить в /etc/rc.conf следующее:
Настройка Nginx
Добавим upstream:
server 127.0.0.1:8010;
}
И добавим хост:
listen 80;
server_name hg.example.com;
location / {
auth_basic "Password, please!";
auth_basic_user_file /var/hg/hg-auth-file;
proxy_pass http://hg;
}
}
Перезагружаем nginx:
Импортируем данные из Subversion
Для импортирования данных из Subversion нам понадобится установить hgsvn (если у вас нет Subversion, то пропустите шаги связанные с ним):
make install clean
rehash
Импортируем данные из Subversion, такие как ревизии и ченжлоги к ним:
hgimportsvn file:///var/svn/repos/EXAMPLE
cd EXAMPLE
hgpullsvn
Чуть более подробно о hgsvn можно прочитать в статье .
Настройка Trac
Будем считать, что Trac у нас уже установлен, настроен и работает, поэтому опишу только изменения.
Для поддержки Mercurial в Trac нам понадобится установить плагин mercurial-plugin:
cd mercurial-plugin
python setup.py bdist_egg
easy_install dist/TracMercurial-0.11.0.[x]-py2.[x].egg
Открываем конфиг вашего проекта:
И приводим соответствующие секции и переменные к такому виду:
repository_type = hg
repository_dir = /var/hg/repos/EXAMPLE
[components]
tracext.hg.* = enabled
[hg]
# -- Show revision number in addition to the changeset hash
show_rev = yes
# -- Changeset hash format
node_format = short
# hex: Show the full SHA1 hash
# short: Show a shortened hash for the changesets
После установки плагина и настройки проекта не забудьте перезагрузить Tracd или другой веб-сервер, через который вы работаете с Trac.
Теперь, если у вас в Timeline появились символы вопросов вместо кириллических комментариев к ревизиям, вам необходимо установить HGENCODING="utf-8":
export HGENCODING
Посмотреть полностью скрипт инициализации для tracd можно тут (там устанавливается HGENCODING).
Более подробно изучить проблему с битыми символами при выводе сообщения к ченжлогу, вы можете посмотрев исходный код Mercurial, а именно в файле «/usr/local/lib/python2.6/site-packages/mercurial/encoding.py» функция «tolocal».
Рекомендую к прочтению
Несколько статей про Mercurial и Trac:
Mercurial. Автоматическое обновление проекта при помощи хуков
Статьи vasa_c про Mercurial
Установка и настройка Trac на FreeBSD
Перенос Trac на Nginx и tracd
Присылайте ссылки на другие статьи и я их тут опубликую.

Редмайн как-то покруче выглядит
Да ну нафиг, юзал я редмайн... мне совершенно не понравился, Trac его всетаки лучше будет, имхо. Если что-то лучше Trac'а, то это какой-нибудь TargetProcess или Jira. Да и вообще речь о Mercurial была, трак упоминается в статье только из-за того что мы его используем и дополнительно о нем написал.
P.S. я ставил редмайн без каких-либо плагинов, возможно они бы и исправили мое мнение
Мийка, ты когда разбанишься на пыхе?
Имя, мы знакомы? :)
Ну мне еще нужен отдых, еще месяцок наверное... Надо много проектов подтянуть и т.д.
и в чем прелесть этого трака американского ?)
Спасибо, статья пригодилась
Мне интересно почему вы выбрали именно меркуриал? Почему не gti? Или еще что нибудь поуникальнее? )
Потомучто меркуриал проще для нас оказался чем гит, при переходе с свн
В каком плане проще? Проще в миграции с свн или в работе?
В плане работы. Возможно в скоре будет переход на гит, так как с недавнего времени я стал активно его использовать на работе
так не заработало с нджинксом.
заработало так:
Спасибо, видимо скопипастил из своей другой статьи про свн :)
py-htpasswd меня устраивает, апатч зло
ln -s /usr/local/bin/htpasswd.py /usr/local/bin/htpasswd
кроме hgsvn еще есть
— yahg2svn ()
—
— Tailor ()
+1, там где нет apache2-utils (например FreeBSD), я тоже пользуюсь htpasswd.py