为啥 Perl 在 ClearCase 中找不到我的文件?
Posted
技术标签:
【中文标题】为啥 Perl 在 ClearCase 中找不到我的文件?【英文标题】:Why can't Perl find my file that is in ClearCase?为什么 Perl 在 ClearCase 中找不到我的文件? 【发布时间】:2010-11-02 12:18:06 【问题描述】:这段 Perl 告诉我 ClearCase 中的文件不存在时;
$x = "PATH/TO/FILE"
if (-e $x)
print "This file exists on the file system";
else
print "I can't see this file";
有人见过吗?
某些文件可以正常返回。把我难住了。
Clearcase 视图是动态的,托管在 unix 上。
当它们位于同一视图的同一文件夹中时,这段代码返回一个文件存在而另一个文件不存在。
【问题讨论】:
$x 中有什么,它与 ClearQuest 有什么关系?您是否尝试使用 -f 进行测试? $x是ClearQuest中文件名的字符串 -f有同样的问题 你可以尝试添加行打印ls $x
;上面的测试并运行它,看看它做了什么?
是的,但是 $x 中有什么? $x 存储在哪里?我不确定 Perl 的 -X 运算符应该如何应用于可能位于某些应用程序私有存储中的文件?
ClearQuest 是一个问题跟踪程序。你是说 ClearCase 吗?
【参考方案1】:
Clearcase 将其“文件”存储为目录
Aric is trying to tell you 是 ClearCase 使用扩展路径名,“扩展”是因为它使用版本路径扩展了文件名。
因此,在动态视图中,可以描述任何文件以显示其版本控制路径:
$ ct ls
myFile
$ ct descr -l myFile
myFile@@/main/3
在动态视图中,您实际上可以探索文件的版本(因此是“文件作为目录”)部分
$ cd myFile@@
$ ls
main
$ cd main
$ ls
3
$ cat 3
... // content of third version of myFile
现在,如果在这里使用 ClearQuest(问题跟踪系统),它将引用 ClearCase 的活动(文件集的更改集)。
但是使用 ClearCase,文件的一个版本(由 ClearQuest 引用或通过其他方式获得)可以很好地在动态视图中被删除(实际上是“rmnamed”)。 这意味着文件可能被 ClearQuest 或某些 ClearCase 活动引用,但在动态视图中不能直接通过 ClearCase 可见。 但是,它的扩展路径名仍然可以在同一个动态视图中访问。
【讨论】:
另外,目录是版本化的;该文件可能不存在于所选(通过视图的配置规范)版本的目录中。在一般情况下,您可能还需要在中间目录上使用扩展路径语法。例如/foo/bar@@/main/1/baz.txt@@/main/3
【参考方案2】:
Clearcase 将其“文件”存储为目录。您可以 cd 进入一个文件并进入它用于存储文件所有修订的实际目录;虽然 OS 挂钩通常可以工作,但这可能会导致 Perl 无法识别某些文件。
【讨论】:
我从未使用过 ClearCase,但是否有某种 API 可以检查文件是否存在、查询其版本等? @Sinan Unur:clearcase 使用虚拟文件系统;您应该能够像对待普通人一样对待它,但有时会发生故障。以上是关于为啥 Perl 在 ClearCase 中找不到我的文件?的主要内容,如果未能解决你的问题,请参考以下文章