ホーム

CVS + knjwrp を使おう


[2001/6/4] CVS は分散したメンバーでプログラム開発するのに便利な、バージョン管理ツールです。 この CVS に knjwrp という日本語パッチを当てて使おうという話です。 ここでの日本語とは、ファイルの中身の日本語コードの話であって、 日本語ファイル名の面倒を見るわけではありません。
[2003/1/22] Winクライアントで漢字コード変換を行う CVS の euc / sjis 相互変換 を発見しました。こちらのアプローチのほうが適切と思います。

knjwrp 概要

 CVS クライアントに Unix 系と MS-Win が混じると、 登録ファイルの改行コードの違いはオリジナルの CVS が吸収してくれるからよいとしても、 漢字コードは EUC と SJIS で使い分けたくなります。

 knjwrp を使うと、Unix 系サーバーで EUC に固定、 クライアントは EUC と SJIS を選択できるようになります (正確には、クライアントごとではなく、ユーザーアカウントごとに選択します)。 サーバー、クライアント共にパッチが必要です。

 knjwrp は加藤裕史さんの WinCVS / cvs knjwrp ダウンロードなページ で配布してらっしゃいます。

 knjwrp では漢字コードの変換はサーバー側で受け持つことになります。 もしもクライアント側で漢字コードの変換をすれば、 サーバーでは何も気にする必要がなさそうに思えるのですが、 おそらくサーバー側の wrapper 機能が利用できて実装しやすかったからでしょう、 このようになっています。 ところがこの wrapper 機能は、本家からは cvs-1.9.28 以降、 動作不安定として無効にされてしまってます。

 knjwrp はこの無効にされた wrapper を有効にした上で、 若干の機能追加を行い、 漢字コード変換スクリプトを併用することで上記を実現しているようです。 危険を承知のうえで使う必要があるというわけです。


knjwrp 適用済みバイナリの入手

 Unix 側クライアント+サーバーに必要なのは、 cvs-1.10.8.tar.gz と knjwrp20001107.gz です。 VineLinux2.1.5 の cvs-1.10.8-0vl3 には Vine 独自?のパッチが追加されているため、 公開されている knjwrp20001107.gz そのままは使えません。 また、その後 [cvs-ml 1109] で山田 聡さんによるパッチがあるのですが、まだ取り込まれてないようです。

 そこで、山田さんのパッチを取りこんだものと、 さらに VineLinux2.1 用に修正したものを公開します。 (あつかましくも、同じ名前のバージョン違いにさせていただきました。)

 [2003/1/22] 注意!この RPM には、いくつかセキュリティーホールが発見されています。 もう私は使っていないので、いつ更新できるかわかりません。 CVSサーバーはオリジナルのままで、Winクライアントを改造する方法 CVS の euc / sjis 相互変換 も検討してみて下さい。

knjwrp20001107.gz + [cvs-ml 1109] パッチ Vine2.x 用 RPM Vine2.x 用 RPM(せっかく作ったので公開しますが、knjwrp にはもう不要です。)

 Windows 側クライアントに必要なのは次の2つです。 コマンドライン CVS も入っているようです。


サーバーの設定

 Unix 系で立てる CVS サーバーのタイプにいくつかあるようなのですが、 私の把握しているのは pserver(password server)だけです。

 pserver では、サーバー上にユーザーアカウントがない人でも、 アカウントのある別ユーザ(実効ユーザー) に代理でファイル操作をしてもらうように設定できますが、 wrapper の設定のためには、サーバー上にホームディレクトリを持つ必要があるので、 最低 EUC 用と SJIS 用の2つのユーザーアカウントを用意することになります。

 Vine Linux 2.1.5 で行ったサーバー側の設定です。 "-f" オプションが重要で、 ユーザーのホームディレクトリを参照するようになります。 これがないと /root を見に行ってエラーになってしまいます。 追記後に '/etc/rc.d/init.d/inet restart' を実行します。 [cvs-ml 1026] を参考にしました。

"/etc/inetd.conf" に追記
cvspserver stream tcp nowait root /usr/bin/env env /usr/bin/cvs -f --allow-root=/home/cvs pserver

 knjwrp に付属の README.jp には ack という漢字コードコンバータが必要なように書いてありますが、 最近の nkf だけで事足ります。 みかままさんの「入門CVS下書き」 第5章 CVSコマンドの少し賢い使い方 に紹介してらっしゃいますスクリプトを、ここに引用させていただきます。 上記 RPM にも含めています。

wrapnkf2.sh
#!/bin/sh
#
# wrappper nkf filter for cvs-server/windows-clients 2
#
# Usage: wrapnkf2.sh kanji_code infile [outfile]
#
NKF=/usr/bin/nkf
# Line Terminator: CR/LF->LF(-Lu), LF->CR/LF(-Lw): No use
# Kanji Code: SJIS(-s), EUC(-e) including hankaku->zenkaku
TR=/usr/bin/tr
# Cntl-Z=\032(0x1a)
opt=$1
infile=$2
outfile=$3

if [ ${opt} = "-e" ]; then
    ${NKF} -eLu ${infile} | ${TR} -d '\032' > /tmp/unkf-cvs$$
    mv -f /tmp/unkf-cvs$$ ${outfile}
elif [ ${opt} = "-s" ]; then
    ${NKF} -s ${infile} > /tmp/wnkf-cvs$$
    mv -f /tmp/wnkf-cvs$$ ${infile}
else
    echo "Usage: wrapnkf2.sh [-s|-e] infile [outfile]"
fi
wrapnkf2.sh

 この変換スクリプトを使う限り、 サーバー側で持つファイルは EUC 決め打ちのようです。 クライアント側は、何もしなければ当然 EUC ですので、 SJIS のユーザーだけ、サーバー上の ホームディレクトリに次の設定ファイルを作ります。

"$HOME/.cvswrappers"
* -f '/usr/lib/cvs/contrib/wrapnkf2.sh -s %s' -t '/usr/lib/cvs/contrib/wrapnkf2.sh -e %s %s' -s

 ここで '*.* -f ...' と書くと、 拡張子なしのファイルが EUC になってしまうので注意して下さい。

 ユーザーアカウントごとに漢字コードを選択するため、 Unix クライアントでも SJIS を選択できるという利点(?)があるものの、 Win/Unix の両方の環境で CVS を使おうとすると、 1人でも2つのユーザーアカウントを用意するしかないようです。

 これ以外の CVS の設定については、奥村さんの バージョン管理システム CVS (バイナリファイルの扱い方の解説もあります)や、西本さんの バージョン管理システム CVS を使う をご覧ください。WinCVS の日本語化については山田さんの がらくた置場 が先進的です。


ホーム
リンクはご自由にどうぞ。
土村 展之(tutimura(a)nn.iij4u.or.jp) '(a)'は'@'に置き換えて
更新日 1/22 10:08, 2003