=begin
= commit メッセージを euc のみに
((::))
* 編集者: 森川靖大
* 最終更新: 2005/11/09 (森川靖大)
#* 最終更新: 2004/10/05 (森川靖大)
* 新規作成: 2004/10/02 (森川靖大)
((::))
((:
:))
((::))
Contents
<<< cvs-eucmsg.hindex.rd
((:
:))
((:
:))
以下では、commit メッセージの文字コードをチェックする方法を記す。
RCS ファイルには本体も commit メッセージも両方書き込まれていることから、
この設定と同時に(())
の設定もおこなうのを勧める。
== 準備 (CVSROOT 編集のために)
ファイルの文字コードを固定するには、
リポジトリ以下の CVSROOT 内を編集する必要がある。
編集のための checkout などの方法については
(())
を参照せよ。
== 方法その1 (石渡スクリプト版)
=== force-euc.pl の追加
フィルタとして((<(({force-euc.pl}))|URL:euc-tools/force-euc.pl>))
を用いる。このフィルタは文字コードを((*EUCのみ*))許容する。
なおこのフィルタは(())で利用したものと
同じなので、既にそれを利用している場合はこの作業と(())
は必要ない。
#!/usr/bin/perl
#
# force-euc.pl by Ishiwatari Masaki, 2004
# original is forcesjis.pl by TOYODA Eizi, ????
$BinaryPattern = '\.(BMP|CHM|CUR|DAT|DLL|DOC|EXE|GIF|ICO|JPG|LIB|PNG|WAV)$';
for $arg (@ARGV) {
if (-d $arg) {
# chdir($arg) || warn("cannot chdir to $arg ($!)\n");
next;
}
if ($arg =~ m/$BinaryPattern/i) {
warn("filename $arg seems to be binary: check skipped\n");
next;
}
open(FILE, $arg) || (warn("cannot open $arg ($!)\n"), next);
$ARGV = $arg;
while () {
for ($i = 0; $i < length($_); $i++) {
$c = substr($_, $i, 1);
if ($c =~ /[\t\n\r\x20-\x7E\xA1-\xFE]/) {
next;
}
&barf('Broken EUC', $_);
}
}
}
exit 0;
sub barf {
print STDERR "$ARGV: " if $ARGV ne '-';
warn @_, ". Only EUC-JP or ASCII allowed.\n";
exit 1;
}
この (({force-euc.pl})) を add、commit して CVSROOT 以下に加える。
$ cvs add force-euc.pl
$ cvs commit -m "Force to change Kanji code to EUC." force-euc.pl
=== checkoutlist の編集1
(({CVSROOT/checkoutlist})) に以下の一行を追加する。詳細は
(())を参照のこと。
force-euc.pl unable to check out / update force-euc.pl in CVSROOT
編集が終ったら、いつも通り commit する。
$ cvs ci -m "Add force-euc.pl" checkoutlist
=== verifymsg にフィルターを設定1
(({verifymsg})) に以下のように記述する。
DEFAULT perl $CVSROOT/CVSROOT/force-euc.pl
これにより、コミットメッセージに Shift-JIS や JIS は
入力出来ないようになる。
== 方法その2 (森川スクリプト版)
=== msgchecker.pl の追加
フィルタとして((<(({msgchecker.pl}))|URL:euc-tools/msgchecker.pl>))
を用いる。このフィルタは引数として文字コード渡すことで、
コミットメッセージを((*EUC、Shift-JIS、JIS*))のどれかの文字コードに
制限することができる。
#!/usr/bin/perl
#
# msgchecker.pl by Morikawa Yasuhiro, 2004
require "jcode.pl";
if ($#ARGV < 1){
die "Usage: msgchecker.pl [ASCII|euc|sjis|jis] file\n";
}
$logcode = $ARGV[0]; # 'ASCII', 'euc', 'sjis', 'jis'.
$msg = $ARGV[1];
if (!$logcode){
$logcode = 'ASCII';
}
open(MSG, "<$msg")
|| die "$msg: cannot find log message.";
while () {
undef $code;
$code = &jcode::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 ) {
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
=== checkoutlist の編集2
(({CVSROOT/checkoutlist})) に以下の一行を追加する。詳細は
(())を参照のこと。
msgchecker.pl unable to check out / update msgchecker.pl in CVSROOT
編集が終ったら、いつも通り commit する。
$ cvs commit -m "Add msgchecker.pl" checkoutlist
=== verifymsg にフィルターを設定2
(({verifymsg})) に以下のように記述する。
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
以降は警告を発せられる。
: %l
チェックされるログメッセージが含まれているファイルへのフルパス
詳しくは (())
の (())
を参照せよ。
((:
:))
=end