Routinely eliminating annotations about probably outdated reports
[andk-cpan-tools.git] / bin / testadozen.pl
blob26f5c0a0c992dfa9747731d32734b9821f47fda1
1 #!/usr/bin/perl
3 =head1 NAME
5 testadozen - randomly pick several perls to test a distro
7 =head1 SYNOPSIS
9 testadozen [options] distro ...
11 =head1 OPTIONS
13 =over 8
15 =cut
17 my @opt = <<'=back' =~ /B<--(\S+)>/g;
19 =item B<--dir=s>
21 Default: /home/src/perl/repoperls/installed-perls/perl
23 The directory where the perls are found
25 =item B<--n=i>
27 Default: 12
29 The number of tests to run.
31 =item B<--pat=s>
33 Default: v*
35 Only pick directories matching the glob.
37 =back
39 =head1 DESCRIPTION
43 =cut
45 use Getopt::Long;
46 use Hash::Util qw(lock_keys);
47 use Pod::Usage qw(pod2usage);
48 use Text::Glob qw(match_glob);
49 use Time::HiRes qw(sleep);
51 our %Opt;
52 lock_keys %Opt, map { /([^=]+)/ } @opt;
53 GetOptions(\%Opt,
54 @opt,
55 ) or pod2usage(1);
57 my(@distro) = @ARGV or pod2usage(1);
59 $Opt{n} = 12 unless defined $Opt{n};
61 $Opt{pat} = "v*" unless defined $Opt{pat};
63 $Opt{dir} = "/home/src/perl/repoperls/installed-perls/perl" unless defined $Opt{dir};
65 opendir my $dh, $Opt{dir} or die "Could not open '$Opt{dir}': $!";
66 my @cand;
67 for my $dirent (readdir $dh) {
68 next if $dirent =~ /^\.\.?$/;
69 if ($Opt{pat}) {
70 next unless match_glob $Opt{pat}, $dirent;
72 push @cand, $dirent;
74 for (my $i = 0; $i < $Opt{n}; $i++) {
75 my $j = int rand @cand;
76 my $dirent = splice @cand, $j, 1;
77 warn "$dirent\n";
78 for my $distro (@distro) {
79 0 == system "$Opt{dir}/$dirent/bin/perl -MCPAN -e 'install q[$distro]'";
80 sleep 0.2;