package Analizo::Command::metrics_batch;
use Analizo -command;
use parent qw(Analizo::Command);
use strict;
use warnings;
use Analizo::Batch::Directories;
use Analizo::Batch::Output::CSV;
use File::Basename;
# ABSTRACT: processes several source code directories in batch
=head1 NAME
analizo-metrics-batch - processes several source code directories in batch
=head1 USAGE
analizo metrics-batch [OPTIONS] [ [ ...]]
=cut
sub usage_desc { "%c metrics-batch %o [ [ ...]]" }
sub command_names { qw/metrics-batch/ }
sub opt_spec {
return (
[ 'output|o=s', 'output file name', { default => 'metrics.csv' } ],
[ 'quiet|q', 'supresses messages to standard output' ],
[ 'parallel|p=i', 'activates support for parallel processing' ],
);
}
sub validate {
my ($self, $opt, $args) = @_;
if ($opt->output && ! -w dirname($opt->output)) {
$self->usage_error("Output is not writable!");
}
}
sub execute {
my ($self, $opt, $args) = @_;
my $runner = undef;
if ($opt->parallel) {
require Analizo::Batch::Runner::Parallel;
$runner = Analizo::Batch::Runner::Parallel->new($opt->parallel);
} else {
require Analizo::Batch::Runner::Sequential;
$runner = Analizo::Batch::Runner::Sequential->new;
}
unless ($opt->quiet) {
$runner->progress(
sub {
my ($job, $done, $total) = @_;
printf("I: Processed %s.\n", $job->id);
}
);
}
my $batch = Analizo::Batch::Directories->new(@$args);
my $output = Analizo::Batch::Output::CSV->new;
$output->file($opt->output);
$runner->run($batch, $output);
}
=head1 DESCRIPTION
Processes several source code directories in batch running B
for each and optionally consolidating the results in a single data file.
B is useful when you want to analyze several projects at
once, or several different versions of the same project. You pass a list of
directories in the command line and each one will be analyzed as a separate
project. If no directories are passed in the command line, all of the
subdirectories of the current directory will be analized.
For example, suppose you want to process 5 consecutive releases of
I, from version 0.1.0 to 0.5.0.
=over
=item
First you unpack the release tarballs for those versions in a directory, say
/tmp/analysis:
$ ls -1 /tmp/analysis
myproject-0.1.0
myproject-0.2.0
myproject-0.3.0
myproject-0.4.0
myproject-0.5.0
=item
Then you change to that directory, and then run B:
$ cd /tmp/analysis
$ analizo metrics-batch
=item
B will collect the metrics
data in a single .csv file, that you can import in spreadsheet software or
statistical packages.
=back
analizo metrics-batch is part of the analizo suite.
=head1 OPTIONS
=over
=item --parallel N, -p N
Activates support for parallel processing, using I concurrent worker
processes. Usually you will want N to be less than or equal to the number of
CPUs in your machine.
Note that analizo metrics extraction is a CPU-intensive process, so setting N
as the exacty number of CPUs you have may bring your machine to an unusable
state.
=item --output , -o
Write output to . Default is to write to I. That file can
then be opened in data analysis programs.
=item --quiet, -q
Suppresses messages to standard output.
=back
=head1 COPYRIGHT AND AUTHORS
See B.
=cut
1;