mercurialアドベントカレンダー2011 21日目precommit hookでrequirements.txtをチェックする

mercurialアドベントカレンダー21日目です。

今回は小ネタでいきます。

pythonで開発しているときに、依存するライブラリはsetup.pyに書きますが、テストツールやドキュメンテーションツールはsetup.pyに書かないわけです。

そういうのはrequirements.txtに書いとくのです。

あと、setup.pyには細かいバージョン指定をせずに、これまたrequirements.txtに書くことが多いのですが、開発しているうちにrequirements.txtを更新するのを忘れてしまうわけです。

まあ、こんなのpip freezeしてあげればいいのですが、そんなの機械がやってくれよ!

ということでprecommit hookでrequirements.txtが古くなっていないか確認します。

あと、virtualenvで作業してるのになぜかプロジェクトに関係ないライブラリが入ってしまってないかの確認にもなります。

 

[hooks]

precommit.freeze = pip freeze | sed "/-e .*$/d" | diff - requirements.txt

非常に不親切なエラーが出ますがまあ、実際の環境とrequirements.txtの内容が違ってたらそのdiffが表示されて、commitされないようになります。
今開発しているものもeditableでインストールしていてpip freezeに含まれますが、 "-e" で始まるので、それをsedで消してから、確認します。
そうしないとリビジョンが含まれているので、毎回diffにひっかかってしまいますからね。

ということで、21日目の内容はおしまい。

次は@sabo2さんでいいのでしょうか?