Как написать триггер ClearCase, который запускает пакетный скрипт?

Я очень удивляюсь, когда речь идет о триггерах ClearCase, но я очень привык работать с ClearCase.

Я хотел бы написать триггер, который будет срабатывать, когда пользователь проверяет файл и запускает пакетный скрипт, который находится на сервере ClearCase. Я предполагаю, что триггер каким-то образом предоставит мне идентификатор используемой активности и поток как параметры, поэтому мне нужно научиться их использовать.

Где я могу найти учебник? Я нашел некоторую документацию, но мне это действительно не помогает. Мне нужно пошаговое руководство как для программирования (с примерами кода), так и для его настройки.

Спасибо!

Андрей

1
nl ja de

2 ответы

Это триггер postop checkin, и вы можете увидеть некоторые из них в IBM Rational ClearCase: десять лучших триггеров ":

cleartool mktrtype -c "Trigger to check the checkin" -element -all -postop checkin -execwin "ccperl \\server\triggers\check_checkin.bat" -execunix "Perl /net/server/triggers/check_checkin.pl" CHECK_CHECKIN

Вы можете увидеть все переменные среды, которые вы можете использовать в скрипте, запущенном триггером на странице « mktrtype ".
Оно включает:

  • CLEARCASE_ACTIVITY: The UCM activity, if applicable, involved in the operation that caused the trigger to fire.
    For checkin, checkout, and uncheckout operations, the activity that is set in the view used for the operation.
  • CLEARCASE_STREAM: The UCM stream containing the object involved in the action that caused the trigger to fire, if applicable.

Примечание: OP Andrew упоминает , что:

CLEARCASE_STREAM EV действителен только для операций deliver , rebase и mkbl ; mkactivity , chactivity , rmactivity , setactivity , mkstream , chstream , rmstream , chbl и rmbl .
  С помощью операции checkin он возвращает NULL .

В этом случае вы можете использовать EVE CLEARCASE_VIEW_TAG , чтобы получить имя потока:

 # Windows Syntax
cleartool lsstream -view %CLEARCASE_VIEW_TAG%
 # Unix Syntax
cleartool lsstream -view $CLEARCASE_VIEW_TAG
2
добавлено
@Andrew Подождите, вы используете CCRC? cleartool mktrtype доступен только при полной установке ClearCase. Идея сервера \\ заключается в следующем: сценарий может быть где угодно, если это путь, доступный с сервера ClearCase. Сценарий будет выполняться на сервере ClearCase, даже если он может находиться в другом месте. Если вы сами выполняете ccperl, у вас не будет переменных среды, о которых я упоминал, правильно настроенных.
добавлено автор VonC, источник
@Andrew, поэтому вы должны определить свой триггер на сервере ClearCase. Agan, этот сценарий можно хранить в любом месте, пока сервер может получить к нему доступ. Он будет выполнен на сервере.
добавлено автор VonC, источник
@Andrew вы можете вывести pvob, добавив параметр -l в команду lsstream : cleartool lsstream -l -view view-tag : Это однако потребуется grep.
добавлено автор VonC, источник
Вы можете запустить команду в любом месте, но вам нужно использовать pvob, как для потока, так и имя vob (не pvob) для имени вашего триггера.
добавлено автор VonC, источник
@Andrew см. Мой предыдущий комментарий. Примеры из 10 лучших сценариев не упоминают vob после имени триггера, потому что они выполняют команду непосредственно в vob в представлении.
добавлено автор VonC, источник
@Andrew, если у вас есть имя представления, вы можете сделать cleartool lsstream-view view-tag : он даст вам имя потока. Я отредактировал ответ, чтобы сделать его более заметным.
добавлено автор VonC, источник
@Andrew да, вы можете прикрепить его к vob: vob: \ yourvob
добавлено автор VonC, источник
@Andrew вы можете попробовать указать полное имя этого потока, используя форму-селектор объекта: stream: streamname @ \ avob. Обратите внимание, что \ vob - это нотация Windows.
добавлено автор VonC, источник
@Andrew Я пропустил параметр -ucm! Только тип триггера UCM будет принимать параметр ограничения диапазона, например -stream.
добавлено автор VonC, источник
@Andrew Я не видел этого ограничения при просмотре publib.boulder.ibm.com/infocenter/cchelp/v7r0m0/… . Но если это так, я бы рекомендовал упростить, применить его ко всем элементам (а не только к потоку) и использовать переменную среды CLEARCASE_STREAM , чтобы решить, должен ли сценарий принимать/отклонять действие , или просто принять, потому что элемент зарегистрирован в другом потоке, чем тот, который ожидался.
добавлено автор VonC, источник
Большое спасибо. Я выбрал подход lsactivity , так как его легче читать.
добавлено автор Andrew, источник
спасибо за ссылки, я посмотрю. Насколько я понимаю, триггер срабатывает на ПК, который выполняет проверку через CCRC, а не на сервере ClearCase, поэтому вам нужно поместить путь \\ server к триггеру. Это верно? Кроме того, если у меня есть "ccperl \\ server \ triggers \ check_checkin.bat" , это будет непосредственно запускать пакетный файл? Во всех примерах на сайте, который вы отправили, хотя есть указанный .bat, всегда есть perl-скрипт.
добавлено автор Andrew, источник
Это полезная команда, спасибо. lsstream -s даст только поток. Вы знаете, можете ли вы добавить @ \ в конце этого как-то? Как в стороне, почему все эти команды дают вам почти именно то, что вам нужно? :)
добавлено автор Andrew, источник
У меня тоже была эта идея, но, увы, CLEARCASE_STREAM EV действителен только для Все операции доставки, rebase и mkbl; mkactivity, chactivity, rmactivity, setactivity, mkstream, chstream, rmstream, chbl и rmbl . С помощью операции checkin он возвращает NULL . В настоящее время я изучаю команду lsactivity , чтобы увидеть поток, к которому привязана активность. Таким образом, триггер может применяться ко всем, но затем фильтруется в поток.
добавлено автор Andrew, источник
Насколько я понимаю, типы триггеров UCM не позволяют использовать аргумент -postop checkin . Когда я использую селектор stream: , я получаю Ошибка: Неожиданный тип селектора объектов: . В этом случае, как я могу использовать -ucmobject , но все еще использовать его для проверки?
добавлено автор Andrew, источник
Я сделал cleartool mktrtype -element -all -postop checkin -execwin "\\ server \ folder \ trigger.bat" -stream <поток> @ \ TRIGGERTEST @ \ , но Я получаю ошибку Ошибка: объект находится в неожиданном VOB: «<поток> @ \ » . Я выполнил команду как из любого места, так и из динамического представления, указывающего на поток, который я хочу создать. Не повезло. Есть ли у вас какие-либо предложения? Если я не укажу поток, триггер будет применен ко всему vob, но я хочу ограничить его конкретным потоком.
добавлено автор Andrew, источник
после mktrtype мне нужно связать его с помощью mktrigger, например, описанного здесь ?
Я пытаюсь сделать очень простой триггерный тест, который назначает триггер для потока cleartool mktrtype -element -postop checkin -execwin "\\ server \ folder \ test.bat" -stream @ \ -nc TRIGGERTEST , но я получаю ошибку Ошибка: объект находится в неожиданном VOB: «<поток> @ \ ». Я запускал команду изнутри моего представления. Где я должен запускать команду?
добавлено автор Andrew, источник
хорошо спасибо, я посмотрю
добавлено автор Andrew, источник
идея состоит в том, чтобы запустить триггер на сервере, как только пользователь выполнит проверку через CCRC. Я хочу, чтобы он запускал командный файл, который принимает переменные среды в качестве параметров.
добавлено автор Andrew, источник
0
добавлено