На днях все-таки переехали с vasa_c'ом на Mercurial. Возникли трудности с перемещением ревизий из Subversion в Mercurial, а также с настройкой Trac.

Работать будем от имени и группы — www.
Путь до файлов с данными svn — «/var/svn», до hg — «/var/hg», для trac — «/var/trac».
Имя проекта для примера — «EXAMPLE».
Запускать hg serve будем на порту 8010.

Установка и настройка Mercurial

Установим сам Mercurial:

cd /usr/ports/devel/mercurial
make install clean

Создаем каталог для хранения данных Mercurial и репозиториев:

mkdir -p /var/hg/repos/EXAMPLE
chown -R www:www /var/hg

Проинициализируем проект:

cd /var/hg/repos/EXAMPLE
hg init

Отредактируйте файл «/var/hg/repos/EXAMPLE/.hg/hgrc»:

[web]
# стиль gitweb
style = gitweb
# при пушенге не использовать SSL
push_ssl = false
# разрешить всем пушинг, по поводу авторизации см. ниже
allow_push = *

Копируем http-auth конфиг из «/var/svn»:

cp /var/svn/svn-auth-file /var/hg/hg-auth-file

Либо создайте его сами:

htpasswd -cb /var/hg/hg-auth-file USER1 PASSWORD1
htpasswd -b /var/hg/hg-auth-file USER2 PASSWORD2

Настройки на клиенте

Добавим свое имя для hg и авторизационные данные, отредактируя hgrc:

emacs /home/USER1/.hgrc

Вы так же можете прописать настройки персонально для проекта, например в «/home/USER1/projects/EXAMPLE/.hg/hgrc», где «/home/USER1/projects/EXAMPLE» — ваша рабочая копия проекта EXAMPLE.

Добавим следующее содержимое:

[ui]
username = USER1

[auth]
EXAMPLE.prefix = http://hg.example.com/
EXAMPLE.username = USER1
EXAMPLE.password = PASSWORD1

Более подробно о hgrc можно почитать в статье Configuration files for Mercurial

Настройка hgweb

Вернемся снова на сервер и отредактируем hgweb.config:

emacs /var/hg/repos/hgweb.config

Приведите к виду:

[collections]
# путь который вырезается из строки запроса (http) = путь до файлов репозитория Mercurial
/var/hg/repos = /var/hg/repos

Запуск hg serve

Для запуска вам понадобится скрипт инициализации, который вы можете скачать тут, после чего скопируйте его в каталог «/usr/local/etc/rc.d/»:

cd /usr/local/etc/rc.d/
wget -O hg http://adw0rd.ru/files/hg.txt
chmod +x hg

Теперь создадим pidfile:

mkdir -p /var/run/hgserve/
touch /var/run/hgserve/hgserve.8010
chown -R www:www /var/run/hgserve/

Запускаем:

/usr/local/etc/rc.d/hg start

Для того, чтобы при загрузке системы hgserve сам запускался, вам следует добавить в /etc/rc.conf следующее:

hgserve_enable="YES"

Настройка Nginx

Добавим upstream:

upstream hg {
    server 127.0.0.1:8010;
}

И добавим хост:

server {
    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:

nginx -s reload

Импортируем данные из Subversion

Для импортирования данных из Subversion нам понадобится установить hgsvn (если у вас нет Subversion, то пропустите шаги связанные с ним):

cd /usr/ports/devel/hgsvn
make install clean
rehash

Импортируем данные из Subversion, такие как ревизии и ченжлоги к ним:

cd /var/hg/repos
hgimportsvn file:///var/svn/repos/EXAMPLE
cd EXAMPLE
hgpullsvn

Чуть более подробно о hgsvn можно прочитать в статье Converting from Subversion to Mercurial.

Настройка Trac

Будем считать, что Trac у нас уже установлен, настроен и работает, поэтому опишу только изменения.

Для поддержки Mercurial в Trac нам понадобится установить плагин mercurial-plugin:

svn co http://svn.edgewall.org/repos/trac/plugins/0.11/mercurial-plugin mercurial-plugin
cd mercurial-plugin
python setup.py bdist_egg
easy_install dist/TracMercurial-0.11.0.[x]-py2.[x].egg

Открываем конфиг вашего проекта:

emacs /var/trac/EXAMPLE/conf/trac.ini

И приводим соответствующие секции и переменные к такому виду:

[trac]
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":

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

Присылайте ссылки на другие статьи и я их тут опубликую.


Комментарии (16) на запись «FreeBSD. Переезжаем с Subversion на Mercurial +Trac»

» Трекбеки скрыты, показать их?
  1. Имя | 25.10.2010 в 21:02

    Редмайн как-то покруче выглядит

  2. adw0rd | 25.10.2010 в 21:47

    Да ну нафиг, юзал я редмайн... мне совершенно не понравился, Trac его всетаки лучше будет, имхо. Если что-то лучше Trac'а, то это какой-нибудь TargetProcess или Jira. Да и вообще речь о Mercurial была, трак упоминается в статье только из-за того что мы его используем и дополнительно о нем написал.

    P.S. я ставил редмайн без каких-либо плагинов, возможно они бы и исправили мое мнение

  3. Имя | 25.10.2010 в 23:19

    Мийка, ты когда разбанишься на пыхе?

  4. adw0rd | 26.10.2010 в 01:26

    Имя, мы знакомы? :)

    Ну мне еще нужен отдых, еще месяцок наверное... Надо много проектов подтянуть и т.д.

  5. Pandora | 03.11.2010 в 01:13

    и в чем прелесть этого трака американского ?)

  6. vasa_c | 15.11.2010 в 13:49

    Спасибо, статья пригодилась

  7. mario | 19.11.2010 в 12:20

    Мне интересно почему вы выбрали именно меркуриал? Почему не gti? Или еще что нибудь поуникальнее? )

  8. adw0rd | 19.11.2010 в 17:39

    Потомучто меркуриал проще для нас оказался чем гит, при переходе с свн

  9. Flare | 19.01.2011 в 14:42

    В каком плане проще? Проще в миграции с свн или в работе?

  10. adw0rd | 19.01.2011 в 15:36

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

  11. vasa_c | 19.01.2011 в 17:26

    htpasswd -cmb /var/hg/hg-auth-file USER1 PASSWORD1

    htpasswd -mb /var/hg/hg-auth-file USER2 PASSWORD2

    так не заработало с нджинксом.

    заработало так:

    htpasswd -cb /var/hg/hg-auth-file USER1 PASSWORD1

    htpasswd -b /var/hg/hg-auth-file USER2 PASSWORD2

  12. adw0rd | 19.01.2011 в 17:53

    Спасибо, видимо скопипастил из своей другой статьи про свн :)

  13. Pandora | 03.04.2012 в 03:03

    py-htpasswd меня устраивает, апатч зло

  14. Pandora | 03.04.2012 в 03:12

    ln -s /usr/local/bin/htpasswd.py /usr/local/bin/htpasswd

  15. Pandora | 03.04.2012 в 03:54

    кроме hgsvn еще есть

    — yahg2svn (hg.rosdahl.net/yasvn2hg)

    www.selenic.com/mercurial...ConvertExtension

    — Tailor (progetti.arstecnica.it/tailor)

  16. adw0rd | 04.04.2012 в 14:48

    py-htpasswd меня устраивает, апатч зло

    +1, там где нет apache2-utils (например FreeBSD), я тоже пользуюсь htpasswd.py

Оставить комментарий