wakatonoの戯れメモ

はてなダイアリーから引っ越してきました。

Lens-0.2改良

一時ファイルをMaildir配下に持ち、cpではなくハードリンクをかけるよう改良。

  • Maildir配下の作業ディレクトリ名を設定し、作成する処理を追加

一時ファイルの置き場は、Maildir の配下にtempという名前のディレクトリを作成して使っている(チェックして、存在しなければ作るようなイメージ)。Maildir自体は.lensrcで設定。

  • 作業ファイルを上記作業ディレクトリ配下にハードリンクする処理を追加

もともとはハードリンク処理がsystem cpに置き換わったが、これをまたFile.linkに戻した

ちなみに初心者(オレ)が作った改造なだけあって(笑)、かなり力技。もっとエレガントな実装があるのかもしれませんが…。

んで、現状でわかっている問題点は

  • 異常終了時に作業ディレクトリにファイルが残ってしまう。

てなカンジでしょう。
追加したり修正したりした部分は、黄色(だよなぁ)で色つけてあります。以下に修正部分を。

  • lens.rbの修正(該当部分抜粋)


@maildir = @config[:maildir]
$maildirtemp = "#{@maildir}/temp"


if !test(?d,$maildirtemp) then
Dir.mkdir($maildirtemp)
end

end

def process

  • message.rbの修正(該当部分抜粋)


@text = STDIN.readlines
date = @text.grep(/^Date:/)[0]
time = date ? ParseDate.time(date) : Time.now
@path = "#{$maildirtemp}/#{time.to_i}.#{$$}.#{hostname}"
File.open(@path,"w"){ |f|
f.print @text
}

(中略)
md = Maildir.new(maildir, folder)
refilepath = md.messagepath(@path)
if !test(?f,refilepath) then
File.link(@path,refilepath)
# system "cp #{@path} #{refilepath}"
end
end