2006-08-31 15:38:27 +0900 (621d); rev 100
BitChannel に関する意見・提案・質問などがあったらどうぞ。 ただし取り込まれるかどうかはわかりません。
また以下のページも参考にしてください。
※ 以下、新しい項目を上に書いてください
ja_JP.UTF-8 で使おうとすると文句を言われます。 ロケールリストに UTF-8 のエントリが入っていないようです。 以下のようにした上で、(少なくとも read-only では) きちんと UTF-8 で使えることを確認しました。 (小林)
--- lib/bitchannel/locale/ja.rb.orig Wed Sep 1 21:19:49 2004
+++ lib/bitchannel/locale/ja.rb Thu Jul 13 21:05:24 2006
@@ -103,4 +103,7 @@
loc = Locale_ja.new('ja_JP.iso2022jp', 'iso-2022-jp')
Locale.declare_locale 'ja_JP.iso2022jp', loc
+ loc = Locale_ja.new('ja_JP.UTF-8', 'utf-8')
+ Locale.declare_locale 'ja_JP.UTF-8', loc
+
end
青木: ありがとうございます。すっかり遅くなりましたが、コミットしておきました。
青木: どうも書き込みでエラーが出るのでテスト。大丈夫だなあ。なんだったんだ。
片仮名をナカグロ(・)をはさんでつなげるというページ名規約のアイディアがあります。 ページ名が「ニホンゴ・ページメイ」の場合、URLは例えば "/wiki.cgi?nihonngo_pe-jimei" になります。
現在、http://vwta.kir.jp/KanaWiki/ でその有効性について実験中です。
理論上BracketNameと衝突してしまうという問題点はあるものの、 BitChannelには割とフィットしそうな気がするのですが、いかがでしょうか。--SHIMADA
system revision 1.162 でコンフリクトが起きるようにページを編集したら下記のエラーになりました。
BitChannel Error undefined method `unlink' for #<BitChannel::CaseSensitiveFileSystem:0x120155d28> (NoMethodError) /.../lib/bitchannel/repository.rb:607:in `merge' /.../lib/bitchannel/repository.rb:807:in `checkin' /.../lib/bitchannel/repository.rb:804:in `lock'
下記の修正で期待通りに動くようです。
Index: lib/bitchannel/repository.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/repository.rb,v
retrieving revision 1.98
diff -u -u -r1.98 repository.rb
--- lib/bitchannel/repository.rb 13 Nov 2005 21:56:10 -0000 1.98
+++ lib/bitchannel/repository.rb 10 Dec 2005 05:58:57 -0000
@@ -604,7 +604,7 @@
merged = read(name)
rev = revision(name)
# prevent next writer from conflict
- @fs.unlink name; cvs_update_A name
+ @fs.rm_rf name; cvs_update_A name
raise EditConflict.new('conflict found', merged, rev)
end
end
BitChannelSyntax 等に記述されているコメントボックスが機能してないように見えます。
手元の環境だと 1.8.2 だとちゃんと表示されて 1.8.3 では表示されないようです。 1.8.3 の環境では lib/bitchannel/syntax.rb の
BLOCKEXT = /?A?[?[?#(?w+)(:.*?)??]?]$/
の最後の $ を削除すると表示されるようになるのですが……
http://hogehoge.com/w/?cmd=view;name=PageA などと index.cgi を省略した URL でページを指定してアクセスすると、 そのページから他のページへのリンクの URL が http://hogehoge.com/w/w?cmd=view;name=PageB などとなってうまく辿れません。 (小林)
私も Ruby のバージョンを 1.8.3 にしてから同様の現象が発生しています。
--- lib/bitchannel/cgi.rb.orig Fri Sep 30 16:41:15 2005
+++ lib/bitchannel/cgi.rb Fri Sep 30 16:55:47 2005
@@ -30,7 +30,13 @@
private
def guess_cgi_url(req)
- return File.basename(req.path) if req.path
+ if req.path
+ if req.path =~ %r{/$}
+ return ''
+ else
+ return File.basename(req.path)
+ end
+ end
return req.script_name if req.script_name
return File.basename(::Apache.request.filename) if defined?(::Apache)
return File.basename($0) if $0
下の「特定のリビジョンと最新版との差分が欲しい」で指定したリビジョンが 最新版だった場合にエラーが表示されてしまいました: undefined method `strip' for nil:?NilClass
Index: lib/bitchannel/repository.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/repository.rb,v
retrieving revision 1.96
diff -u -r1.96 repository.rb
--- lib/bitchannel/repository.rb 16 Mar 2005 22:23:31 -0000 1.96
+++ lib/bitchannel/repository.rb 1 Sep 2005 23:30:39 -0000
@@ -427,7 +431,7 @@
def Diff.parse(fs, mod, chunk)
meta = chunk.slice!(/?A.*?(?=^@@|?z)/m).to_s
- file = meta.slice(/?A(?:Index:)??s*(?S+)/, 1).strip
+ file = (meta.slice(/?A(?:Index:)??s*(?S+)/, 1) || '').strip
if /---/ !~ meta
# empty new file.
now = Time.now
あるページの翻訳版を作ったあと、元のページの、翻訳の元になったリビジョンと現在の差分を示して、翻訳を促進したい。
下記のパッチでは、rev2を指定しないでdiffを見ようとした時にHEADとの差分を表示するようにしてあります。
Index: lib/bitchannel/handler.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/handler.rb,v
retrieving revision 1.63
diff -u -r1.63 handler.rb
--- lib/bitchannel/handler.rb 17 Mar 2005 05:48:44 -0000 1.63
+++ lib/bitchannel/handler.rb 29 Aug 2005 21:46:45 -0000
@@ -148,7 +148,7 @@
def handle_diff(req)
return nil unless req.page_name
return nil unless @wiki.exist?(req.page_name)
- return nil unless req.rev1 and req.rev2
+ return nil unless req.rev1
@wiki.diff(req.page_name, req.rev1, req.rev2).response
end
Index: lib/bitchannel/repository.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/repository.rb,v
retrieving revision 1.96
diff -u -r1.96 repository.rb
--- lib/bitchannel/repository.rb 16 Mar 2005 22:23:31 -0000 1.96
+++ lib/bitchannel/repository.rb 29 Aug 2005 21:46:45 -0000
@@ -387,7 +387,11 @@
end
def cvs_diff(rev1, rev2, name)
- d = diff('-u', "-r1.#{rev1}", "-r1.#{rev2}", @fs.encode(name))
+ if rev2
+ d = diff('-u', "-r1.#{rev1}", "-r1.#{rev2}", @fs.encode(name))
+ else
+ d = diff('-u', "-r1.#{rev1}", @fs.encode(name))
+ end
d.kill if @killlist[name].overlap?(d.revision_range)
d
end
Index: template/diff.rhtml
===================================================================
RCS file: /src/bitchannel/template/diff.rhtml,v
retrieving revision 1.20
diff -u -r1.20 diff.rhtml
--- template/diff.rhtml 16 Mar 2005 22:24:13 -0000 1.20
+++ template/diff.rhtml 29 Aug 2005 21:46:45 -0000
@@ -11,7 +11,7 @@
.include menu
-<h1><%= logo_url() %><%= page_name() %> : Diff rev <%= rev1() %> <=> rev <%= rev2() %></h1>
+<h1><%= logo_url() %><%= page_name() %> : Diff rev <%= rev1() %> <=> <%= rev2() ? "rev #{rev2()}" : 'HEAD' %></h1>
<p class="revnavi">
[<% if rev1() > 1 %>
@@ -21,10 +21,15 @@
[rev0 <=>
<% end
%>
-<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev1() %>;name=<%= page_url() %>">rev <%= rev1() %></a>
+<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev1() %>;name=<%= page_url() %>">rev<%= rev1() %></a>
<=>
-<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev2() %>;name=<%= page_url() %>">rev <%= rev2() %></a>
-<a href="<%= page_view_url() %>">>>HEAD</a>]
+<% if rev2() %>
+<a href="<%= cgi_url() %>?cmd=view;rev=<%= rev2() %>;name=<%= page_url() %>">rev<%= rev2() %></a>
+<a href="<%= page_view_url() %>">>>HEAD</a>
+<% else %>
+<a href="<%= page_view_url() %>">HEAD</a>
+<% end %>
+]
</p>
<% log = diff() %>
手元の環境 (cvs-1.11.6) では、二人の人が同時に編集した場合(origrevが同じ場合)に、
だけでは、後からSaveした人の編集結果だけが反映されてしまっています。 みなさんのところではこのような不具合はありませんでしょうか?
手元では、下記のように、
ようにすると、期待通りにconflictまたはmergeしてくれるようになりました。 (副作用としてcvs add -kbではなくcvs add -koするようになっています。)
Index: lib/bitchannel/repository.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/repository.rb,v
retrieving revision 1.93
diff -u -r1.93 repository.rb
--- lib/bitchannel/repository.rb 6 Nov 2004 21:13:28 -0000 1.93
+++ lib/bitchannel/repository.rb 7 Dec 2004 19:04:36 -0000
@@ -680,8 +680,10 @@
public
def merge(name, origrev, new_text)
+ cvs('admin', '-ko', encode_filename(name))
+ cvs_update_r name, origrev
write name, new_text
- out, err = *cvs('up', '-ko', "-j1.#{origrev}", '-jHEAD', encode_filename(name))
+ out, err = *(cvs_update_A name)
if /conflicts during merge/ =~ err
log "conflict: #{name}"
merged = read(name)
@@ -694,7 +696,7 @@
def cvs_add(name)
assert_chdir
- cvs 'add', '-kb', encode_filename(name)
+ cvs 'add', '-ko', encode_filename(name)
end
def cvs_checkin(name, log)
@@ -707,6 +709,11 @@
cvs 'up', '-A', encode_filename(name)
end
+ def cvs_update_r(name, rev)
+ assert_chdir
+ cvs 'up', "-r1.#{rev}", encode_filename(name)
+ end
+
def cvs_update(name)
assert_chdir
cvs 'up', encode_filename(name)
右端のセルが空の場合その左、以下の例では b が、HTMLになると消えます。
||| left ||| center ||| right || a || b ||
| left | center | right |
|---|---|---|
| a | b |
Index: syntax.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/syntax.rb,v
retrieving revision 1.5
diff -u -r1.5 syntax.rb
--- syntax.rb 6 Nov 2004 21:15:43 -0000 1.5
+++ syntax.rb 21 Nov 2004 19:12:49 -0000
@@ -302,7 +302,6 @@
rows.each do |cols|
while cols.last and cols.last[0].strip.empty?
cols.pop
- cols.pop
end
end
n_maxcols = rows.map {|cols| cols.size }.max
青木: ありがとうございます。とりこみました。
Index: lib/bitchannel/syntax.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/syntax.rb,v
retrieving revision 1.4
diff -u -r1.4 syntax.rb
--- lib/bitchannel/syntax.rb 1 Sep 2004 15:58:56 -0000 1.4
+++ lib/bitchannel/syntax.rb 6 Nov 2004 02:55:02 -0000
@@ -414,7 +414,7 @@
WikiName = /?b(?:[A-Z][a-z0-9]+){2,}?b/n
BracketLink = /?[?[[!-~]+??]?]/n
- SeemsURL = URI.regexp(%w(http ftp))
+ SeemsURL = URI.regexp(%w(http https ftp))
NeedESC = /[&"<>]/
def text(str)
青木: ありがとうございます。とりこみました。
Cygwin + standalone.rb で BitChannel を動かしているのですが、 スタイルシートが反映されません。 下記のパッチでスタイルシートが読めるようになりますが、 第3引数があまりスマートではないですね…。
--- bitchannel/standalone.rb 2004-04-28 18:17:35.000000000 +0900
+++ bitchannel/standalone.rb 2004-10-15 11:27:59.732750400 +0900
@@ -19,5 +19,6 @@
:CGIPathEnv => ENV["PATH"]
)
server.mount '/', BitChannel::WebrickServlet, *bitchannel_context()
+server.mount '/theme/', WEBrick::HTTPServlet::FileHandler, '/var/bitchannel/theme/'
trap(:INT){ server.shutdown }
server.start
青木: これは各自やってもらうしかないのではないかと思います。 もともと standalone.rb は stderr に出力が出たりして そのまま使えるようにはできていませんし。 (なにより現在の実装だとスレッドセーフになっていないので WEBrick servlet として使うにはかなり問題があります)
ま、しかし、もうちょっと簡単でもよさそうですね。
cvs 1.12.9 では cvs log の際に date: を "2004-06-11 10:39:56 +0000" のような形式で出力するため Time.rcslogdate に失敗します。 https://ccvs.cvshome.org/source/browse/ccvs/src/log.c?r1=1.95&r2=1.96
Index: lib/bitchannel/repository.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/repository.rb,v
retrieving revision 1.92
diff -u -u -r1.92 repository.rb
--- lib/bitchannel/repository.rb 8 Oct 2004 15:41:05 -0000 1.92
+++ lib/bitchannel/repository.rb 11 Oct 2004 22:02:25 -0000
@@ -30,9 +30,9 @@
Time.utc(m[3], m[2], m[1], m[4], m[5], m[6])
end
-# "2004/06/11 10:39:56" (UTC)
+# "2004/06/11 10:39:56" or "2004-06-11 10:39:56 +0000" (UTC)
def Time.rcslogdate(t)
- m = %r<(?d{4})/(?d{2})/(?d{2}) (?d{2}):(?d{2}):(?d{2})>.match(t)
+ m = %r<(?d{4})[/-](?d{2})[/-](?d{2}) (?d{2}):(?d{2}):(?d{2})>.match(t)
raise ArgumentError, "not RCS log date: #{t.inspect}" unless m
Time.utc(*m.captures)
end
青木: ありがとうございます。たぶん対応しました。
通常 index.cgi(bitchannelrc) で動作させる場合、pages/ 以下を手動インポートするが、 ファームの機能を使って cvs init 以外をおまかせする。 また、二系統のフローを一つにまとめたい。
あまり書換えないようにしましたが、提案として張り付けます。(長くてすみません)
(パッチだけ消しました)
青木: 動機としては、初期化を簡単にしたいってことですよね? それであれば misc にツールを作るのがいいんではないでしょうか。 シングルノードの Wiki と Farm ではオブジェクト単位で かなりきっちりとコードが分かれているので、 共通化する価値はあまりないと思います。
機能としては非常に便利になってよいと思います。 BitChannelToDo 行き。
(追記: misc/init.rb として実装してみました)
initialize_environment() が obsolete のため動作しません。
現在、ひとつの CVS リポジトリに対して 2 箇所で bitchannel を動かして同期を取ろうと しているのですが、refresh-linkcache が動いてほしいです(相手の更新に追随できる?)
青木: refresh-linkcache.rb を直すのはそれはそれで必要なんですが、 同期を取る場合は refresh-linkcache.rb ではまずいです。 あれは全ページを一気に処理するので無駄が多すぎますし、 たしかちゃんとロックしてなかったと思いました。 特定ページだけをロックしてアップデートする手段を提供しないとだめですね。 今週は余裕がないので、来週のどこかで対応したいと思います。
(追記) refresh-linkcache.rb のバグは CVS HEAD で直しました。
diff -u -r1.89 repository.rb
--- lib/bitchannel/repository.rb 2 Sep 2004 05:57:01 -0000 1.89
+++ lib/bitchannel/repository.rb 29 Sep 2004 07:51:21 -0000
@@ -657,7 +657,7 @@
log "conflict: #{name}"
merged = read(name)
rev = revision(name)
- File.unlink encode_filename(filename) # prevent next writer from conflict
+ File.unlink encode_filename(name) # prevent next writer from conflict
cvs_update_A name
raise EditConflict.new('conflict found', merged, rev)
end
青木: ありがとうございます。コミットしました。
もともと文法に「"="一つで始まるものはタイトル」というものを付け加えるためだけにやっていたのですが、 [diary:20040822.html]的な使い方も出来そうだったので書いてみました。
パッチサイズが10KB程度あるのでここに貼り付けるのは差し控えますが、興味ありますでしょうか?
青木: すごくあります。直メールででも投げてもらえると嬉しいです。
(追記) メールでパッチをいただきました。 基本的にそのままとりこもうと思います。
置き場所が出来たのでパッチを公開しました<http://www.callcc.net/archive/bitchannel-ja-20050212.patch>。 お送りしたものには若干不備があったので、こちらをベースにしたほうがよいかもしれません。
CGIにおいて、HTTPRequestにIf-Modified-Sinceがつくとheader出力中にタイムアウトする。(Apache/2.0.48)
Response#update_forでHTTPResponseにLast-Modifiedを付加するからのようです。
webrick初心者zundaがいぢってみました。タブとスペースが混ざってますが…。
Index: lib/bitchannel/cgi.rb
===================================================================
RCS file: /src/bitchannel/lib/bitchannel/cgi.rb,v
retrieving revision 1.6
diff -u -r1.6 cgi.rb
--- lib/bitchannel/cgi.rb 23 Jun 2004 15:28:41 -0000 1.6
+++ lib/bitchannel/cgi.rb 6 Nov 2004 03:57:01 -0000
@@ -21,6 +21,9 @@
wiki, = *@options
wiki.session(guess_cgi_url(req)) {
bcres = Handler.new(wiki).handle(Request.new(req, wiki.locale, false))
+ if ( ims = req['if-modified-since']) && Time.parse( ims ) >= Time.parse( bcres.last_modified )
+ raise WEBrick::HTTPStatus::NotModified
+ end
bcres.update_for res
}
end
青木: 報告 & パッチありがとうございます。 zunda さんのパッチを参考にしつつ別の個所で対応しました。
あとある程度でいいのでスペースと記号を含む場合もどうにかしたいけどそれはおいといて。
つっこみに書きすぎたので(すみません)こっちに書きますが。
あんまり考えないでソースをいじってみました。 案山子実装自体は4行(3行?)で済むので("kakasi -oeuc -C -Ha -Ka -Ja -Ea -ka"するだけなんで)実装についてはどうでもいいんですが。
えーととりとめなくて申し訳ないです。resolv_interwikiと同じようなことも試してみます。
既にtikiで「も」考察されまくってるなあ。あおきさんも当然のように考察済みだし。http://todo.org/cgi-bin/tiki/tiki.cgi?c=v&p=%C6%FC%CB%DC%B8%ECWikiName%A4%CB%B4%D8%A4%B9%A4%EB%B9%CD%BB%A1 いつの間にかリンクされてるのが欲しいなら、とりあえずいろんな方式をぶち込んでおけば良いような気がする、のでいろいろ突っ込んでみるわけだが。
青木: そんなに簡単にできましたか。ちょっと意外。
やはり kakasi は拡張ライブラリが必要なのが一番ネックですかねえ。 他の問題は工夫すればなんとかできそうな感じです。 あと、結局 BracketName が必要なところが惜しいですね。
さらに考察してみます。
(追記)
漢字を常に同じ読みにマップする方法なら kakasi を使わず pure Ruby でいけそうな気がしてきました。
(通りすがりの臆病者)
思いつきですが、日本語のままひっかけるなら、読み仮名つき とかいいかもしれません。
先行者(センコウシャ)
書き手が意識する必要があるのは同じです。でなければ、はてな方式しかないですし。
Related Pages: BitChannel BitChannelToDo SandBox BitChannelArguments BitChannelRequest
system revision 1.162