2012-10-08

Pending は邪悪な物であり、邪悪な物を生み出した人間には斧を

そらはーです!

RSpec で pending 使ってテストを一時的に無効化した事ある方は大勢いらっしゃるんじゃないでしょうか!

なんらかの事情で一時的に pending せざるを得ない状況ならともかく、pending したなら責任をもって該当のテストを治すか、そもそも不要なら消すなどといった対処をしてもらいたいものですね!

でも、実際来週までには!とか言っても放置する人間や、そもそも直さず1年,2年以上放置される事もしばしばあるのが現実です………

pending を放置する事によって、実はそれは(他の人にとって)かなり重要なテストで、そんなテストがpendingされてる訳ないと思った、他のメンバーによる変更で実はそのテストがコケて事故っていたという可能性も存在するわけです。

  1. 重要なテストをAさんが pending する (「テストは追って修正する」みたいな感じで)
  2. 比較的大きめの変更を B さんが加える。一応全部テストを回してグリーンな事を確認
  3. (実は重要なテストがAさんによって pending されている事に気づいていない)
  4. 事故っている

本当は pending を使わないのが一番なんですが、やむなく使った場合はちゃんと責任を持って直しましょ… 直せ!!! というわけで、催促するツールを作りました!

Pendaxes

cookpad/pendaxes

pend(ing) axes です! 今のところ rspec をサポートしてます!

メール等でコミットした人に個別で催促メールを送ったりできます!!!!

$ gem install pendaxes
$ cd /path/to/your/git/working/copy
$ pendaxes --init
$ pendaxes
$ open report.html

とりあえず試すには、working copy の中で pendaxes --init を叩くとそのディレクトリで .pendaxes.yml を吐き出すので、そこで pendaxes を実行すると report.html を吐き出します。

後述するメール設定をすると、この report.html のようなメールがコミッター毎にその人のコミットしたpendingがメールで送られると思えば良いです。

(git grep とかを使ってるので git リポジトリと git が必要です)

(Ruby 1.9.2 以降で動きます。それ以前は保証しません)

設定ファイル

https://github.com/cookpad/pendaxes/wiki/Configuration

を参照してください… ちょっと複雑です。以下に一例を載せるので参考にしてください><

メールを送る

notifications に以下のような行を足せば動きます。mail.gemsendmail delivery_method を使って、各コミッターにメールを送信します。

- use: mail
  reporter:
    use: haml
  from: no-reply@example.com
  delivery_method: sendmail

こんなメールが飛びます:

cron で回してみる

cron で回す際は、config.yml に git clone 先と clone 元を指定してあげると pendaxes が pull まで面倒を見てくれて便利です。pendaxes --init で指定付きで生成できます。

$ pendaxes --init config.yml https://github.com/cookpad/pendaxes.git /tmp/pendaxes

で、/tmp/pendaxeshttps://github.com/cookpad/pendaxes.git を clone して自動で git fetchgit reset --hard で最新のコードに更新してくれる config.yml を生成してくれます

$ pendaxes config.yml

で生成した config.yml を実行してくれます。後は同じように config.yml を編集してメール等を送る設定を追加した上で cron で回せばいいと思います。

効果

毎朝6時に cron で回して送るようにしたところ、だいたい放置されていた大量の pending がどんどん数日で消えて行きました! わーい!

…あれ?

Published at 2012-10-08 18:10:37 +0900 | Permalink