Плагин UndevGit добавляет в redmine новый тип репозитория UndevGit. UndevGit умеет делать все то, что делает Git репозиторий, но вдобавок он добавляет возможность работы с удаленными репозиториями и добавляет хуки для репозиториев UndevGit.
В процессе чтения репозитория UndevGit клонирует удаленный или локальный репозиторий и в дальнейшем работает с созданной копией.
- Скопировать каталог с плагином в plugins
- bundle exec rake redmine:plugins:migrate
- bundle install в корне редмайна
- Перезапустить redmine
В административном меню на вкладке Repositories в группе Enabled SCM необходимо включить UndevGit.
В настройках плагина можно указать максимальное количество веток отображаемых на странице тикета в разделе связанных ревизий (Associated Revisions). Пустое значение или 0 означает отуствие ограничений. Настройка хуков описывается ниже.
В настройках инсталяции редмайна, в файле config/configuration.yml
можно указать
папку для хранения локальных копий репозиториев,
указав значение для ключа scm_repo_storage_dir
. По умолчанию это папка repos
в корне редмайна.
Локальные копии репозиториев складываются в папку repos\[projectidentifier]\[repository_id]
После удаления репозитория папки удаляются.
Назначение хуков - гибко настраивать как и в каких случаях изменять тикет. Можно настроить выполнение хуков для определенных веток, проекта и даже отдельного репозитория. Таким образом появляются глобальные хуки которые срабатывают для всех репозиториев, хуки проекта - которые срабатывают для всех репозиториев проекта и хуки репозитория.
Если в хуке стоит ветка "*" - то хук применяется один раз при попадании коммита в репозиторий, а если указаны ветки, то при каждом попадании коммита в ветку (один раз для одной ветки).
Хуки заменяют функционал редмайна, который позволяет закрывать тикеты используя специальные ключевые слова. Соответственно ключевые слова указанные в настройках редмайна на вкладке на вкладке Repository, (атрибут Fixing keywords) не используются. Для каждого хука нужно определять собственный набор ключевых слов.
Хуки настраиваются в двух местах. Глобальные хуки управляются в настройках редмайна (пункт меню Global hooks над Plugins). Хуки проекта и хуки репозитория доступны в меню настроек проекта на вкладке Hooks.
TODO: Настройка чтения реп при обращении (почему лучше ее отключать)
Приоритеты хуков определяются так: наивысший приоритет имеют хуки репозитория, затем хуки проекта и наменьший приоритет у глобальных хуков. Внутри типов хуки также имееют приоритет, который можно при необходимости изменить. В случае если для коммита найдено несколько хуков, выполнен будет только один - с наивысшим приоритетом.
Отдельно стоит отметить что хуки применяемые для всех веток имееют более низкий приоритет, чем хуки в которых явно перечислены ветки.
Изменения тикета отражаются в журнале тикета. В случае отсутствия фактических изменений запись в журнале тикета не появляется.
Например: в репозиторий пушится коммит который виден из двух веток (feature, develop) Есть настроенные хуки: Хук1 ветки: '*' Хук2 ветки: 'feature' В этом случае выполнится только хук2.
Допустим есть коммит A с текстом 'fix #1' и есть хуки: Хук1 глобальный, ветки: '*' Хук2 глобальный, ветки: 'master' Хук3 проектный, ветки: 'develop,staging' Хук4 для репы, ветки: 'staging' Хук5 для репы, ветки: 'feature'
1-ый пуш: коммит A в ветке feature: выполняется Хук5 2-ой пуш: мержим ветку feature в staging: выполняется Хук4 3-ий пуш: мержим feature в develop: выполняется Хук3 3-ий пуш: мержим feature в master: выполняется Хук2
Хук1 сработает если например запушим коммит B в ветке featureX
Для того чтобы привязать коммит к тикету, достаточно указать ключевое слово и
номер тикета с решеткой, например так: refs #124
.
Ключевые слова задаются в настройках редмайна на вкладке Repository,
(атрибут Referencing keywords).
Если указать '*' в качестве ключевого слова, то достаточно просто указать номер
тикета с решеткой чтобы привязать коммит к тикету.
UndevGit позволяет определить коммиты которые были перемещены с помощью git rebase
.
"Старые" коммиты не удаляются из списка чейнджсетов, но помечаются специальной
иконкой со ссылкой на "новый" коммит. Аналогично и "новые" коммиты помечаются иконкой
со ссылкой на "старый" коммит.
Метка видна при просмотре списка коммитов и при просмотре отдельного коммита.
Изменения тикетов повторно не выполняются, но ссылки в Associated Revisions меняются.
Также не учитываются повторно и таймлоги.
TODO
Repository.fetch_changeset пропускает репы обновляемые по веб-хуку
Распаковать тестовые репозитории rake test:scm:setup:undev_git
Подготовить БД rake RAILS_ENV=test db:drop db:create db:migrate redmine:plugins:migrate
Запустить тесты плагина redmine_undev_plugin rake RAILS_ENV=test NAME=redmine_undev_git redmine:plugins:test
Рейк таски: перенос репозиториев Git в UndevGit Дополнительные поля в чейнджсет Последовательность чтения (подбробно) Особенности первого чтения больших реп (настройка chunk_size)