Skip to content

Instantly share code, notes, and snippets.

@wchristian
Created March 22, 2011 11:27
Show Gist options
  • Save wchristian/881083 to your computer and use it in GitHub Desktop.
Save wchristian/881083 to your computer and use it in GitHub Desktop.
find_repreqs.pl
use strict;
use warnings;
package prereqs;
use Perl::PrereqScanner 0.100830; # bugfixes
use PPI;
use Version::Requirements 0.100630; # merge with 0-min bug
use version;
use File::Find::Rule ();
use File::Slurp;
use Module::CoreList;
use Smart::Comments;
my @files = File::Find::Rule->in('svn');
@files = changed( @files );
@files = grep is_perl_file( $_ ), @files;
register_prereqs();
1;
sub register_prereqs {
my $req = Version::Requirements->new;
my @modules = ( 'perl' );
push @modules, keys %{ $Module::CoreList::version{"5.008006"} };
foreach my $file (@files) { ### |===[%] |
# store module name, to trim it from require list later on
if ( $file =~ /\.pm$/ ) {
my $module = $file;
$module =~ s/svn\///;
$module =~ s/utils\/perl\///;
$module =~ s{^(?:t/)?lib/}{};
$module =~ s{\.pm$}{};
$module =~ s{/}{::}g;
push @modules, $module;
}
# parse a file, and merge with existing prereqs
my $file = read_file $file;
my $file_req = Perl::PrereqScanner->new->scan_string($file);
$req->add_requirements($file_req);
}
# remove prereqs shipped with current dist
$req->clear_requirement($_) for @modules;
# we're done, return what we've found
my %got = %{ $req->as_string_hash };
$_ ||= '' for values %got;
print "$_ $got{$_}\n" for sort keys %got;
return;
}
sub changed {
my ( @changed ) = @_;
@changed = grep { !/^[D_]/ } @changed;
@changed = grep { !/\/$/ } @changed;
@changed = grep { !m@/\.git/@ } @changed;
@changed = grep { !m@/server/@ } @changed;
@changed = grep { !/nytprof/ } @changed;
@changed = grep { !/\.(db|sql|exe|xml|out|json|txt|mk|doc|0|1|2|3|4|5|6|7|8|9|10|komodoproject|html|dot|png|js|cfg|csv|genconf)$/ } @changed;
@changed = grep -f, @changed;
return @changed;
}
sub is_perl_file {
my ( $file ) = @_;
return 1 if $file =~ m/\.(pl|pm|t)$/;
return 1 if read_file( $file ) =~ m/^#!.*perl.*/;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment