コマンドラインで CVS 更新を実行するときに、CVS の競合の概要を取得するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/122301

質問

を実行した後に競合の概要を取得する簡単な方法はありますか? 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」付き

それが役立つことを願っています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top