Emotional Hudsonにやらしいバグが見つかったよ

https://hudson.dev.java.net/issues/show_bug.cgi?id=4417


「Emotional Hudsonをdisabledにしたら、今までビルドが見えなくなったYO」とバグレポをいただいたので、ちょいと調べてみました。


どうやら、Hudsonが生成するbuild.xmlの形式が変わったことが原因のようです。たとえば、Emotional Hudsonを作成した当時のHudson (1.200)で、Emotional Hudsonを有効にすると以下のようなbuild.xmlが生成されます。

<build>
       :
  <actions class="java.util.concurrent.CopyOnWriteArrayList">
    <hudson.plugins.emotional__hudson.EmotionalHudsonAction>
      <result reference="../../../result"/>
    </hudson.plugins.emotional__hudson.EmotionalHudsonAction>
  </actions>
</build>


それが最新のHudson(1.323)では、次のように変わっていました。

<build>
  <actions>
        :
    <hudson.plugins.emotional__hudson.EmotionalHudsonAction>
      <result>FAILURE</result>
    </hudson.plugins.emotional__hudson.EmotionalHudsonAction>
  </actions>
  <number>3</number>
  <result reference="../actions/hudson.plugins.emotional__hudson.EmotionalHudsonAction/result"/>


みると、タグの外に出ているタグが悪さをしているようです。
要するに、Emotional Hudsonをdisabledもしくは削除しても、各ビルドのbuild.xmlはそのままの内容で残り続けるため、各ビルドが存在しなくなったEmotional Hudsonを参照しようとして不具合を起こしているようです。


なお、 1.322 -> 1.321 -> 1.300 -> 1.200 -> 1.275 の順で追跡調査を行ってみましたが、1.200ではEmotional Hudson有効にして数回ビルドを実施、その後に無効化しても本件のような問題は起きませんでした(まあ、そんくらいはテストしてたし)。
1.275の場合、Emotional Hudson有効時のビルドのランプや天気アイコンが参照できなくなりましたが、ビルドそのものは無効にしても参照することができました。ちなみに、1.275の時のbuild.xmlは次のようになります(1.300系とビミョーに構造が異なります)。

<build>
  <actions class="java.util.concurrent.CopyOnWriteArrayList">
    <hudson.plugins.emotional__hudson.EmotionalHudsonAction>
      <result>FAILURE</result>
    </hudson.plugins.emotional__hudson.EmotionalHudsonAction>
  </actions>
  <number>2</number>
  <result reference="../actions/hudson.plugins.emotional__hudson.EmotionalHudsonAction/result"/>


1.300以降は、報告にあるようにEmotional Hudsonを無効にすると、有効時のビルドが参照できなくなります。おそらくHudsonが、エラーを吐いたビルドに対する扱いをより厳格にするようになったと推測します。できれば、どこが仕様変更点なのか特定したかったんですが、力尽きました(もう寝る)。


ps1.
本件がEmotional Hudson固有の不具合ではなく、Publisher系のプラグインでEmotional Hudsonと似たようなことを行っていれば再現しそうな感じを受けます。試しに、ci-gameプラグインでも試してみましたが、こちらはタグを展開しないようで、再現はしませんでした。ただ、チャックノリス・プラグインはEmotional Hudsonと同じ匂いがするんで、公開されたら試してみようと思います。再現しなかったら、きっとそこに解決の糸口があるに違いない。:-)
http://blog.cliffano.com/2009/09/10/rfc-chucknorris-plugin/


ps2.
現時点ではEmotional Hudsonを無効にするると、有効時に実行したビルドが参照できなくなります。可能ならばEmotional Hudsonを有効のままにしておくか、面倒ですが手作業で各build.xmlの該当行を削除するしかないでしょう。根本的な解決を行おうとしたら、プラグイン単独で解決できるかどうかも不確かなのでアイデア募集します。


そんなわけで、もれなくhud子さんとhud美さんにも同じ不具合がついてきてますんで、ご注意ください。
#すんません、すんません。