sbt環境に junit_xml_listener プラグインを追加した
sbtプロジェクトでjunitテストを実行するようにしたが、jenkins上で実行して結果をビューに表示するためにはテスト結果をxmlファイルに出力する必要がある。sbtのドキュメントのプラグインリストからjunitテスト結果をxmlファイルに出力するプラグインを探して使用してみた。
$ cd ~/git $ git co git@github.com:ijuma/junit_xml_listener.git $ cd junit_xml_listener $ sbt -Dsbt.version=0.13.0 > compile [error] /home/takamatu/git/junit_xml_listener/src/main/scala/eu/henkelmann/sbt/JUnitXmlTestsListener.scala:125: type mismatch; [error] found : sbt.testing.Event [error] required: org.scalatools.testing.Event [error] override def testEvent(event: TestEvent): Unit = for (e <- event.detail) {testSuite.addEvent(e)} [error] ^ [error] one error found [error] (compile:compile) Compilation failed [error] Total time: 7 s, completed 2013/09/14 9:01:40
コンパイルエラー原因を調べたら、sbtのテストフレームワーク変更によるものだった。
※プラグインコードのエラー箇所確認⇒継承しているクラス(sbt)のコードを確認⇒コードの変更履歴を確認
Initial version that uses new framework API in test-interface 1.0: · 18bc842 · sbt/sbt · GitHub
sbt側の以下の変更がコンパイルエラーの直接の原因だったので、プラグイン側のimport箇所を同じように修正し、クラス変更(Result⇒Status)とメソッド変更箇所を修正してコンパイルが通るようにできた。
testing/src/main/scala/sbt/TestReportListener.scala - import org.scalatools.testing.{Logger => TLogger, Event => TEvent, Result => TResult} + import testing.{Logger => TLogger, Event => TEvent, Status => TStatus}
200行に満たないファイルが一つだけの構成なので変更箇所は少なく、修正は単純な置き換えだけで済んだ。
プログラムを修正してから、他に同じように0.13対応の作業やった人がいるのではないかと思い、GitHubのネットワークを調べてみたら、kalmanb/junit_xml_listener · GitHubで同じような修正が行われていた。
ついでにリポジトリのフォーク状態を追跡してみた。
henkellmann (GitHub管理外) +-- hydrasi ← GitHub内のforkのルートになっているが、オリジナルは別サイト +-- cowclaw +-- valotrading +-- akisaarinen | +-- kalmanb ← ここのコミットが一番新しい +-- jrudolph +-- momania +-- ijuma +-- fgeller +-- gregorN4 | +-- NumberFour +-- rasch +-- aelesbao +-- chenkelmann ← オリジナル作者のようだが、後からGitHub参加して上記ネットワークから孤立している。
gitのローカルリポジトリで作成していたものを、作者とは別の人がGitHubに登録したような感じ。hydrasiは会社アカウントらしく、メンテしているのは同アカウントのメンバにいるwajiiiというアカウントの髭の人。
オリジナル作者が後からGitHubアカウント取得して、同じ名前のリポジトリを登録してコミットを追加しているようだが、最新コミットのコメントが「set sbt version to 0.13」となっているのに修正内容を見るとバージョン番号変えているだけで、sbtのテストフレームワーク変更への対応は入れていないようで、コンパイルだけやって動作確認はやっていないものと思われる。(コンパイルして動かしたら、思った通りエラーで動かず)
フォーク数から需要があることがわかるが、コミット数から求められている機能は少ない(今のままでもあまり困っていない)ということがわかる。(だから何って感じだが)
オリジナル作者のリポジトリに最新版をマージしてPullRequest
- オリジナル作者のリポジトリをフォークしてクローン
$ git clone git@github.com:tkmtmkt/junit_xml_listener.git
$ cd junit_xml_listener
- クローン元のリポジトリをリモート名upstreamとして設定
$ git remote add upstream git@github.com:chenkelmann/junit_xml_listener.git
- 最新コミットのあるリポジトリを、リモート名kalmanbとして設定
$ git remote add kalmanb git@github.com:kalmanb/junit_xml_listener.git
- リモートからのコミットを取得
$ git fetch upstream $ git fetch kalmanb
- 作業用ブランチを作成して移動(ブランチもとはオリジナル作者)
$ git co -b develop
- 最新コミットを作業用ブランチにマージ(コンフリクト無しだった)
$ git merge kalmanb/master
- 自分の気付いた修正分を追加
≪ソースコード修正≫
$ git add -u
$ git ci
- PullRequest用ブランチを作成してGitHubにpush
$ git co -b patch/1 $ git push origin patch/1
GitHub上でPullRequest実行