WikiFarm を動かす
さくらインターネットでの検証の続きで、BitChannelが動くかどうかを確認してみた。 せっかくなので、WikiFarmを試してみる。 farm.rb でエラーがでて悩まされたけど、どうにか動くようになった。
以下がその差分。 以前のコードでは、 cvs import で空のリポジトリを作ってから、 cvs add で一つ一つのファイル(ページ)を追加していたんだけど、 wc.cvs_add にて -d オプションによる CVSROOT の指定がされていないために エラーになっていた。 本当は、 wc.cvs_add にて -d をつけるように修正するべきなのかもしれないけど、 技量が追いつかなかったので、cvs import で一括してページをインポートするようにした。 cvs add では -kb オプションを使っているようだけど、この方法だとこのオプションは使われない。 とりあえず動いているけど、何か悪影響があるかもしれないや。
bash-2.05b$ cvs diff -u lib/bitchannel/farm.rb Index: lib/bitchannel/farm.rb =================================================================== RCS file: /src/bitchannel/lib/bitchannel/farm.rb,v retrieving revision 1.7 diff -u -r1.7 farm.rb --- lib/bitchannel/farm.rb 23 Jun 2004 15:28:41 -0000 1.7 +++ lib/bitchannel/farm.rb 5 Aug 2004 01:43:54 -0000 @@ -287,6 +287,12 @@ end Dir.mkdir "#{tmpprefix}/cache" initialize_working_copy tmpprefix, id + repo = Repository.new({ + :cmd_path => @cmd_path, + :wc_read => "#{tmpprefix}/wc.read", + :wc_write => "#{tmpprefix}/wc.write", + :cachedir => "#{tmpprefix}/cache", + }, id) repo.properties = prop File.rename tmpprefix, prefix(id) ensure @@ -296,17 +302,15 @@ end def initialize_working_copy(tmpprefix, id) - wc = CVSWorkingCopy.new(id, "#{tmpprefix}/tmp", @logger) + wc = CVSWorkingCopy.new(id, "#{tmpprefix}/tmp", @cmd_path, @logger) Dir.mkdir wc.dir wc.chdir { log = 'BitChannelFarm auto import' - wc.cvs '-d',@repository, 'import', '-m',log, id, 'bcfarm', 'start' Dir.glob("#{@skeleton}/*").select {|n| File.file?(n) }.each do |path| name = decode_filename(File.basename(path)) wc.write name, File.read(path) - wc.cvs_add name - wc.cvs_checkin name, 'checkin from skeleton' end + wc.cvs '-d',@repository, 'import', '-m',log, id, 'bcfarm', 'start' } Dir.chdir(tmpprefix) { wc.cvs '-d',@repository, 'co', '-d','wc.read', id @@ -429,7 +433,7 @@ end def prefix - File.dirname(@wc_read) + File.dirname(@wc_read.dir) end end # class Repository
追記
空のファイルで import し、それぞれのファイルを個別に add しているのは、BitChannelCommentに書かれている revision 0 問題に対応するためかもしれない。
追記 その2
CVSROOT が分からないところは、cvs import した直後に cvs co すればいいのか。 こんな感じかな。
@@ -296,11 +302,12 @@ end def initialize_working_copy(tmpprefix, id) - wc = CVSWorkingCopy.new(id, "#{tmpprefix}/tmp", @logger) + wc = CVSWorkingCopy.new(id, "#{tmpprefix}/tmp", @cmd_path, @logger) Dir.mkdir wc.dir wc.chdir { log = 'BitChannelFarm auto import' wc.cvs '-d',@repository, 'import', '-m',log, id, 'bcfarm', 'start' + wc.cvs '-d',@repository, 'co', '-d','.', id Dir.glob("#{@skeleton}/*").select {|n| File.file?(n) }.each do |path| name = decode_filename(File.basename(path)) wc.write name, File.read(path)