in reply to Get the top-level module name from a Git repository/dist directory
I worked up a test hack that so far appears to work, using a check with MetaCPAN::Client. Essentially it iterates over each file found, and stops checking after it finds one that's a distribution.
I never thought of the Meta files as Anonymonk suggested. I like that idea better as it will save a load of processing time and in some cases many repeated calls to MetaCPAN's API. I'll write out some test code using a meta parser as well and do some testing.
sub revdeps { my $self = shift; load 'MetaCPAN::Client'; my $mcpan = MetaCPAN::Client->new; my $log = $log->child('revdeps'); $log->_6('running --revdep'); my $mod; find({ wanted => sub { return if $mod; if (-f && $_ =~ /\.pm$/){ $log->_6("processing module '$_'"); s|lib/||; s|/|-|g; s|\.pm||; $log->_6("module file converted to '$_'"); my $dist; eval { $dist = $mcpan->distribution($_); }; $mod = $_ if ref $dist; } }, no_chdir => 1, }, 'lib/' ); $log->_7("using '$mod' as the project we're working on"); my @revdeps = $self->_get_revdeps($mod); return @revdeps; }
|
|---|