2014-11-04 39 views
1

只要我不使用clearfsimport,我的ci触发器就会正常工作。在clearfsimport的特例中。 ci触发器找不到该文件。Post-op签入触发器失败,并且clearfsimport

这是我建立在我的触发文件名的方式:

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一起使用?

回答

0

clearfsimportwhich I use here导入文件),可能工作不同,经典ci。

  • 一签的意思是:该文件是在这里,签出,并在
  • 一个clearfsimport检查是指:该文件还没有实现,他加入(在父文件夹申报),并直接检查-in(文档称“读取指定的文件系统源对象并将它们放入目标VOB中”),然后更新父文件夹。
    因此,检入可能直接发生在vob中,而不依赖于实际路径名(CLEARCASE_PN)。

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

+0

不幸的是,它不能用'$ ENV {'CLEARCASE_XPN'}'工作。 'clearfsimport'以某种方式在触发器被调用之前移除文件。我可以看到它,如果我在触发器执行期间向STDERR输出了我关心的文件夹的内容。 – nowox 2014-11-04 09:52:41

+0

@coin您使用的是快照还是动态视图? – VonC 2014-11-04 10:04:43

+0

我正在使用,因为你以前建议我。作为工作目录的快照视图和用clearfsimport推送文件的动态视图。所以clearfsimport在动态视图上运行。 – nowox 2014-11-04 10:10:43

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 2014-11-06 15:57:47

+0

不幸的是,'CLEARCASE_CI_FPN'在与目标资源库进行比较之前采取行动。如果我按照常规触发器修改文件,我将在ClearCase上获得新版本。 – nowox 2014-11-12 08:39:07

+0

我有点困惑。如果您在触发器中修改文件,那么您几乎可以保证在签入时获得“新版本”。无论如何,你想在触发器的身体上做什么? – 2014-11-12 19:46:14