以下では、commit メッセージの文字コードをチェックする方法を記す。 RCS ファイルには本体も commit メッセージも両方書き込まれていることから、 この設定と同時にeuc のファイルのみ登録するには の設定もおこなうのを勧める。
ファイルの文字コードを固定するには、 リポジトリ以下の CVSROOT 内を編集する必要がある。 編集のための checkout などの方法については cvs 管理用ディレクトリ CVSROOT の編集 を参照せよ。
ここで行う方法では, Perl スクリプトを用いてコミットするファイルの 文字コード判定を行っている. Perl スクリプトは Jcode モジュール を使用するため, システムに Jcode モジュールがインストールされている 必要がある. Jcode のページを参照し, cvs リポジトリが置いてあるホストに Jcode をインストールすること.
なお, Debian GNU/Linux の場合は下記のコマンドで Jcode モジュールが インストール可能である.
# apt-get install libjcode-pm-perl
フィルタとしてmsgchecker.pl を用いる。このフィルタは引数として文字コード渡すことで、 コミットメッセージをEUC、Shift-JIS、JIS、UTF8のどれかの文字コードに 制限することができる。
#!/usr/bin/perl # # msgchecker.pl by Yasuhiro MORIKAWA, 2006 use Jcode; if ($#ARGV < 1){ die "Usage: msgchecker.pl [ASCII|euc|sjis|jis|utf8] file\n"; } $logcode = $ARGV[0]; # 'ASCII', 'euc', 'sjis', 'jis', 'utf8'. $msg = $ARGV[1]; if (!$logcode){ $logcode = 'ASCII'; } open(MSG, "<$msg") || die "$msg: cannot find log message."; while (<MSG>) { undef $code; ($code, $nmatch) = getcode(\$_); if ($code eq 'binary') { die "log message is $code , Please write log message ASCII.\n" if ($logcode eq 'ASCII'); die "log message is $code , Please write log message ASCII or $logcode .\n"; } elsif ($code eq 'ascii') { next; } elsif ($code eq $logcode) { next; } else { die "log message is $code , Please write log message ASCII.\n" if ($logcode eq 'ASCII'); die "log message is $code , Please write log message ASCII or $logcode .\n"; } } close(MSG); exit 0;
この msgchecker.pl
を add、commit して CVSROOT 以下に加える。
$ cvs add msgchecker.pl $ cvs commit -m "log message code checker." msgchecker.pl
CVSROOT/checkoutlist
に以下の一行を追加する。詳細は
cvs 管理用ディレクトリ CVSROOT の編集 −
checkoutlistを参照のこと。
msgchecker.pl unable to check out / update msgchecker.pl in CVSROOT
編集が終ったら、いつも通り commit する。
$ cvs commit -m "Add msgchecker.pl" checkoutlist
verifymsg
に以下のように記述する。
hoge0 perl $CVSROOT/CVSROOT/msgchecker.pl euc %l DEFAULT perl $CVSROOT/CVSROOT/msgchecker.pl ASCII %l
これにより、hoge0 では Shift-JIS や JIS コードのコミットメッセージは
拒否される。またそれ以外のプロジェクトでは ASCII 以外のコミットメッセージは
拒否される。 Shift-JIS や JIS コードのメッセージに制限したいの
ならば、引数の euc
を sjis
や jis
に
変更すれば良い。また ASCII のメッセージのみに制限したいならば
引数を ASCII
にするとよい。
もしも許可しないコードのコミットメッセージを入力すると 以下のようなメッセージが返る。
=== cd /home/morikawa/hoge0/ === /usr/bin/cvs commit -m 'テスト' cvs_test.txt log message is sjis , Please write log message ASCII or euc . cvs [server aborted]: Message verification failed === Exit status: 1
なお、最後の引数は以下の意味を表している。 (これらは省略しても上記の例のように補完されるが、 cvs バージョン 1.12 以降は警告を発せられる。
詳しくは CVS--Concurrent Versions System v1.12.12 の C. Reference manual for Administrative files を参照せよ。