操作后检查触发器因clearfsimport而失败

时间:2014-11-04 08:47:38

标签: clearcase

一旦我不使用clearfsimport,我的ci触发器就能正常工作。在clearfsimport的特例中。 ci触发器找不到该文件。

以下是我在触发器中构建文件名的方式:

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

对于这两种情况(cleartool ci和clearfsimport,文件名是文件的本地路径,即L:\VobName\Path\file.txt

我不知道两件事:

  • 如果我给它一个无法在服务器端解析的“本地路径”,触发器如何打开文件?
  • 为什么它仍适用于cleartool ci但不适用于clearfsimport

修改

实际上,在调用CI触发器之前,某些程序或脚本似乎删除了相关文件。执行clearfsimport后,相关文件又回来了。这导致触发器无法打开文件,因为它丢失了。是否意味着CI触发器无法与clearfsimport一起使用?

2 个答案:

答案 0 :(得分:1)

clearfsimportwhich I use here导入文件)可能与经典ci的工作方式不同。

  • 签入意味着:文件在此处,签出并在
  • 中签入
  • clearfsimport意味着:文件还没有在这里,他被添加(在父文件夹中声明),并直接签入(文档说“读取指定的文件系统源对象并将它们放在目标VOB中” ),然后更新父文件夹 因此,签入可能直接发生在vob中,而不依赖于实际路径名(CLEARCASE_PN)。

也许您可以尝试$ENV{'CLEARCASE_XPN'}extended pathname),看看您是否可以通过该方式访问该文件(除非您可能需要动态视图来访问扩展路径名引用的内容)。

答案 1 :(得分: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存储库中。