CVS の pre-commit フックでコミット メッセージを使用することは可能ですか? CVS サーバーはリモートで実行されており、私は を使用してアクセスしていpserver
ます。
理想的には、ファイルがフィルターを通過した場合、またはコミット メッセージに特定のテキストが含まれている場合に、コミットを許可したいと考えています。
別のバージョン管理システムを使用する選択肢はありません。
CVS の pre-commit フックでコミット メッセージを使用することは可能ですか? 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 は必須でも必須でもなく、次のような (ばかげた) 例を簡単に書くことができます。
# these files will be automatically checked out for you
acceptable
# 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
て、答えをかなり簡単にすることができます。
CVS::Trigger Perl モジュールには、異なるトリガーの呼び出し間で値をキャッシュできる実験的な機能があるようです。このページでは、ファイル名を commitinfo から verifymsg に渡すことについて明示的に言及しているため、目的を達成するのに役立つ可能性があります。
verifymsg
ディレクトリ内のファイルを使用できますCVSROOT
。チェックインコメントの内容を確認できるスクリプトを呼び出すように構成できます。ゼロ以外を返すことで、コミットを拒否できます。
デフォルトのverifymsgファイルには詳細が含まれています。
私は同じ問題を扱ってきました。これまでのところ、私の最善の解決策は、親プロセス ID (getppid()) を取得し、commitinfo からファイルのリストを入れることができる一時ファイルで使用することでした。この親 ID は、verifymsg プロセスと同じようです (少なくとも AIX 上では)。幸運を。