2014-11-04 2 views
1

Мой триггер работает хорошо, как только я не использую clearfsimport. В частном случае clearfsimport. ci trigger не может найти файл.Сбой запуска после операции с clearfsimport

Вот как я построить имя файла в моем триггере:

my $filename = ($ENV{'LOGNAME'} ? $ENV{'CLEARCASE_ROOT'} : '') . $ENV{'CLEARCASE_PN'}; 

Для обоих случаях (cleartool ХИ и clearfsimport, имя файла является локальный путь к файлу, т.е. L:\VobName\Path\file.txt

Я надеваю. «знаю две вещи:

  • Как триггер может открыть файл, если я дам ей? локальный путь", которые не могут быть решены на стороне сервера
  • Почему он до сих пор работает с cleartool ci, но не с clearfsimport

EDIT

На самом деле, кажется, что соответствующие файлы удаляются каким-либо программы или сценария перед вызовом триггера CI. После выполнения clearfsimport соответствующие файлы возвращаются туда. Это приводит к тому, что триггер не может открыть файл, потому что он отсутствует. Означает ли это, что триггеры CI не могут работать с clearfsimport?

ответ

0

clearfsimport (which I use here для импорта файлов), может работать по-другому, что классический ци.

  • Checkin означает: файл здесь, проверил, и проверяется в
  • clearfsimport означает: файл еще не здесь, он добавил (объявленный в родительской папке), и непосредственно проверяется -in (doc говорит «читает указанные объекты исходной файловой системы и помещает их в целевой VOB»), затем обновляется родительская папка.
    Таким образом, регистрация может происходить непосредственно в vob и не полагаться на фактическое имя пути (CLEARCASE_PN).

Может быть, вы могли бы попробовать $ENV{'CLEARCASE_XPN'} (The extended pathname), чтобы увидеть, если вы можете получить доступ к файлу, что путь (за исключением может потребоваться динамическое представление для доступа к содержимому, на который ссылается протяженного имя пути).

+0

К сожалению, он не работает ни с '$ ENV {'CLEARCASE_XPN'}'. 'clearfsimport' каким-то образом удаляет файл до вызова триггера. Я вижу это, если я вывожу в 'STDERR' содержимое моей заинтересованной папки во время выполнения триггера. – nowox

+0

@coin вы используете моментальный снимок или динамический вид? – VonC

+0

Я использую оба, как вы мне советовали раньше. Представление моментального снимка как рабочий каталог и динамическое представление для перемещения файлов с помощью clearfsimport. Таким образом clearfsimport работает с динамическим представлением. – nowox

1

Clearfsimport работает более или менее как команда «cleartool checkin -from».

Итак, в результате вам необходимо использовать переменную среды CLEARCASE_CI_FPN.

Что-то вроде этого теста (с помощью Perl) должен работать:

$ccpn = $ENV{"CLEARCASE_PN"}; if (!(-e $ccpn)) { $ccpn = $ENV{"CLEARCASE_CI_FPN"}; if (!(-e $ccpn)) { printf("Cannot locate File being checked in!\n"); exit 1; } } open(INFILE,"< $ccpn");

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

+0

+1. Я не знал о 'CLEARCASE_CI_FPN' – VonC

+0

К сожалению,' CLEARCASE_CI_FPN' действует до сравнения с репозиторием-получателем. Если я изменю файл, как обычно, с обычным триггером, я получу новую версию на ClearCase. – nowox

+0

Я немного смущен этим. Если вы изменяете файл в триггере, то вы почти гарантированно получите «новую версию» на checkin. Что вы пытаетесь сделать в теле триггера? –

Смежные вопросы