at posts/single.html

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)

関連する日記