〜2004年6月中旬〜
なかださんが作ったパッチをちょっといじって、linuxだけに限定したやつをruby-dev MLへ投げた。 [ruby-dev:23685]
Changes:
Completion for the bm: URL scheme was implemented and some bugs were fixed.
bm:なんて使えるんだ。ftp://ftp.iij.ad.jp/bub/GNU/をgnuで登録してるんだけど、
% lftp bm:gnu/gcc/
でftp://ftp.iij.ad.jp/bub/GNU/gcc/に直接行けるようだ。なるほど。
しかし、bm:でcompletionってのがなんだかよくわからない。
CVSのrepositoryを改竄した場合、どのような影響が出るのか実験してみる。
% repo=$PWD/cvs-repository % cvs -d $repo init % mkdir tmp; cd tmp % cvs -d $repo import -m import foo eban init % cd .. % cvs -d $repo co foo % cd foo % echo '1. foo' > foo.txt % cat foo.txt 1. foo % cvs add foo.txt % cvs ci -m "" foo.txt % echo '2. bar' >> foo.txt % cat foo.txt 1. foo 2. bar % cvs ci -m "" foo.txt % echo '3. hoge' >> foo.txt % cat foo.txt 1. foo 2. bar 3. hoge % cvs ci -m "" foo.txt % cvs co -p -r1.1 foo/foo.txt 1. foo
ここで直接$repo/foo/foo.txt,vを書き換えて、 2. barを追加した変更(1.2)を削除すると、
% cvs update % cvs co -p -r1.1 foo/foo.txt 1. foo 3. hoge
となる。working spaceでのupdateは何もおこらず、 1.1を取り出すとあきらかに違うものが出てくる。
CVSのrepositoryは最新から過去への差分のかたまりになっているので、 改竄は過去へ影響を与える。 こういう単純な改竄は簡単に検出が可能。
最新を改竄した場合はどうなるのか?先のfoo.txt,vを元に戻し、
1.3 log @*** empty log message *** @ text @1. foo 2. bar 3. hoge 4. fuga @
のように4. fugaを加えてみた。 この状態のままworking spaceでcvs updateしてもなにもおこらない。 cvs diffしても差がない。でもcoすると
% cvs co -p foo/foo.txt 1. foo 2. bar 3. hoge 4. fuga % cvs co -p -r1.1 foo/foo.txt 1. foo 4. fuga
のように4. fugaが追加されている。
ということはどっちにしても常にcvs updateで同期を取ってるworking spaceへ改竄の伝播は不可能で、最新をcoした結果との比較で確認は可能になる。
問題は途中を改竄した場合で、2つのrevisionをいじって矛盾がないような変更をすると、 そこだけ改竄が可能となる。 まあ、そんなところをピンポイントで改竄してもあまり意味がないけど、 結局厳密にチェックするには各revision間での差分を見るしかないのかなあ。
やっぱcommit mailにmd5sumの結果も入れとくというのが、なにかあったときに確認が楽か。
なんか最近VMware上のCygwinへsshして放っておくといつのまにかコネクションが切れてることが多い。 いつからだろう。ServerAliveIntervalを指定してみるか。
みなさん、おつかれさまです。
これってcommitinfoじゃなくてloginfoを使えって話じゃないだろうか。 MD5はこんな感じ?
cvs -d /some/where/repository co -p -kb module/file | md5sum
あとでrubyのCVSROOTのloginfoを調べよう。
Bashといいつつも#!/bin/shだったりするあたりはLinux使い? 考え方はとてもシンプルで面白い。
最近やたらとドイツ語だかオランダ語だかわからないメールが来る。 突然来るようになっても学習してないからすり抜けちゃうんだよなあ。
なかださんが我慢できないらしいので、In-Reply-ToとReferncesを追加する小細工をruby-dev MLの設定に入れた。 [ruby-talk:102350]の$DIRだけ変えただけなんだけど、なぜか [ruby-dev:23708]にはついてくれない。 どうも$Envelopeは'h:subject'のようにh:が必要らしい。 で、その後該当するメールが来ないので、うまくいってんだかどうかは不明。
defaultのテーマは前のほうがよかったかな。
loginfoからversion.hを更新する実験。
DEFAULT work=`mktemp -d`;\ cd $work;\ cvs -Q -d %r co %p/version.h;\ version.hを変更;\ cvs -d %e ci -Q -m `date +%Y-%m-%d` %p/version.h;\ rm -rf $work
これで、できそう。
ここでciしてしまうと無限に自分自身が呼ばれそうだが、 呼ばれても二度目以降はversion.hに変化はないので、そこで止まる。 cvs ciは変化がなければ何もしないから、loginfoも動かない。 まあ、ちょっと無駄なので、ちゃんとやるならversion.hかどうかを見たほうがいいか。 23:59:59あたりにコミットされると非常に微妙だし。
実際は$workのように変数は使えないとか、backslashでの継続もできないとかいろいろ制約があるのでshell scriptにする必要がある。 あ、あとbranchをどうするかだな。これは標準入力から取り出すしかないか。 結構難しいもんだね。
やはりloginfo_ruby.rbをいじるべきか。
zshを使っているとdiffの2番目の引数のファイルを補完できないのはなぜだ? しかたなく\diffとしてみたり。
実際にrubyのCVSROOTでversion.h更新実験をしたら、1.11だとブロックしてしまうことがわかった。 ローカルで実験してたのは1.12.9で、これなら問題ない。 困ったな。