2001-12-30 (Sun)

_ CVSの本

・入門CVS 大月美佳 秀和システム

いろいろ書いてあって便利なのですが、惜しむらくは文章にまとまりがないため読みにくい点です。入門にはこれ一冊でよいでしょう。

・CVS -バージョン管理システム- Karl Fogel著 でびあんぐ監訳 オーム社

読み応えのある本です。CVSの解説も丁寧で、マージなどCVSの奥深さを学べます。オープンソースの解説もとても面白いです。

_ CVSによるWebの自動更新

WebコンテンツをCVSで管理したくなりますが、CVSが更新された際に、公開されている作業ファイルも自動的に更新されると便利ですね。その仕掛けを作ります。以下、「入門CVS」を参考にしましたので、詳細はそちらをご覧下さい。一つ注意がありますので、末尾に書きました。

まず、WebコンテンツをCVSのリポジトリ(webrep)として登録します。WWWに公開するディレクトリは~/public_htmlだとします。

まず、公開するためのリソース(作業ファイル)を配置(checkout)しましょう。

$ cd ~/public_html

$ cvs checkout webrep

このリポジトリが更新された際に、Webコンテンツを更新するには、

$ cd ~/public_html/webrep

$ cvs update -d -P

すればよいわけです。この更新作業を自動化します。

まず、2つスクリプトを用意します。以下、$CVSROOTと$HOMEは自分の環境に合わせて書き直してください。

========= auto_update.pl ==========
#!/usr/bin/perl
# cvs path
$cvs = '/usr/bin/cvs';
$usage = "usage: auto_update.pl WORKDIR [MODE]";
# process arguments
die $usage, "\n" unless $workdir = $ARGV[0];
$chmod = $ARGV[1] ? "; chmod -R $ARGV[1]" : "";
# main update process which must be executed in background.
$cmd = "(cd $workdir; $cvs -q update $chmod) &";
system($cmd);
# last message.
$date = `date`; chomp($date);
$mesg = "$workdir automatically updated at $date";
print "$mesg\n";
===============================
========== update.sh ==========
#!/bin/sh
$CVSROOT/CVSROOT/auto_update.pl $HOME/public_html/webrep
===============================

_ auto_update.plは、CVSROOT/に保存し、CVS自身が管理できるようにします。CVSROOT/checkoutlistにも設定するとよいでしょう。

update.shは、~/public_html/bin/に置きます。2つのファイルとも、実行権に注意しましょう。

処理の流れは次のようになります:

cvsにcommitする→update.sh→auto_update.pl→cvs update。

cvsにcommitした時にトリガとなるコマンドは、CVSROOT/modulesに書けます。update.shを緩衝させたのは、modulesファイルの中では引数を渡せないからです。

ここに、

webrep -i $HOME/public_html/bin/update.sh webrep

と書きます。トリガされるモジュール名はwebrepで、また、-iオプションでcommitでトリガされることを示します。

注意:update.sh内の引数で、モジュール名まで含めていることに注意してください。そうしないと、CVSが管理しているモジュール全てが展開されてしまいます。

[]