File: Run.pm

package info (click to toggle)
cpanminus 1.7048-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,372 kB
  • sloc: perl: 14,713; makefile: 5
file content (40 lines) | stat: -rw-r--r-- 1,039 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
package xt::Run;
use strict;
use base qw(Exporter);
our @EXPORT = qw(run run_L last_build_log);

use Capture::Tiny qw(capture);
use File::Temp qw(tempdir);

my $executable = $ENV{FATPACKED_TEST} ? './cpanm' : './script/cpanm.PL';

delete $ENV{PERL_CPANM_OPT};
$ENV{PERL_CPANM_HOME} = tempdir(CLEANUP => 1);

sub run_L {
    run("-L", "$ENV{PERL_CPANM_HOME}/perl5", @_);
}

sub run {
    my @args = @_;

    # use metacpan's mirror in the tests
    my @mirrors;
    unless (grep /--mirror($|=)/, @args) {
        @mirrors = ('--mirror', 'http://cpan.metacpan.org/');
    }

    my @notest = $ENV{TEST} ? ("--no-notest") : ("--notest");
    my($stdout, $stderr, $exit) = capture {
        system($^X, $executable, @notest, "--quiet", "--reinstall", @mirrors, @args);
    };
    ::diag($stderr) if $stderr and !$ENV{NODIAG};  # Some tests actually want stderr
    return wantarray ? ($stdout, $stderr, $exit) : $stdout;
}

sub last_build_log {
    open my $log, "<", "$ENV{PERL_CPANM_HOME}/latest-build/build.log";
    join '', <$log>;
}

1;