google-code-prettify

2008-11-18

subversionのpost-commitフックで、pipeがつまるのを修正

以前作った、commit時にメールを送るpost-commitだが、変更ファイル数が多い時に、pipeがつまって止まってしまう事がわかったので、修正した。

以前のバージョン:
(nkfr, nkfw) = popen2.popen('nkf -j')
nkfw.write(log2)
nkfw.close()
jislog = nkfr.read()
nkfr.close()

これだと、
・nkf側が、JISに変換した結果をwriteしようとする
・post-commit側もwrite中
の時に、デッドロックする。

selectを使うという手もあったが、もっと単純に、テンポラリファイルを作って対処する事にした。
(fd, tname) = tempfile.mkstemp()
os.write(fd, log2)
os.close(fd)

(nkfr, nkfw) = popen.popen2('nkf -j %s' % (tname,))
nkfw.close()
jislog = nkfr.read()
nkfr.close()

os.unlink(tname)

0 件のコメント: