Edit file File name : cpancover Content :#!/usr/bin/perl # Copyright 2002-2019, Paul Johnson (paul@pjcj.net) # This software is free. It is licensed under the same terms as Perl itself. # The latest version of this software should be available from my homepage: # http://www.pjcj.net use 5.26.0; use warnings; our $VERSION = '1.33'; # VERSION use Devel::Cover::Collection; use Cwd qw( abs_path cwd ); use Fcntl ":flock"; use Getopt::Long; use Pod::Usage; # use Carp; $SIG{__DIE__} = \&Carp::confess; $|++; my $Options = { bin_dir => abs_path($0) =~ s|/cpancover$||r, build => 1, compress_old_versions => 0, docker => "docker", dryrun => 0, force => 0, generate_html => 0, latest => 0, local => 0, local_build => 0, modules => [], output_file => "index.html", report => "html_basic", results_dir => cwd(), timeout => 7200, # two hours verbose => 0, workers => 0, }; sub get_options { die "Bad option" unless GetOptions($Options, qw( bin_dir=s build! compress_old_versions=i docker=s dryrun! force! generate_html! help|h! info|i! latest! local! local_build! module_file=s modules=s output_file=s report=s results_dir=s timeout=i verbose! version|v! workers=i )); say "$0 version " . __PACKAGE__->VERSION and exit 0 if $Options->{version}; pod2usage(-exitval => 0, -verbose => 0) if $Options->{help}; pod2usage(-exitval => 0, -verbose => 2) if $Options->{info}; } sub newcp { Devel::Cover::Collection->new( map { $_ => $Options->{$_} } qw( bin_dir docker dryrun force local modules output_file report results_dir timeout verbose workers ) ) } sub main { # TODO - only one instance should run at a time get_options; if ($Options->{latest}) { my $cp = newcp; $cp->get_latest; return; } if ($Options->{local_build}) { my $cp = newcp; $cp->set_modules(@ARGV); $cp->local_build; return; } if ($Options->{module_file}) { my $cp = newcp; $cp->set_module_file($Options->{module_file}); $cp->cover_modules; } if ($Options->{build}) { if (@ARGV) { my $cp = newcp; $cp->set_modules(@ARGV); $cp->cover_modules; } elsif (! -t STDIN) { my @modules; while (<>) { chomp; push @modules, split; } my $cp = newcp; $cp->set_modules(@modules); $cp->cover_modules; } else { my $cp = newcp; $cp->cover_modules; } } if ($Options->{generate_html}) { my $cp = newcp; $cp->generate_html; } if ($Options->{compress_old_versions}) { my $cp = newcp; $cp->compress_old_versions($Options->{compress_old_versions}); } } main __END__ =head1 NAME cpancover - report coverage statistics on CPAN modules =head1 VERSION version 1.33 =head1 SYNOPSIS cpancover -help -info -version -collect -redo_cpancover_html -redo_html -force -dryrun -modules module_name -results_dir /path/to/dir -outputdir /path/to/dir -outputfile filename.html -report report_name -generate_html -compress_old_versions number_to_keep -local =head1 DESCRIPTION =head1 OPTIONS The following command line options are supported: -h -help - show help -i -info - show documentation -v -version - show version -collect - collect coverage from modules (on) -directory - location of the modules ($cwd) -dryrun - don't execute (for some commands) (off) -force - recollect coverage (off) -modules - modules to use (all in $dir) -outputdir - where to store output ($directory) -outputfile - top level index (coverage.html) -redo_cpancover_html - don't set default modules (off) -redo_html - force html generation for modules (off) -report - report to use (html_basic) -generate_html - generate html (off) -compress_old_versions - compress data older than n versions (3) -local - use local (uninstalled) code (off) =head1 DETAILS =head1 REQUIREMENTS Collect coverage for results and create html, csv and json output. The modules L<Template> and L<Parallel::Iterator> are required. =head1 EXIT STATUS The following exit values are returned: 0 All operations were completed successfully. >0 An error occurred. =head1 SEE ALSO L<Devel::Cover> =head1 BUGS Undocumented. =head1 LICENCE Copyright 2002-2019, Paul Johnson (paul@pjcj.net) This software is free. It is licensed under the same terms as Perl itself. The latest version of this software should be available from my homepage: http://www.pjcj.net =cut Save