Just another Ruby porter,

〜2004年6月下旬〜


<Prev(,) | Next(.)> | Recent(/)>> | RDF

2004-06-21 (Mon)

[CVS] コミットメールにファイルのMD5を追加する

RubyのコミットメールのヘッダにファイルのMD5を載せてみた。

X-Ruby-CVS-MD5Info: CVSROOT/loginfo, 1.31, fff058611bd0eddd151dd66c1e0336de
X-Ruby-CVS-MD5Info: CVSROOT/loginfo_ruby.rb, 1.27, 35b4c8c6bc23060fb0fbf1e64871e2be
X-Ruby-CVS-Template: %s -Q co -p -kb -r%s %s

という感じになる。この一見謎のTemplateは

% cvs -Q co -p -kb -r1.31 CVSROOT/loginfo | md5sum
fff058611bd0eddd151dd66c1e0336de  -

という意味。いろいろ考えてみて、なんだかんだで結構よさそうに思える

% (echo 'fff058611bd0eddd151dd66c1e0336de  -'; \
  cvs -Q co -p -kb -r1.31 CVSROOT/loginfo) | md5sum -c
-: OK

という形式はtextutilsのmd5sumでしか使えない技なのでやめた。

","で区切ってるから、変な名前のファイルを追加しないように。 と思ったが、後ろからparseすれば","が含まれてるファイル名でも大丈夫か。


2004-06-22 (Tue)

[CVS] loginfo

cvs ci foo bar/bazのように実行するとloginfoは2回呼ばれることに今さらながら気づかされた。 akrさんが言ってたのはこのことだったのか。

というわけで、MD5Infoも完成したと思う(ちょっと弱気。

[CVS] md5info.rb

大したもんでもないんだけど、MD5Info check scriptをquick hack。

#! /usr/bin/ruby

require 'digest/md5'

md5info = []
while line = gets
  case line
  when /^X-Ruby-CVS-MD5Info: (.+), (.+), (.+)/
    md5info << {:file=>$1, :rev=>$2, :md5=>$3}
  when /^X-Ruby-CVS-Template: (.+)/
    t = $1
    ARGF.close
  end
end

for m in md5info
  print m[:file],
  Digest::MD5.hexdigest(`#{t % ['cvs', m[:rev], m[:file]]}`) == m[:md5] ?
    ": OK\n" :
    ": NG\n"
end

あらかじめ適当に環境変数CVSROOTを設定するか、 coしたworking space上で実行する。

% CVSROOT=:pserver:anonymous@cvs.ruby-lang.org:/src ruby md5info.rb ruby-cvs-commit-mail

という感じで。

[Ruby] Anonymous CVS復活

以前にcoしたworking spaceで、そのままcvs updateして失敗してる人が続出してるようだけど、パスワードが変わったのでloginしなおしましょう。


2004-06-23 (Wed)

[Soft] ISC DHCP 3.0.1rc14

buffer overflowということで早速上げよう。 でも考えてみるとすでにdnsmasqのDHCPサーバを使ってるからもう関係ないのであった。


2004-06-24 (Thu)

[Ruby] md5info.rb

やばそうな文字があったら、例外起こして終了することにした。

[Ruby] Windows版Expatの変なディレクトリ構成

ExpatのWindows版をインストールするとなんだかとても変なディレクトリ構成になっている。 http://expat.sf.net/からexpat_win32bin_1_95_7.exeを取ってきてインストールすると、 c:/Expat-1.95.7/Libsにライブラリ、 c:/Expat-1.95.7/Source/libにヘッダファイル(というかソースファイル)が置かれる。 このままではlibとincludeという名前ではないのと、ディレクトリの深さも違うため、--with-quixml-dirでは指定できない。 だから、 [ruby-talk:80820]のように--with-quixml-libと--with-quixml-includeを別々に指定する必要がある。 でも間違ってるんだよね。こっちでは両方とも同じところを指してる。 ってことを 指摘したつもりなんだが、 全然わかってくれなかったような気がする。英語で説明するの面倒だしなあ。そのあたりを察してくれよ。無理か。


2004-06-25 (Fri)

[Makefile] all.sh

Makefileでallをターゲットにするのはよくあることだが、all.shというファイルがあるとGNU makeは余計なことをしてくれる。

% cat Makefile
all: foo
foo: foo.o; $(CC) foo.o -o foo
% touch all.sh
% make
cc    -c -o foo.o foo.c
cc foo.o -o foo
cat all.sh >all 
chmod a+x all

最後の2行でallを作っちゃうんだよねえ。これはmake -pするとわかるんだけど、

%: %.sh
#  commands to execute (built-in):
        cat $< >$@ 
        chmod a+x $@

というルールがあるため。

Rubyのソースでやってみると、VPATHがあるので非常にうっとうしいことになる。


2004-06-26 (Sat)

今日一日

久し振りに12時間以上寝て、たまっていたビデオとTVを見まくる。


2004-06-27 (Sun)

[Vim] path

~/.vim/ftplugin/ruby_init.vimに

setlocal path=.,/usr/local/lib/ruby/1.8,,

と書いておけば

:find csv.rb

のようにできて便利だと気づいた。 pathの空はカレントで"."は現在編集中のファイルが存在するディレクトリを意味する。 pathのdefaultは.,/usr/include,,で vi /etc/hostsとして:sf fstabとすれば/etc/fstabが編集できる。

ruby*.vimはsyntax rubyのときに勝手に読み込まれるらしい。

[Movie] it

TVのCMで知る。小雪が主役ということなので見た。Webで謎を明かしすぎのような。 6/30まで。


2004-06-28 (Mon)

[Ruby] WEBrickとw3mの手軽さ

hikiとか試していて思うんだけど、WEBrickはこういうときに本当手軽で便利だ。 hikiの場合は 以前作ったものだとちょっとまずいので、:DocumentRoot=>"."を:DocumentRoot=>Dir.pwdに変更して実行。

w3mだと例によって

% w3m -o cgi_bin=$PWD file:///cgi-bin/hiki.cgi

てな感じでhttp serverなしで簡単に試すこともできる。

[Ruby] WEBrick Servelet

となると、高速化はやはりServeletか。 sample/webrick/hello.rbとか、最近 ruby-talkに投稿されたものが参考になるかな。

http://segment7.net/projects/ruby/WEBrick/servlets.html


2004-06-29 (Tue)

[CVS] 複数のブランチをまとめてコミット

Rubyのcommitterの中には1.9と1.8をまとめてcommitしようとするものぐさな連中がいる。 同じlog messageを2度書くのはDRYの法則にも反するし、 怠惰はhackerたる所以だし、大いに結構なんだけど、 現在commitinfo, loginfoの仕組みでは対応していないのでcommit mailが飛ばないという問題がある。

[CVS] commitinfoとloginfo

さて実際に試してみよう。 commitinfoは

DEFAULT echo commitinfo

として、loginfoは

DEFAULT echo loginfo %s; grep Tag:

としてみた。

% cvs -Q -d /tmp/cvs ci -f -m "" foo/foo.txt foo/bar/bar.txt \
  v1/foo.txt v1/bar/bar.txt 2>/dev/null
commitinfo /tmp/cvs/foo foo.txt
commitinfo /tmp/cvs/foo/bar bar.txt
commitinfo /tmp/cvs/foo foo.txt
commitinfo /tmp/cvs/foo/bar bar.txt
loginfo foo.txt
loginfo bar.txt
loginfo foo.txt
      Tag: v1
loginfo bar.txt
      Tag: v1

ディレクトリごとに4回ずつ呼ばれる。 これもakrさんに言われるまで誤解していた。 commitinfoのほうはなぜか1回だとばかり思ってた。

というわけで、akrさん提案のcommitinfoが呼ばれた回数分loginfoが呼ばれたらメールを飛ばすということ変更を近々入れよう。 単に行数が呼ばれた回数になってるから、それを使うか。


2004-06-30 (Wed)

[CVS] commit mail

行数で判断でよさそうだ。しかし、今までの形式でメールを送るわけにはいかないよねえ。

Modified files:        (Branch: branch)
  test:
    ChangeLog foo
  test/bar:
    hoge
  test:
    ChangeLog foo
  test/bar:
    hoge

のようになってしまう。Branch情報はmoduleごとにしないといけない。

Modified files:
  test:
    ChangeLog foo
  test/bar:
    hoge
  test: (Branch: branch)
    ChangeLog foo
  test/bar: (Branch: branch)
    hoge

という感じか。もしくは

Modified files:
  test:
    ChangeLog foo
  test/bar:
    hoge
Log:
  ...
URL...

<区切り>

Modified files:        (Branch: branch)
  test:
    ChangeLog foo
  test/bar:
    hoge
Log:
  ...
URL...

のように2つに分けてしまうか。URLを考えるとこのほうがよさそうだ。 3つ以上になってもいいし(いや、そんなコミットしなくていいよ)。

なんとなく見た目がYAMLっぽい気もするんだけど、YAMLにするのはありか。 RSSにしちゃえばとshugoさんやなひさんに言われてるんだけど、 確かにそういう方向のほうがよさそうだな。


<Prev(,) | Next(.)> | Recent(/)>> | RDF


WWW を検索 jarp.does.notwork.org を検索

わたなべひろふみ
Key fingerprint = C456 1350 085F A320 C6C8 8A36 0F15 9B2E EB12 3885
Valid HTML 4.01!