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 триггер завершит работу по ошибке, отказав в доставке.

Другие вопросы по тегам