1

私はかなり長い間私を悩ませてきたこの問題を抱えています。次の (よく知られた) スクリプトを参照すると、おそらく最もよく説明されます。

@rem= 'PERL for Windows NT -- ccperl must be in search path 
@echo off 
ccperl %0 %1 %2 %3 %4 %5 %6 %7 %8 %9 
goto endofperl 
@rem '; 

########################################### 
# Begin of Perl section 


$start_dir = $ARGV[0]; 

# 
# Fixed variable 
# 
$S = "\\"; 
$list_file = "c:".$S."list_file"; 
$list_add = "c:".$S."list_add"; 
$choosed = "c:".$S."choosed"; 


sub clean_file 
{ 
$status = system("del $list_file > NUL 2> NUL"); 
$status = system("del $list_add > NUL 2> NUL"); 
$status = system("del $choosed > NUL 2> NUL"); 
} 

# 
# Start of the script... 
# 

printf("add-to-src-control $start_dir...\n"); 

clean_file(); 
$status = system("cleartool ls -view_only -r -s $start_dir > $list_file"); 
open(LIST_ELEMENT,$list_file); 
while ($element=<LIST_ELEMENT>) 
{ 
chop $element; 
# printf " Processing $element "; 
if ($element =~ /CHECKEDOUT/) 
{ 
# printf(" checkedout file \n"); 
} 
else 
{ 
# printf " view private \n"; 
printf " Processing $element ...\n"; 

# 
# For files with spaces... 
# 
if ($element =~ / /) 
{ 
$status = system("cmd /c echo \"$element\" >> $list_add"); 
} 
else 
{ 
$status = system("cmd /c echo $element >> $list_add"); 
} 
} 
} 
close(LIST_ELEMENT); 

if (-e $list_add) 
{ 
$listelement = `type $list_add`; 
$listelement =~ s/\n/,/g; 
$status = `echo $listelement > $list_add`; 

$status = system("clearprompt list -outfile $choosed -dfile $list_add -choices 
-prompt \"Choose element(s) to put over version control : \" -prefer_gui"); 

if ($status != 0) 
{ 
# printf("\n Aborting ...\n"); 
clean_file(); 
exit $status; 
} 

# 
$listtoadd = `type $choosed`; 
$listtoadd =~ s/\n//g; 
printf("\n cleardlg /addtosrc $listtoadd"); 
$status = system("cleardlg /addtosrc $listtoadd"); 

clean_file(); 
exit $status; 
} 
else 
{ 
# printf("\n No files founded...\n"); 
clean_file(); 
exit $status; 
} 

# End of Perl section 

__END__ 
:endofperl

これは、「 ClearCase: The Ten best scripts 」で見つけることができます。
誤解を避けるために、スクリプトは問題なく動作します。手順 (上記の Web サイトで概説) に従って、再帰的なソースへの追加コントロール機能を再現しました。

私が持っている質問(またはむしろ質問)はこれです:

ここで、特定の拡張子(*.asvまたは*.dllなど) を持つファイルをソース管理に追加しないようにするにはどうすればよいでしょうか(より正確には、返される要素のリストに追加されないようにします。以下の 2 番目の質問を参照してください)
(フォルダも同様です。)

行は次のとおりです。

$status = system("cleartool ls -view_only -r -s $start_dir > $list_file");

焦点を当てるものは?

私の 2 番目の質問は、どちらかというと「表面的な」性質のものです。
スクリプトを実行すると生成される入力ボックスは (少なくとも私の場合は) 小さすぎて、ソース管理に追加する要素のパス全体を収容できません。
完全なパスが常に表示されるようにする方法はありますか?
それは修正の問題だろうか

$status = system("clearprompt list -outfile $choosed -dfile $list_add -choices 
-prompt \"Choose element(s) to put over version control : \" -prefer_gui"); 

または私は完全に間違っていますか?今のところ、それがすべてだ。どんな助けでも大歓迎です!

4

1 に答える 1

0

この古いスレッドが示しているように、無視するファイルは ClearCase ビュー内ではなく、ビューの外に置くのが最善です ;)

そうは言っても、 (または、「 ClearCase ローカル ビュー内のどのファイルがまだソース管理に追加されていないかを確認するにはどうすればよいですか?ct lsview -r 」に示されているように、そのコマンドのより精巧なバージョン) を. つまり、パラメータから、無視したいファイルのすべての grep 正規表現を含むファイルのパスを読み取り、ct lsview -r の結果を各 " " に挿入します (次のファイルを除外するため)。その特定のパターンに一致します)grep
grep -v xxx

Windows の場合、GoW (Windows の Gnu) は完全に機能するgrep(ネイティブの win32 バイナリとしてコンパイルされた 130 の他の Unix コマンドと共に) を提供します。

op Mahyarは次のように報告しています。

一部の UNIX アプリ ( 内Gow) が他のローカル ルーチンと競合していたため、 を使用するように切り替える必要がありましたfindstr
だから、本質的に私がやったことはただ使うことです

cleartool ls -view_only -r -s | findstr /vi "\.asv" f > $list_file. 

そうする$list_fileことで、本来あるべき (つまり、 以外のすべての View Private 要素を含む) が生成されますasv-files
さらに、Perl スクリプトに組み込むと、スクリプトは最後までスムーズに実行され、既存のエラーのみが指摘されます。


clearprompt2番目の質問については、 orのサイズを変更する方法がわかりませんcleardlg(一度作成すると、サイズを変更することさえできません)。

于 2012-08-10T08:22:25.877 に答える