6

ClearCase で特定のラベルが付いているが、他のラベルが設定されていないファイルを見つけたいです。

たとえば、次のようにラベル付けされたファイルがあるとします。

file1 LBL_A, LBL_B
file2 LBL_A

file1 ではなく file2 のみを取得するクエリが必要です。

cleartool find でこれを行う方法はありますか? 単一のクエリでこれを行うことができない場合は、いくつかの手順でこれを行う方法のアイデアも喜んで提供します (perl スクリプトから cleartool を呼び出すので、ファイルのリストを簡単に保存できます)一時的にそれらに対してさらにコマンドを実行します)。

よろしくお願いします!

1月

4

3 に答える 3

7

LBL_A が実行したい (唯一の) ラベルであると仮定します

cleartool find /some/dir -version 'lbtype(LBL_A)' -print | xargs cleartool describe -fmt "%n: %l"

与えるべき

file1: (LBL_A, LBL_B)
file2: (LBL_A)

出力として、perl スクリプトをチェックインするか、フィルター処理することができますsed -n 's/\(.*\): (LBL_A)/\1/p'(ファイル名にコロンがないことを前提としています)。

更新: VonC が正しく指摘しているように、上記のコマンドは、スペースが含まれるファイルに対しては失敗します。それを処理するには、次のように実行します。

cleartool find ... -print | tr '\012' '\000' | xargs -0 cleartool ....

改行を ascii null に変換し、xargs でそれを区切り文字として使用します。

于 2009-06-24T11:40:23.740 に答える
6

パイプを使わずに直接これを行うことができます:

cleartool find . -ver "lbtype(LBL_A) && !lbtype(LBL_B)" -print
于 2009-09-05T23:48:29.240 に答える
2

hlovdalの答えは、この場合、必要以上の要素を見つけて、それらをフィルタリングする必要があることを示しています(すべてのClearCase検索機能にもかかわらず)。

ノート:

 cleartool find . -type f -element 'lbtype_sub(LBL_A)' -print

要素を直接与えることができます(この場合は面白くないかもしれないバージョンではありません)。-version以下に説明するように、バージョンとフォーマットディレクティブを見つけることができます。

fmt_ccaseの助けを借りて、perlスクリプトが実行する必要があるものを正確に取得するように出力を調整できます。

 cleartool find . -type f -element 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%En %Cl\n" \"$CLEARCASE_XPN\"' | grep -v ","
  • -fmt "%En %l\n"要素のフルパスを表示します(バージョンの代わりに:/ a / b / myFile @@ / main / myVersion)=> /a/b/myFile'. the '\n`行ごとに1つの結果を確認します。
  • -versionバージョンを-fmt "%n %l\n"表示します
  • \"$CLEARCASE_XPN\":見つかったバージョンの拡張パスを二重引用符で囲み、名前にスペースが含まれるファイルが引き続き機能することを確認します。
  • grep -v ",":カンマがある場合、それは「複数のラベル」を意味します
  • %Cl:ラベルのすべてのリストを表示しないでください。とにかく、複数ある場合は興味がありません!

だから、正確なバージョンを見つけるために:

 cleartool find . -type f -version 'lbtype_sub(LBL_A)' -exec 'cleartool describe -fmt "%n %Cl\n" \"$CLEARCASE_XPN\"' | grep -v ","|awk '{sub(/ \(.*/,"");print}'

注:
上記はUNIX構文で機能します。Windowsの構文は次のようになります。

cleartool find . -type f -element "lbtype(LBL_A)" -exec "cleartool describe -fmt \"%n %Cl\n\" \"%CLEARCASE_XPN%\"" | grep -v "," | gawk "{gsub(/ \(.*,"");print}"

、1つの(正しい)ラベルのみを持つファイルのバージョンを一覧表示します。

  • awk '{sub(/ \(.*/,"");print}'myFile@@/main/myVersion (LBL_A)「 」を「myFile@@/ main/myVersion」に変換します
于 2009-06-24T12:29:46.670 に答える