Emotional Hudsonプラグイン作りました
ソースはここ。→http://fisheye5.cenqua.com/browse/hudson/hudson/plugins/emotional-hudson
.hpiはここ。→https://hudson.dev.java.net/servlets/ProjectDocumentList?folderID=8963&expandFolder=8963&folderID=0
ネタを思いついた時点で7割方満足したのだけれど,ちょっと踏ん張って実際に作ってみたよ。
テストやビルドにコケるとハドソンさんの表情が変わるデス。順調な状態がしばらく続くと,ミセスハドソン(犬のほう)になりますなりません。:-P
それと,プラグインといっても,マジメにExtension Point利用してないし,結構エグいことしてるから,どっちかと言えばハックに近いと思われ。
#アホなもん作って,すんまそん。>川口さん
(追記) 公開したんで,ついでに使い方を(それほど大したことしないけど)。
"Job"のサイドメニュー"Configure"を開くと,下の方に"Post-build Actions"というセクションがあって,そこに"Emotional Hudson"という項目が追加されます。あとはそれをチェックして,保存するだけ。
プラグインが有効になれば,JobのStatus画面と各buildの画面で,ハドソンさんの表情が変わります。
つうわけで,ハドソンさんに楽しく仕事をさせてあげましょう。:-D
ExcelHelper(scriptom)を利用してExcelファイルの更新をする
Win32OLEよろしく,"workbook.Save()
"とするのかと思ったら違ってた。
ExcelHelperにちょっとした仕掛けがしてあって,このクラス,指定したExcelファイルを一時ファイルにコピーしてから操作する作りになってる。なんで,
new ExcelHelper().process(new File('test.xls')) { workbook -> workbook.Save() }
としても,'test.xls
'が保存されるんじゃなくて,ExcelHelperが勝手に作った一時ファイルを保存することになる。
さらに間の悪いことに,ExcelHelper.process()
は最後に一時ファイルを消しちゃうのだ。
結局,どうすればいいかと言えば,こうする。
new ExcelHelper().create(new File('test.xls'), new File('test.xls')) { workbook -> def worksheet = workbook.Sheets(1) worksheet.Cells(1,1).Value = 'hoge hoge' }
workbook.Save()
とかしない。ExcelHelper.create()
は,処理の最後に第一引数で指定されたExcelファイル*1を保存し,第二引数のファイルにコピーするので,ご覧の通り保存については,なんもしなくていい。
ちなみに,前述のExcelHelper.process()
の実装は,こうなってる。
void process(File inputXL, Closure closure) { create(inputXL, null, closure) }
第一,第二引数に同じ値を与えるのがイケてないと思うので,こんなの作りたくなるのが人情ってモンよ。
ExcelHelper.metaClass.update = {
File updateXls, Closure closure ->
delegate.create(updateXls, updateXls, closure)
}
しかし,こんな具合に俺様API作りまくるってのはどうなんだろ?
ある種,スクリプト言語の醍醐味なんだけど,不吉な臭いも醸すんだよねぇ。:-(
*1:正しくは,それをコピーした一時ファイル