コマンドラインで CVS 更新を実行するときに、CVS の競合の概要を取得するにはどうすればよいですか?
-
02-07-2019 - |
質問
を実行した後に競合の概要を取得する簡単な方法はありますか? cvs update
?
私は大規模なプロジェクトに取り組んでおり、いくつかの作業を行った後、更新を行う必要があります。cvs update コマンドから返される変更のリストは数ページにわたるため、cvs update コマンドの出力の最後に繰り返される競合のリスト (「C」で始まる) だけを表示したいと考えています。
このソリューションはコマンド ラインから機能する必要があります。
通常の出力が次の場合:
M src/file1.txt
M src/file2.txt
cvs server: conflicts found ...
C src/file3.txt
M src/file4.txt
M src/file5.txt
新しい出力を次のようにしたいと思います。
M src/file1.txt
M src/file2.txt
cvs server: conflicts found ...
C src/file3.txt
M src/file4.txt
M src/file5.txt
Conflict Summary:
C src/file3.txt
これを、競合の概要が後に続く通常の CVS 出力を発生時に出力する単一のコマンド (おそらく短いスクリプトまたはエイリアス) にしたいと考えています。
解決
仕様を考えると、Martin York のソリューションを少し修正する必要があるようです (これは競合のみを表示し、通常のログ情報は表示しないためです)。次のようなもの - 「cvsupd」と呼ばれる場合があります:
tmp=${TMPDIR:-/tmp}/cvsupd.$$
trap "rm -f $tmp; exit 1" 0 1 2 3 13 15
cvs update "$@" | tee $tmp
if grep -s '^C' $tmp
then
echo
echo Conflict Summary:
grep '^C' $tmp
fi
rm -f $tmp
trap 0
exit 0
トラップ コマンドは、ログ ファイルが残らないようにします。これは通常のシグナル (それぞれ HUP、INT、QUIT、PIPE、TERM) を捕捉し、0 はその他のシェルからの終了をトラップします。
他のヒント
手元に cvs がありません。cvs update の出力の正確な形式は何ですか?
C <ファイル名> を覚えているようです
その場合は、次のように使用できます。
CVSアップデート|ティーログ| grep "^c"
cvs の完全な出力は、別の時点で使用できるようにログに保存されます。次に、すべての行を grep します 始まり 「C」付き
それが役立つことを願っています。
所属していません StackOverflow