[Bps-public-commit] r10144 - in Test-Dependencies/trunk: lib/Test lib/Test/Dependencies

zev at bestpractical.com zev at bestpractical.com
Thu Dec 27 03:33:16 EST 2007


Author: zev
Date: Thu Dec 27 03:33:15 2007
New Revision: 10144

Added:
   Test-Dependencies/trunk/lib/Test/Dependencies/
   Test-Dependencies/trunk/lib/Test/Dependencies/Heavy.pm
Modified:
   Test-Dependencies/trunk/   (props changed)
   Test-Dependencies/trunk/MANIFEST
   Test-Dependencies/trunk/lib/Test/Dependencies.pm

Log:
 r10362 at cliffjumper:  zev | 2007-12-27 02:18:02 -0500
 * split code that actually determines what modules a file uses off from main module


Modified: Test-Dependencies/trunk/MANIFEST
==============================================================================
--- Test-Dependencies/trunk/MANIFEST	(original)
+++ Test-Dependencies/trunk/MANIFEST	Thu Dec 27 03:33:15 2007
@@ -11,6 +11,7 @@
 inc/Module/Install/Win32.pm
 inc/Module/Install/WriteAll.pm
 lib/Test/Dependencies.pm
+lib/Test/Dependencies/Heavy.pm
 Makefile.PL
 MANIFEST			This list of files
 META.yml

Modified: Test-Dependencies/trunk/lib/Test/Dependencies.pm
==============================================================================
--- Test-Dependencies/trunk/lib/Test/Dependencies.pm	(original)
+++ Test-Dependencies/trunk/lib/Test/Dependencies.pm	Thu Dec 27 03:33:15 2007
@@ -3,13 +3,11 @@
 use warnings;
 use strict;
 
-use B::PerlReq;
 use Carp;
 use File::Find::Rule;
-use IPC::Cmd qw/run/;
 use Module::CoreList;
-use PerlReq::Utils qw(path2mod);
 use YAML qw(LoadFile);
+use Test::Dependencies::Heavy;
 
 use base 'Test::Builder::Module';
 
@@ -89,54 +87,23 @@
   return $rule->in(grep {-e $_} @dirs);
 }
 
-sub _taint_flag {
-  my $filename = shift;
-  open FILE, $filename
-    or warn "Could not open '$filename': $!";
-  my $shebang = <FILE>;
-  close FILE;
-  if (defined $shebang) {
-    chomp $shebang;
-    if ($shebang =~ m/^#!.*perl.*-T/) {
-      return '-T';
-    }
-  }
-  return '';
-}
-
-sub _get_modules_used_in {
+sub _get_modules_used_in_dir {
   my @dirs = @_;
   my @sourcefiles = _get_files_in(@dirs);
-  my $perl = $^X;
-  my %deps;
+  my @modules;
+
   foreach my $file (sort @sourcefiles) {
-    my $taint = _taint_flag($file);
-    my ($success, $error_code, $full_buf, $stdout_buf, $stderr_buf) =
-      run(command => [$perl, $taint, '-MO=PerlReq', $file]);
-    die "Could not compile '$file': error code: $error_code"
-      unless $success;
-
-    # for some reason IPC::Run doesn't always split lines correctly
-    my @lines;
-    push @lines, split /\n/ foreach @$stdout_buf;
-
-    foreach my $line (@lines) {
-      chomp $line;
-      my $x = $line;
-      $line =~ m/^perl\((.+)\)$/;
-      # path2mod sucks, but the mod2path that B::PerlReq uses sucks, too
-      $deps{path2mod($1)}++;
-    }
+    push @modules, get_modules_used_in_file($file);
   }
-  return keys %deps;
+  return @modules;
 }
 
 sub _get_used {
-  return _get_modules_used_in(qw/bin lib/);
+  return _get_modules_used_in_dir(qw/bin lib/);
 }
 
 sub _get_build_used {
-  return _get_modules_used_in(qw/t/);
+  return _get_modules_used_in_dir(qw/t/);
 }
 
 =head1 EXPORTED FUNCTIONS

Added: Test-Dependencies/trunk/lib/Test/Dependencies/Heavy.pm
==============================================================================
--- (empty file)
+++ Test-Dependencies/trunk/lib/Test/Dependencies/Heavy.pm	Thu Dec 27 03:33:15 2007
@@ -0,0 +1,148 @@
+package Test::Dependencies::Heavy;
+
+use warnings;
+use strict;
+
+use B::PerlReq;
+use IPC::Cmd qw/run/;
+use PerlReq::Utils qw(path2mod);
+use Exporter 'import';
+
+our @EXPORT = qw/get_modules_used_in_file/;
+
+=head1 NAME
+
+Test::Dependencies::Heavy - Heavy style for checking for dependencies.
+
+=head1 SYNOPSIS
+
+You shouldn't have to include this module yourself.  Look at the
+'style' option of L<Test::Dependencies>.
+
+This module exports exactly one function.
+
+=head1 EXPORTED FUNCTIONS
+
+=head2 get_modules_used_in_file
+
+Returns all the modules that the passed file uses.  This style
+determines this list by actually compiling the code.  This could be a
+dangerous operation if the file does bad things in BEGIN blocks!
+
+=cut
+
+sub get_modules_used_in_file {
+  my $file = shift;
+  my $perl = $^X;
+  my %deps;
+
+  my $taint = _taint_flag($file);
+  my ($success, $error_code, $full_buf, $stdout_buf, $stderr_buf) =
+    run(command => [$perl, $taint, '-MO=PerlReq', $file]);
+  die "Could not compile '$file': error code: $error_code"
+    unless $success;
+
+  # for some reason IPC::Run doesn't always split lines correctly
+  my @lines;
+  push @lines, split /\n/ foreach @$stdout_buf;
+
+  foreach my $line (@lines) {
+    chomp $line;
+    my $x = $line;
+    $line =~ m/^perl\((.+)\)$/;
+    # path2mod sucks, but the mod2path that B::PerlReq uses sucks, too
+    $deps{path2mod($1)}++;
+  }
+  return keys %deps;
+}
+
+sub _taint_flag {
+  my $filename = shift;
+  open FILE, $filename
+    or warn "Could not open '$filename': $!";
+  my $shebang = <FILE>;
+  close FILE;
+  if (defined $shebang) {
+    chomp $shebang;
+    if ($shebang =~ m/^#!.*perl.*-T/) {
+      return '-T';
+    }
+  }
+  return '';
+}
+
+=head1 AUTHOR
+
+=over 4
+
+=item * Zev Benjamin C<< <zev at cpan.org> >>
+
+=back
+
+Please report any bugs or feature requests to
+C<bug-test-dependencies at rt.cpan.org>, or through the web interface at
+L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Dependencies>.
+I will be notified, and then you'll automatically be notified of progress on
+your bug as I make changes.
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+    perldoc Test::Dependencies::Heavy
+
+You can also look for information at:
+
+=over 4
+
+=item * AnnoCPAN: Annotated CPAN documentation
+
+L<http://annocpan.org/dist/Test-Dependencies>
+
+=item * CPAN Ratings
+
+L<http://cpanratings.perl.org/d/Test-Dependencies>
+
+=item * RT: CPAN's request tracker
+
+L<http://rt.cpan.org/NoAuth/Bugs.html?Dist=Test-Dependencies>
+
+=item * Search CPAN
+
+L<http://search.cpan.org/dist/Test-Dependencies>
+
+=back
+
+=head1 LICENCE AND COPYRIGHT
+
+    Copyright (c) 2007, Best Practical Solutions, LLC. All rights reserved.
+
+    This module is free software; you can redistribute it and/or modify it
+    under the same terms as Perl itself. See perlartistic.
+
+    DISCLAIMER OF WARRANTY
+
+    BECAUSE THIS SOFTWARE IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+    FOR THE SOFTWARE, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+    OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+    PROVIDE THE SOFTWARE "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER
+    EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+    WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE
+    ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE SOFTWARE IS WITH
+    YOU. SHOULD THE SOFTWARE PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL
+    NECESSARY SERVICING, REPAIR, OR CORRECTION.
+
+    IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+    WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+    REDISTRIBUTE THE SOFTWARE AS PERMITTED BY THE ABOVE LICENCE, BE LIABLE
+    TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL, OR
+    CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
+    SOFTWARE (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
+    RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
+    FAILURE OF THE SOFTWARE TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
+    SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+    DAMAGES.
+
+=cut
+
+1;



More information about the Bps-public-commit mailing list