WorePAN 0.02
Parse::PMFileのテストに多用したWorePANの方も、内部の索引生成をCPAN::ParseDistributionからParse::PMFile(+PAUSE由来のもろもろのコード)に切り替えて0.02としてリリースしました。
また、0.02ではCPANミラーの中身の調査を楽にできるよう、walkというメソッドを追加しました。使い方は以下の通りです。
use strict; use warnings; use WorePAN; use Parse::PMFile; use YAML::Tiny qw/LoadFile/; my $worepan = WorePAN->new(root => '/path/to/minicpan'); $worepan->walk(callback => sub { my ($dir, $path, $dist) = @_; my $mtime = $dist->mtime; my $metadata = LoadFile($dir->file('META.yml')); my $parser = Parse::PMFile->new($metadata); $dir->recurse(callback => sub { my $file = shift; return unless $file =~ /\.pm$/; my $packages_info = $parser->parse($file); ... }); });
walkメソッドのコールバックには、WorePANミラー内の各ディストリビューションを展開した一時ディレクトリ(を格納しているPath::Extended::Dirオブジェクト)、識別用のパス(F/FO/FOO/Foo-Bar-1.24.tar.gzなど)、展開前のディストリビューションを格納しているPath::Extended::Fileオブジェクトが渡ります。
この例ではさらにその一時ディレクトリの中身をなめて個々の.pmファイルに対して処理を行っていますが、もちろん特定のファイルのテストさえ行えればよいのであれば、META.ymlの情報をロードしている箇所のように、$dirから直接ファイルを指定すればよいでしょう。以下の例は指定した各ディストリビューションがModule::Installを使っているか確認するテストです。
use strict; use warnings; use WorePAN; use Test::More; my @files = qw( F/FO/FOO/Foo-Bar-1.23.tar.gz ); my $worepan = WorePAN->new( files => \@files, local_mirror => '/path/to/darkpan' no_network => 0, use_backpan => 1, cleanup => 1, ); $worepan->walk(callback => sub { my ($dir, $path) = @_; ok -f $dir->file('inc/Module/Install.pm'), "$path: Module::Install exists"; }); done_testing;
以上、author test用のツールとしてお役に立てばさいわいです。