CVSにコミットメッセージを使用してフックを事前にコミット
-
13-09-2019 - |
質問
これはCVSで事前にコミットフックでコミットメッセージを使用することは可能ですか? CVSサーバをリモートで実行されている、と私はpserver
を使用してアクセスます。
理想的には、私はファイルがフィルタを通過した場合にコミットできるようにしたいのまたはのコミットメッセージは、特定のテキストが含まれています。
私は他のバージョン管理システムを使用するための選択肢を持っていません。
解決
ここで続きを読むにはいくつかの有用なチュートリアルがあります:
のhttp:/ /durak.org/sean/pubs/software/cvsbook/The-commitinfo-And-loginfo-And-rcsinfo-Files.html の
http://durak.org/sean/pubs/software/cvsbook/The-verifymsg-And-rcsinfo-Files.html#The-verifymsg-And-rcsinfo-Filesする
<ストライキ>あなたはあなただけの1フックでやりたいことはできませんが、あなたは2つのフックを使用することができ、ストライキ> commitinfo
は、あなたが自分自身とverifymsg
は、あなたがメッセージを確認できるようになるファイルを検証できるようになります。どちらも、(プログラムは単にステータス1で終了する必要がある)コミットキャンセルするために使用することができます。場合あなたが知らなかった、checkoutlist
、commitinfo
と「verifymsgは」すべてのリポジトリのCVSROOTディレクトリにあります。私はあなたにもそのディレクトリ内のフックとして書くの任意のスクリプトを置くことをお勧めしていますが、完全なパスを指定するにつれ、それは本当に問題ではありません。私は、いくつかの(愚かな)の例を記述するためにも、Perlは単純な、必要か必要ではありません。
checkoutlistに
# these files will be automatically checked out for you
acceptable
verifymsg
# specifies which file to run as hook, %l is filename of log message
# bar$ /path/to/repo/CVSROOT/verify_ends_in_bar %l
DEFAULT /path/to/repo/CVSROOT/acceptable %l %s
許容
#/usr/bin/perl -w
use strict;
use warnings;
# this would be simpler if cvs passed sane arguments
my ($logfile, $dir, @files) = @ARGV;
my $grep = `grep -i 'accept liability' $logfile`;
exit 0 if $grep;
my $found = 0;
foreach my $file (@files) {
my $path = join '/', $dir, $file;
die "Can't find file $path" if ! -e $path;
my $grep = `grep -i 'evidence of any deliberation' $path`;
$found++ if $grep;
}
die "You must accept liability or show evidence of deliberation" if $found < @files;
警告の買い手:私はので、私はそれが動作を保証することはできませんが、それはあなたが少なくとも近づく必要があります。このオフなしテストと私の頭の上のほとんどを書いた。
。 を編集し、再びを、私はちょうど私が最初に間違っていたとあなたは答えかなり単純を作るverifymsg
するログファイルとコミットしたファイル名の両方を渡すことができることを実現します。
他のヒント
あなたはverifymsg
ディレクトリにCVSROOT
ファイルを使用することができます。あなたは、チェックインコメントの内容を確認することができ、スクリプトを呼び出すために、それを構成することができます。あなたは、ゼロ以外を返すことによってコミットを拒否することができます。
デフォルトのverifymsgファイルには、より多くの詳細が含まれています。
私は同じ問題を扱ってきました。これまでのところ、私の最善の解決策は、(getppid())親プロセスIDを取得し、それ私がcommitinfoからにファイルのリストを置くことができINA一時ファイルを使用することでした。この親IDは(少なくとも、AIX上)verifymsgプロセスで同じであるように思われます。 幸運ます。