Test::PAUSE::Permissions

たまに、そう、CPANディストリビューションの割合からすると1%ほどのことではあるのですが、他の人からモジュールを引き継いだときに必要なパーミッションを全部もらえていなかったとか、名前がかぶっているのに気づかなかったとかで、PAUSEの索引に登録してもらえないディストリビューションが生まれてしまうことがあります。

そういう問題を防ぐにはリリース前にPAUSEのパーミッションの確認しておくに限る、というわけで、Test::PAUSE::Permissionsというモジュールをリリースしました。

基本的な使い方は、SYNOPSISに書いてある通り、xt/perms.tのようなテストファイルにこう書いておくだけ。

use strict;
use warnings;
use Test::PAUSE::Permissions;

all_permissions_ok();

リリース時に(環境変数RELEASE_TESTINGを有効にして)このテストを実行すると、ディストリビューション内のpackageを抽出し、CPANからパーミッションの索引をダウンロードしてきて、それぞれのpackageについて、パーミッションの状況を確認します。持ち主が登録されていない(誰もそのpackageを登録したことがない)か、持ち主に自分が含まれていればテストが通りますし、自分がパーミッションを持っていないpackageが含まれていたらテストが失敗するので、パーミッションの持ち主に連絡して必要なパーミッションをもらうか、package名がかぶっている場合はお手元のpackageを修正する、あるいはMETAファイルの設定にno_indexを追加して索引に登録されないようにする、等の手段を講じてください。

Test::PAUSE::Permissionsは、METAファイル内のx_authorityというフィールドの値があればそこからリリースする作者のPAUSE IDを取得します。また、各.pmファイルに $AUTHORITYという変数が指定されていればそこからIDを取得します。どちらもない場合、モジュールのリリースにCPAN::Uploaderなどを使っている方ならホームディレクトリに.pauseという設定ファイルがあると思いますが、そこからIDを取得します。それすらもない場合は、テストをスキップします。また、このテストをツールなどで自動生成する場合は、all_permissions_ok()の引数としてPAUSE IDを渡してやれば、.pauseにそのIDが登録されているかのように振る舞います(ただし、ここで渡したIDよりも、x_authorityおよび$AUTHORITYの指定の方が優先されます)

修正: miyagawaさんにご指摘いただいて、0.04からはx_authority等をテストの対象に含めるのをやめました。情報自体は取得しますが、テストは.pause (およびall_permissions_ok()の引数)で指定されたPAUSE IDに対してのみ行います。