Назад | Перейти на главную страницу

Как в Mercurial связать несколько коммитов с одной проблемой в нашем багтрекере?

В настоящее время мы используем svn и с помощью пользователей хуков можем гарантировать, что каждое сообщение фиксации имеет префикс номера ошибки (который связывает эти фиксации с отчетом о проблеме в нашем трекере проблем Bugzilla).

Мы хотим перейти к ртути со всей его распространенной добротой. Но одно из преимуществ hg заключается в том, что разработчикам не обязательно быть в сети для фиксации изменений, поэтому мы не хотим, чтобы скрипты перехвата проверяли номера ошибок на нашем центральном ресурсе Bugzilla.

Возможно, я слишком часто подхожу к этому с точки зрения svn, но я думаю, что хочу, чтобы разработчики могли указать номер ошибки в то время, когда разработчик решает отправить свое изменение в центральное репозиторий для тестирования. Ключевым требованием здесь является то, что мы хотим иметь возможность связывать коммиты с ошибкой Bugzilla, но мы не хотим давать разработчикам сложный и ручной рабочий процесс (который, например, кажется, накладывает расширение Attic).

Любые идеи?

Важно помнить, что наборы изменений (почти) неизменяемы, а это значит, что уже слишком поздно добавлять номер ошибки, когда разработчики работают. hg push. Команда push только перемещает ревизии, но не меняет их.

Тем не мение, hg push конечно, хорошее время, чтобы пойти и обновить Bugzilla, так как разработчики находятся в сети при отправке в центральный репозиторий. Так что вы можете попросить разработчиков установить ловушку вроде

[hooks]
pre-push.bugzilla = pick-bug-number.sh

В pick-bug-number.sh script должен сначала проверить, что разработчики отправляют в ваш центральный репозиторий (а не, скажем, в какой-либо другой репозиторий на своем ноутбуке), а затем попросить их указать номер ошибки. Когда разработчик вводит номер ошибки, скрипт может посмотреть на hg outgoing и свяжите исходящие ревизии с ошибкой в ​​Bugzilla.

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

Другой способ - встроить номера ошибок в сами наборы изменений. Это можно сделать с помощью названные ветви в Mercurial. Пусть ваши разработчики работают

$ hg branch bug-123

перед тем, как начать работу над ошибкой номер 123. Следующие коммиты будут содержать метку "bug-123" внутри себя. При отправке на сервер легко проанализировать отправленные наборы изменений (в changegroup hook) и обновите Bugzilla.

Вы также можете попросить разработчиков указать номер ошибки в сообщении о фиксации, как и в случае с Subversion. Онлайн-проверки не будет, но они могут следовать примерно так же, как и в Subversion. Проверить сообщение фиксации лучше всего, настроив ui.editor. Сделайте это настраиваемым скриптом, который будет запрашивать номер ошибки, поместите его в шаблон сообщения фиксации, а затем запустите и редактируйте, чтобы разработчики могли ввести сообщение фиксации.

Использование сообщений фиксации лучше, чем использование именованных ветвей, если вы планируете иметь тысячи номеров ошибок. Сам Mercurial довольно хорошо масштабируется с количеством именованных ветвей, но многие инструменты ожидают, что смогут отображать все ветки в одном раскрывающемся меню. Это хорошо работает, когда у вас их 10 или 20, но не работает, когда у вас их 5000. На самом деле это скорее UI, но он может вернуться и укусить вас еще долго после того, как вы запустите эту систему.

Например, вы можете запустить скрипт cron на стороне сервера, проверить ртутный журнал (используя hg log), а затем обновить Bugzilla, указав номер проблемы, который вы нашли из журнала. Например, параметр --date 2011-01-26 для hg log выдает только сообщения журнала в течение определенного дня, что намного быстрее обрабатывать каждый раз, чем все записи журнала.

Вы не можете добавлять сообщения при отправке на сервер, только при фиксации.