這種奇怪的格式被稱爲extended path name。
作爲explained here,就像一個結果:
\proj_vob\[email protected]@\main\bugfix\4
實際上被稱爲版本擴展路徑名。
你的情況:
/vobs/vob_name/Dir_A/[email protected]@/main/Branch_A/Dir_C/[...]/n3/[email protected]@
是VOB擴展路徑名。
它引用在視圖中不再可見的元素(文件或目錄)(因爲它們已被rmnamed刪除)。
您可以使用其版本ID來訪問元素的任何版本,該版本ID指定其確切的版本樹位置。
即允許訪問哪些不是在要在其中執行cleartool find
(因爲a view is a requirement for a find)(通過視圖的配置規範選擇即)的視圖中可見的版本。
嘗試也-nxname
選項:
ct find . -all -nvi -nxname -type f -ele "brtype(my_branch)" -print
(但會刪除只有最後@@
)
fmt_ccase有某種方式來格式化,但你也可以試試(如in here):
-exec "echo %CLEARCASE_PN%"
(這是不行的,因爲沒有「路徑名」可找到的版本:視圖不直接選擇它,這樣的版本是不可見的,並且%CLEARCASE_PN%
設置爲%CLEARCASE_XPN%
,該擴展路徑名稱)。
檢查亦是葉名返回:
-exec "cleartool descr -fmt \"%Ln\" \"%CLEARCASE_XPN%\""
但是,只返回文件名,而不是它的路徑。
如果你需要一個簡單的路徑(這將不會代表「實際」路徑,因爲這些元素是不是所有的視圖中可見),你將需要處理的每一行,以消除/main/.../n1
,只留下Dir_C\dir_D\element
。
這裏是一個庫,是想做到這一點:ClearCase-Tools
$explicitPath = '/vobTag/users/[email protected]@/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
你可以找到sources in those 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);
}
第一個命令返回與連接到中間目錄的版本信息相同的擴展路徑。第二個命令返回文件名,沒有路徑。我只需要每個元素的操作系統路徑名。我不明白爲什麼這麼難。 – ThomasMcLeod
@ThomasMcLeod它很「難」,因爲find -all將查看所有vob的所有歷史記錄,這意味着結果將不可見/可從視圖中訪問(因此,擴展路徑名實際上可從任何動態視圖)。 「可訪問」意味着如果您執行「type \ simple \ path \ result」,它將返回「未找到」。這些結果在視圖中不可見。我編輯了答案以添加更多信息。 – VonC
感謝您的詳細解答。 – ThomasMcLeod