質問

これは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で終了する必要がある)コミットキャンセルするために使用することができます。場合あなたが知らなかった、checkoutlistcommitinfoと「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するログファイルとコミットしたファイル名の両方を渡すことができることを実現します。

scroll top