SVN mergeinfo: контроль переноса коммитов из «долгоиграющиюх» branch'ей — hotfixes, releases и т.д
Ожидает приглашения
Контроль merge'a коммитов во всех системах контроля ревизий стоит достаточно остро. Я же расскажу, как мы последние несколько лет решаем подобного рода задачи в SVN.
Достаточно давно для контроля (не)перенесенных коммитов из branch'a появилась команда svn mergeinfo с параметром
Т.е. просто номера коммитов и за деталями по каждому из них приходилось отдельно «лезть» в svn log (см. пример в конце статьи).
Теперь о главном: в версии Subversion 1.9 к mergeinfo добавили 2 волшебных параметра
Включение первого (Что такое «1 line» мне не ведомо, но очень похоже на bug).
А вот с обоими получаем полную красоту (включить
Стоит отметить, что достаточно несложно перенаправить результат «svn mergeinfo» на вход «svn log», но при этом ваш скрипт будет отрабатывать сильно дольше, чем с новыми опциями и результат вывода может быть несколько длиннее.
Часть подобного скрипта на bash'e:
Спасибо за внимание!
Достаточно давно для контроля (не)перенесенных коммитов из 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. 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
Спасибо за внимание!