$shibayu36->blog;

クラスター株式会社のソフトウェアエンジニアです。エンジニアリングや読書などについて書いています。

変更した箇所だけTest::UsedModulesで不要なuseを検知する

blog.shibayu36.org

以前こんなブログを書いたが、やはりCIでチェックしたいと考えた。

全ファイルをチェックしようとすると時間がかかってしまうので毎回のテストでは実行したくない。しかし、毎回のテストで実行しないと結局はmerge前に検出するのが難しくなる。この背景から、どうせgitを使ってるし、変更点だけチェックすればいいのではと考えた。

gitで変更があったファイルの一覧を取得するには

git diff --stat --name-only master...HEAD

とすれば良い。

これを利用すれば以下のようにして変更点だけテストできる。

use Test::More;
use Test::UsedModules;

my $base_branch = "origin/master";
my $changed_files = [
    split "\n", qx{git diff --stat --name-only $base_branch...HEAD}
];
my $target_files = [ grep { $_ =~ /(?:\.pm|\.t)\z/ } @$changed_files ];
for my $file (@$target_files) {
    used_modules_ok($file);
}

done_testing();