Как стать автором
Обновить

SVN mergeinfo: контроль переноса коммитов из «долгоиграющиюх» branch'ей — hotfixes, releases и т.д

Контроль merge'a коммитов во всех системах контроля ревизий стоит достаточно остро. Я же расскажу, как мы последние несколько лет решаем подобного рода задачи в SVN.

Достаточно давно для контроля (не)перенесенных коммитов из branch'a появилась команда svn mergeinfo с параметром --show-revs eligible/merged (отображать неперенесенные/перенесенные коммиты). К сожалению, результат ее работы выглядел всегда достаточно плачевно.

 svn mergeinfo --show-revs eligible ^/branches/branchX ^/trunk

r31059
r31120
r31130
...

Т.е. просто номера коммитов и за деталями по каждому из них приходилось отдельно «лезть» в svn log (см. пример в конце статьи).

Теперь о главном: в версии Subversion 1.9 к mergeinfo добавили 2 волшебных параметра --log и -v.

Включение первого (--log) добавляет краткую историю по коммиту (кто, когда и commit message. Что такое «1 line» мне не ведомо, но очень похоже на bug).

 svn mergeinfo --show-revs eligible --log ^/branches/branchX ^/trunk

------------------------------------------------------------------------
r31059 | login | 2016-09-02 12:57:36 +0300 (Fri, 02 Sep 2016) | 1 line

Test 1
------------------------------------------------------------------------
r31120 | login | 2016-09-23 13:45:37 +0300 (Fri, 23 Sep 2016) | 1 line

Test 2,  Commit X
------------------------------------------------------------------------
r31130 | login | 2016-09-23 18:21:19 +0300 (Fri, 23 Sep 2016) | 1 line

Test3
------------------------------------------------------------------------

А вот с обоими получаем полную красоту (включить -v без --log — нельзя):

 svn mergeinfo --show-revs eligible --log -v ^/branches/branchX ^/trunk

------------------------------------------------------------------------
r31059 | login | 2016-09-02 12:57:36 +0300 (Fri, 02 Sep 2016) | 1 line
Changed paths:
   M /branches/branchX/addon_folder/addons/basis/texts/en.xml
   M /branches/branchX/addon_folder/addons/basis/texts/ru.xml
...
Test 1
------------------------------------------------------------------------
r31120 | login | 2016-09-23 13:45:37 +0300 (Fri, 23 Sep 2016) | 1 line
Changed paths:
   M /branches/branchX/addon_folder/addons/basis/texts/en.xml
   M /branches/branchX/addon_folder/addons/basis/texts/ru.xml
...
   A /branches/branchX/src/com/project/ui/Panel.java

Test 2,  Commit X
------------------------------------------------------------------------
r31130 | login | 2016-09-23 18:21:19 +0300 (Fri, 23 Sep 2016) | 1 line
Changed paths:
   M /branches/branchX/src/com/project/ui/Panel.java

Test3
------------------------------------------------------------------------

Стоит отметить, что достаточно несложно перенаправить результат «svn mergeinfo» на вход «svn log», но при этом ваш скрипт будет отрабатывать сильно дольше, чем с новыми опциями и результат вывода может быть несколько длиннее.

Часть подобного скрипта на bash'e:

...

rev=$(svn mergeinfo --show-revs eligible $from $to | while read a; do echo "-$a"; done | tr "\\n" " ")
if [ ! -z "$rev" ]; then
        echo "$from -> $to"
        svn log $from $rev -v -g
        echo
fi

Спасибо за внимание!
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.