这种奇怪的格式称为扩展路径名。
如此处所述,结果如下:
\proj_vob\foo.c@@\main\bugfix\4
实际上称为版本扩展路径名。
在你的情况下:
/vobs/vob_name/Dir_A/Dir_B@@/main/Branch_A/Dir_C/[...]/n3/Filename@@
是一个vob 扩展路径名。
它引用在视图中不再可见的元素(文件或目录)(因为它们已被 rmnamed 删除)。
您可以使用元素的版本 ID 访问任何版本的元素,该版本 ID 指定了其确切的版本树位置。
这允许访问在您正在执行 a 的视图中不可见的版本(即由视图的配置规范选择)cleartool find
(因为视图是 find 的要求)。
也试试这个-nxname
选项:
ct find . -all -nvi -nxname -type f -ele "brtype(my_branch)" -print
(但这只会删除 final @@
)
fmt_ccase有一些方法来格式化它,但你也可以尝试(如在这里):
-exec "echo %CLEARCASE_PN%"
(在这里它不起作用,因为找到的版本没有可用的“路径名”:视图没有直接选择它,因此该版本不可见,并%CLEARCASE_PN%
设置为%CLEARCASE_XPN%
扩展路径名)。
还要检查 Leaf 名称返回的内容:
-exec "cleartool descr -fmt \"%Ln\" \"%CLEARCASE_XPN%\""
但这只会返回文件名,而不是它的路径。
如果您需要一个简单的路径(它不代表“实际”路径,因为这些元素在视图中并非全部可见),您需要处理每一行以便删除/main/.../n1
,只留下Dir_C\dir_D\element
.
这是一个应该这样做的库:ClearCase-Tools
$explicitPath = '/vobTag/users/.@@/main/1/llf/main/12/install/main/1/README/main/2';
$canonPath = ClearCase::Vob::CanonPath->parse( $explicitPath );
$canonPath = $cpathObj->parse( $explicitPath );
在此示例中,其中$canonPath
将包含以下字符串:
/vobTag/users/llf/install/README
您可以在这些 rpm 中找到源代码,在usr/lib/perl5/vendor_perl/5.6.1/ClearCase/Vob/CanonPath.pm
.
实现并非微不足道,但它是可行的:非常小的提取物:
push @branches, "main";
while (@leaves && !(($leaves[0] =~ "^[0-9]+\$") || ($leaves[0] =~ "^CHECKEDOUT\.[0-9]+\$"))) {
$leaf = shift(@leaves);
push @branches, $leaf if defined($leaf);
$self->dpr("dump(3) $leaf") if defined($leaf);
}