stackageの特定のresolverに上がっているパッケージバージョンを調べるツール
指定したHaskellパッケージのバージョン番号が指定したstackage resolverでいくつなのかを調べるコマンドラインツールを作った。
例えばこのように使う。
$ staversion --resolver lts-4.2 --resolver lts-7.0 conduit base ------ lts-4.2 conduit ==1.2.6.1, base ==4.8.2.0 ------ lts-7.0 conduit ==1.2.7, base ==4.9.0.0
自分はHaskellパッケージを作る際、travis-CIを使ってresolverはいくつか変えながらテストを回し、その結果を依存先パッケージのバージョン範囲(.cabalファイルのbuild-dependsセクション)に反映させている。その場合、テストした各resolver(特にそのうちの最新と最古のもの)における依存先パッケージのバージョン番号を知る必要がある。stackage.orgのWebサイトでは、最新のLTSやnightlyにおけるパッケージバージョン番号は分かっても、古いresolverでのバージョン番号をまとめて表示することができない。
staversionを使えば、こういったバージョン番号調査をまとめて実施できる。現状では、stackがローカルにダウンロードして置いているビルドプランファイルを読み込んでバージョン番号を調べる。のちのち、自らネットワークを通じてビルドプランファイルをダウンロードできるようにする予定。
ところで、そもそも.cabalの依存先パッケージのバージョン番号範囲はどれだけマジメに書くべきなのだろうか。バージョン上限を入れるとやはりいろいろ面倒くさい。この間hspecのメジャーバージョンアップがあったが、コードの対応作業は全く必要ないにもかかわらず、ビルドを検証して.cabalを書き直す作業だけでそれなりに大変だった。