2013-07-11 50 views
2

在一個動態的「默認視圖」當我發出以下命令上下文:格式化ClearCase的cleartool找到輸出

$ cd Dir_A/Dir_B

$ ct find . -all -nvi -type f -ele 'brtype(my_branch)' -print

對於每一行我得到了奇怪的輸出,看起來像這樣:

/vobs/vob_name/Dir_A/[email protected]@/main/Branch_A/Branch_B/n1/Dir_C/main/Branch_C/n2/Dir_D/main/Branch_D/n3/[email protected]@ 

如何獲取find命令以簡單地打印標準操作系統路徑名,而不是所有的inte每個目錄的最新版本信息?

我試過-exec 'ct des -fmt'無濟於事。

回答

2

這種奇怪的格式被稱爲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 rpmusr/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); 
} 
+0

第一個命令返回與連接到中間目錄的版本信息相同的擴展路徑。第二個命令返回文件名,沒有路徑。我只需要每個元素的操作系統路徑名。我不明白爲什麼這麼難。 – ThomasMcLeod

+0

@ThomasMcLeod它很「難」,因爲find -all將查看所有vob的所有歷史記錄,這意味着結果將不可見/可從視圖中訪問(因此,擴展路徑名實際上可從任何動態視圖)。 「可訪問」意味着如果您執行「type \ simple \ path \ result」,它將返回「未找到」。這些結果在視圖中不可見。我編輯了答案以添加更多信息。 – VonC

+0

感謝您的詳細解答。 – ThomasMcLeod