Base ClearCase- предотвращение слияния из определенной ветки
Может ли кто-нибудь помочь мне разобраться с этим правильно и наилучшим образом? У меня есть две активные ветви разработки, в которых изменяется одна и та же база кода, и одна ветвь интеграции в базовой среде Clearcase. Но я хотел предотвратить продвижение кода из ветви 2 в ветку интеграции и разрешить объединение только из ветви 1 в ветку интеграции. Пожалуйста, порекомендуйте.
2 ответа
Поскольку это звучит как использование Base ClearCase, вы можете использовать preop 'checkin' триггер. Сценарий, выполняемый триггером, будет проверять наличие в проверенной версии, подлежащей регистрации, входящих гиперссылок слияния. Если это так, сценарий может проверить, что конец гиперссылки "from" идет из branch1, и выйти со статусом 0, если это так. Если это происходит из любой другой ветви, сценарий напечатает описательное сообщение об ошибке и завершит работу с ненулевым статусом (таким образом, предотвращая регистрацию).
При создании типа триггера вы можете ограничить область действия триггера веткой интеграции (которую я назову my_int_branch в приведенном ниже примере), которая помогает повысить производительность. Командная строка может выглядеть примерно так:
% cleartool mktrtype -element -all -preop checkin -brtype my_int_branch -exec path_to_allow_branch1_merge_script allow_branch1_merge
В этом скрипте вы можете получить гиперссылку (и) Merge, прикрепленную к извлеченной версии, например:
cleartool describe -fmt '%[hlink:Merge]p\n' $CLEARCASE_PN
Если есть какие-либо входящие гиперссылки слияния, вы получите одну строку на гиперссылку, которая выглядит примерно так:
"Merge@2877@/vobs/myvob" <- "/vobs/myvob/mydir/file.c@@/main/branch1/3"
Затем сценарий просто должен проверить, что внешняя ветвь версии "from" - это "branch1".
Если есть разные пользователи, доставляющие из потоков разработки в потоки интеграции, вы можете (используя cleartool lock -nusers ... stream:aStream@\vobs\apvob
):
- замок
devstream1
для всех, кромеdev1
(таким образом, вы уверены,dev1
может работать только наdevstream1
), - замок
devstream2
для всех, кромеdev2
(таким образом, вы уверены,dev2
может работать только наdevstream2
), - замок
intstream
для всех, кроме вас иdev1
(только такdev1
может доставитьintstream
)
Что если я или dev1 ошибочно продвинули код из devstream2 в intstream
Тогда вам понадобится преоп deliver_start
триггер (с mktrtype
).
Этот триггер будет управлять OID потоков в триггере, так как они неизменны: cleartool describe -fmt %On <stream-name>
Если один из них является тем для devstream2
триггер завершит работу по ошибке, отказав в доставке.