line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
12
|
|
|
12
|
|
121657
|
use strict; |
|
12
|
|
|
|
|
39
|
|
|
12
|
|
|
|
|
400
|
|
2
|
12
|
|
|
12
|
|
92
|
use warnings; |
|
12
|
|
|
|
|
37
|
|
|
12
|
|
|
|
|
1094
|
|
3
|
|
|
|
|
|
|
package Dist::Zilla::Plugin::Run::Role::Runner; |
4
|
|
|
|
|
|
|
# vim: set ts=8 sts=2 sw=2 tw=115 et : |
5
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
our $VERSION = '0.049'; |
7
|
|
|
|
|
|
|
|
8
|
12
|
|
|
12
|
|
95
|
use Moose::Role; |
|
12
|
|
|
|
|
42
|
|
|
12
|
|
|
|
|
155
|
|
9
|
12
|
|
|
12
|
|
61651
|
use namespace::autoclean; |
|
12
|
|
|
|
|
44
|
|
|
12
|
|
|
|
|
98
|
|
10
|
12
|
|
|
12
|
|
813
|
use File::Spec (); # core |
|
12
|
|
|
|
|
43
|
|
|
12
|
|
|
|
|
256
|
|
11
|
12
|
|
|
12
|
|
377
|
use Config (); # core |
|
12
|
|
|
|
|
37
|
|
|
12
|
|
|
|
|
350
|
|
12
|
12
|
|
|
12
|
|
89
|
use Moose::Util 'find_meta'; |
|
12
|
|
|
|
|
35
|
|
|
12
|
|
|
|
|
139
|
|
13
|
|
|
|
|
|
|
|
14
|
|
|
|
|
|
|
has perlpath => ( |
15
|
|
|
|
|
|
|
is => 'ro', |
16
|
|
|
|
|
|
|
isa => 'Str', |
17
|
|
|
|
|
|
|
lazy => 1, |
18
|
|
|
|
|
|
|
builder => 'current_perl_path', |
19
|
|
|
|
|
|
|
); |
20
|
|
|
|
|
|
|
|
21
|
|
|
|
|
|
|
has censor_commands => ( |
22
|
|
|
|
|
|
|
is => 'ro', |
23
|
|
|
|
|
|
|
isa => 'Bool', |
24
|
|
|
|
|
|
|
default => 0, |
25
|
|
|
|
|
|
|
); |
26
|
|
|
|
|
|
|
|
27
|
|
|
|
|
|
|
has [ qw(run run_if_trial run_no_trial run_if_release run_no_release) ] => ( |
28
|
|
|
|
|
|
|
is => 'ro', |
29
|
|
|
|
|
|
|
isa => 'ArrayRef[Str]', |
30
|
|
|
|
|
|
|
default => sub { [] }, |
31
|
|
|
|
|
|
|
); |
32
|
|
|
|
|
|
|
|
33
|
|
|
|
|
|
|
has eval => ( |
34
|
|
|
|
|
|
|
is => 'ro', |
35
|
|
|
|
|
|
|
isa => 'ArrayRef[Str]', |
36
|
|
|
|
|
|
|
default => sub { [] }, |
37
|
|
|
|
|
|
|
); |
38
|
|
|
|
|
|
|
|
39
|
|
|
|
|
|
|
has fatal_errors => ( |
40
|
|
|
|
|
|
|
is => 'ro', |
41
|
|
|
|
|
|
|
isa => 'Bool', |
42
|
|
|
|
|
|
|
default => 1, |
43
|
|
|
|
|
|
|
); |
44
|
|
|
|
|
|
|
|
45
|
|
|
|
|
|
|
has quiet => ( |
46
|
|
|
|
|
|
|
is => 'ro', |
47
|
|
|
|
|
|
|
isa => 'Bool', |
48
|
|
|
|
|
|
|
default => 0, |
49
|
|
|
|
|
|
|
); |
50
|
|
|
|
|
|
|
|
51
|
|
|
|
|
|
|
around dump_config => sub |
52
|
|
|
|
|
|
|
{ |
53
|
|
|
|
|
|
|
my ($orig, $self) = @_; |
54
|
|
|
|
|
|
|
my $config = $self->$orig; |
55
|
|
|
|
|
|
|
|
56
|
|
|
|
|
|
|
$config->{+__PACKAGE__} = { |
57
|
|
|
|
|
|
|
version => $VERSION, |
58
|
|
|
|
|
|
|
(map +($_ => $self->$_ ? 1 : 0), qw(fatal_errors quiet)), |
59
|
|
|
|
|
|
|
map |
60
|
|
|
|
|
|
|
@{ $self->$_ } |
61
|
|
|
|
|
|
|
# look for user:password URIs |
62
|
|
|
|
|
|
|
? ( $_ => [ map $self->censor_commands || /\b\w+:[^@]+@\b/ ? 'REDACTED' : $_, @{ $self->$_ } ] ) |
63
|
|
|
|
|
|
|
: (), |
64
|
|
|
|
|
|
|
qw(run run_if_trial run_no_trial run_if_release run_no_release eval), |
65
|
|
|
|
|
|
|
}; |
66
|
|
|
|
|
|
|
|
67
|
|
|
|
|
|
|
return $config; |
68
|
|
|
|
|
|
|
}; |
69
|
|
|
|
|
|
|
|
70
|
|
|
|
|
|
|
around BUILDARGS => sub { |
71
|
|
|
|
|
|
|
my ( $orig, $class, @args ) = @_; |
72
|
|
|
|
|
|
|
my $built = $class->$orig(@args); |
73
|
|
|
|
|
|
|
|
74
|
|
|
|
|
|
|
foreach my $dep (qw( notexist_fatal )) { |
75
|
|
|
|
|
|
|
if ( exists $built->{$dep} ) { |
76
|
|
|
|
|
|
|
warn(" !\n ! $class attribute '$dep' is deprecated and has no effect.\n !\n"); |
77
|
|
|
|
|
|
|
delete $built->{$dep}; |
78
|
|
|
|
|
|
|
} |
79
|
|
|
|
|
|
|
} |
80
|
|
|
|
|
|
|
return $built; |
81
|
|
|
|
|
|
|
}; |
82
|
|
|
|
|
|
|
|
83
|
|
|
|
|
|
|
sub _is_trial { |
84
|
28
|
|
|
28
|
|
151
|
my $self = shift; |
85
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
# we want to avoid provoking other plugins prematurely, but also be as |
87
|
|
|
|
|
|
|
# accurate as we can with this status |
88
|
|
|
|
|
|
|
|
89
|
28
|
|
|
|
|
1165
|
my $release_status_attr = find_meta($self->zilla)->find_attribute_by_name('release_status'); |
90
|
|
|
|
|
|
|
|
91
|
28
|
100
|
66
|
|
|
9296
|
return ( $self->zilla->is_trial ? 1 : 0 ) if |
|
|
100
|
|
|
|
|
|
92
|
|
|
|
|
|
|
not $release_status_attr # legacy (before Dist::Zilla 5.035) |
93
|
|
|
|
|
|
|
or $release_status_attr->has_value($self->zilla); |
94
|
|
|
|
|
|
|
|
95
|
|
|
|
|
|
|
# otherwise, only use the logic that does not require zilla->version |
96
|
|
|
|
|
|
|
# before Dist::Zilla 5.035, this is what $zilla->is_trial returned |
97
|
8
|
100
|
|
|
|
1229
|
return eval { $self->zilla->_release_status_from_env =~ /\A(?:testing|unstable)\z/ } ? 1 : 0; |
|
8
|
|
|
|
|
403
|
|
98
|
|
|
|
|
|
|
} |
99
|
|
|
|
|
|
|
|
100
|
|
|
|
|
|
|
sub _call_script { |
101
|
52
|
|
|
52
|
|
689
|
my ( $self, $params ) = @_; |
102
|
|
|
|
|
|
|
|
103
|
52
|
|
|
|
|
243
|
foreach my $run_cmd (@{$self->run}) { |
|
52
|
|
|
|
|
2727
|
|
104
|
43
|
|
|
|
|
1448
|
$self->_run_cmd($run_cmd, $params); |
105
|
|
|
|
|
|
|
} |
106
|
|
|
|
|
|
|
|
107
|
47
|
|
|
|
|
50965
|
foreach my $run_cmd (@{$self->run_if_trial}) { |
|
47
|
|
|
|
|
3789
|
|
108
|
4
|
100
|
|
|
|
90
|
if ($self->_is_trial) { |
109
|
2
|
|
|
|
|
294
|
$self->_run_cmd($run_cmd, $params); |
110
|
|
|
|
|
|
|
} else { |
111
|
2
|
|
|
|
|
287
|
$self->log_debug([ 'not executing, because no trial: %s', $run_cmd ]); |
112
|
|
|
|
|
|
|
} |
113
|
|
|
|
|
|
|
} |
114
|
|
|
|
|
|
|
|
115
|
47
|
|
|
|
|
4567
|
foreach my $run_cmd (@{$self->run_no_trial}) { |
|
47
|
|
|
|
|
3170
|
|
116
|
6
|
100
|
|
|
|
87
|
if ($self->_is_trial) { |
117
|
3
|
|
|
|
|
559
|
$self->log_debug([ 'not executing, because trial: %s', $run_cmd ]); |
118
|
|
|
|
|
|
|
} else { |
119
|
3
|
|
|
|
|
628
|
$self->_run_cmd($run_cmd, $params); |
120
|
|
|
|
|
|
|
} |
121
|
|
|
|
|
|
|
} |
122
|
|
|
|
|
|
|
|
123
|
47
|
100
|
66
|
|
|
7423
|
my $is_release = defined $ENV{'DZIL_RELEASING'} && $ENV{'DZIL_RELEASING'} == 1 ? 1 : 0; |
124
|
|
|
|
|
|
|
|
125
|
47
|
|
|
|
|
228
|
foreach my $run_cmd (@{$self->run_if_release}) { |
|
47
|
|
|
|
|
2933
|
|
126
|
0
|
0
|
|
|
|
0
|
if ($is_release) { |
127
|
0
|
|
|
|
|
0
|
$self->_run_cmd($run_cmd, $params); |
128
|
|
|
|
|
|
|
} else { |
129
|
0
|
|
|
|
|
0
|
$self->log_debug([ 'not executing, because no release: %s', $run_cmd ]); |
130
|
|
|
|
|
|
|
} |
131
|
|
|
|
|
|
|
} |
132
|
|
|
|
|
|
|
|
133
|
47
|
|
|
|
|
207
|
foreach my $run_cmd (@{$self->run_no_release}) { |
|
47
|
|
|
|
|
2942
|
|
134
|
0
|
0
|
|
|
|
0
|
if ($is_release) { |
135
|
0
|
|
|
|
|
0
|
$self->log_debug([ 'not executing, because release: %s', $run_cmd ]); |
136
|
|
|
|
|
|
|
} else { |
137
|
0
|
|
|
|
|
0
|
$self->_run_cmd($run_cmd, $params); |
138
|
|
|
|
|
|
|
} |
139
|
|
|
|
|
|
|
} |
140
|
|
|
|
|
|
|
|
141
|
47
|
100
|
|
|
|
186
|
if (my @code = @{ $self->eval }) { |
|
47
|
|
|
|
|
2683
|
|
142
|
18
|
|
|
|
|
152
|
my $code = join "\n", @code; |
143
|
|
|
|
|
|
|
|
144
|
18
|
|
|
|
|
126
|
$self->_eval_cmd($code, $params); |
145
|
|
|
|
|
|
|
} |
146
|
|
|
|
|
|
|
} |
147
|
|
|
|
|
|
|
|
148
|
|
|
|
|
|
|
sub _run_cmd { |
149
|
50
|
|
|
50
|
|
479
|
my ( $self, $run_cmd, $params, $dry_run ) = @_; |
150
|
|
|
|
|
|
|
|
151
|
50
|
100
|
|
|
|
449
|
if ($dry_run) { |
152
|
1
|
|
|
|
|
7
|
$self->log_debug([ 'dry run, would run: %s', $run_cmd ]); |
153
|
1
|
|
|
|
|
462
|
return; |
154
|
|
|
|
|
|
|
} |
155
|
|
|
|
|
|
|
|
156
|
49
|
50
|
|
|
|
440
|
return if not $run_cmd; |
157
|
|
|
|
|
|
|
|
158
|
49
|
|
|
|
|
5744
|
require IPC::Open3; # core |
159
|
|
|
|
|
|
|
|
160
|
49
|
|
|
|
|
28403
|
my $command = $self->build_formatter($params)->format($run_cmd); |
161
|
49
|
100
|
|
|
|
10343
|
$self->${ $self->quiet ? \'log_debug' : \'log' }([ 'executing: %s', $command ]); |
|
49
|
|
|
|
|
2597
|
|
162
|
|
|
|
|
|
|
|
163
|
|
|
|
|
|
|
# autoflush STDOUT so we can see command output right away |
164
|
49
|
|
|
|
|
21581
|
local $| = 1; |
165
|
|
|
|
|
|
|
# combine STDOUT and STDERR for ease of proxying through the logger |
166
|
49
|
|
|
|
|
389
|
my $pid = IPC::Open3::open3(my ($in, $out), undef, $command); |
167
|
49
|
50
|
|
|
|
419126
|
binmode $out, ':crlf' if $^O eq 'MSWin32'; |
168
|
49
|
|
|
|
|
1101654
|
while(defined(my $line = <$out>)){ |
169
|
8
|
|
|
|
|
87
|
chomp($line); # logger appends its own newline |
170
|
8
|
100
|
|
|
|
29
|
$self->${ $self->quiet ? \'log_debug' : \'log' }($line); |
|
8
|
|
|
|
|
1172
|
|
171
|
|
|
|
|
|
|
} |
172
|
|
|
|
|
|
|
|
173
|
|
|
|
|
|
|
# zombie repellent |
174
|
49
|
|
|
|
|
7123
|
waitpid($pid, 0); |
175
|
|
|
|
|
|
|
|
176
|
49
|
100
|
|
|
|
1527
|
if (my $status = ($? >> 8)) { |
177
|
10
|
100
|
|
|
|
411
|
$self->${ $self->fatal_errors ? \'log_fatal' : $self->quiet ? \'log_debug' : \'log'} |
|
10
|
100
|
|
|
|
1339
|
|
178
|
|
|
|
|
|
|
([ 'command exited with status %s (%s)', $status, $? ]); |
179
|
|
|
|
|
|
|
} |
180
|
|
|
|
|
|
|
else { |
181
|
39
|
|
|
|
|
1521
|
$self->log_debug('command executed successfully'); |
182
|
|
|
|
|
|
|
} |
183
|
|
|
|
|
|
|
} |
184
|
|
|
|
|
|
|
|
185
|
|
|
|
|
|
|
sub _eval_cmd { |
186
|
20
|
|
|
20
|
|
129
|
my ( $self, $code, $params, $dry_run ) = @_; |
187
|
|
|
|
|
|
|
|
188
|
20
|
100
|
|
|
|
103
|
if ($dry_run) { |
189
|
1
|
|
|
|
|
9
|
$self->log_debug([ 'dry run, would evaluate: %s', $code ]); |
190
|
1
|
|
|
|
|
315
|
return; |
191
|
|
|
|
|
|
|
} |
192
|
|
|
|
|
|
|
|
193
|
19
|
|
|
|
|
115
|
$code = $self->build_formatter($params)->format($code); |
194
|
19
|
100
|
|
|
|
4296
|
$self->${ $self->quiet ? \'log_debug' : \'log' }([ 'evaluating: %s', $code ]); |
|
19
|
|
|
|
|
905
|
|
195
|
|
|
|
|
|
|
|
196
|
19
|
|
|
|
|
6814
|
my $sub = __eval_wrapper($code); |
197
|
19
|
|
|
|
|
102
|
$sub->($self); |
198
|
19
|
|
|
|
|
2978
|
my $error = $@; |
199
|
|
|
|
|
|
|
|
200
|
19
|
100
|
66
|
|
|
601
|
if (defined $error and $error ne '') { |
201
|
8
|
100
|
100
|
|
|
376
|
if ($self->fatal_errors and $self->quiet and not $self->zilla->logger->get_debug) { |
|
|
|
66
|
|
|
|
|
202
|
1
|
|
|
|
|
216
|
$self->log([ 'evaluated: %s', $code]); |
203
|
|
|
|
|
|
|
} |
204
|
|
|
|
|
|
|
|
205
|
8
|
100
|
|
|
|
534
|
$self->${ $self->fatal_errors ? \'log_fatal' : $self->quiet ? \'log_debug' : \'log'} |
|
8
|
100
|
|
|
|
305
|
|
206
|
|
|
|
|
|
|
([ 'evaluation died: %s', $error ]); |
207
|
|
|
|
|
|
|
} |
208
|
|
|
|
|
|
|
} |
209
|
|
|
|
|
|
|
|
210
|
|
|
|
|
|
|
sub __eval_wrapper { |
211
|
19
|
|
|
19
|
|
62
|
my $code = shift; |
212
|
19
|
|
|
19
|
|
237
|
sub { eval $code }; |
|
19
|
|
|
1
|
|
2398
|
|
|
1
|
|
|
|
|
8
|
|
|
1
|
|
|
|
|
9
|
|
|
1
|
|
|
|
|
225
|
|
213
|
|
|
|
|
|
|
} |
214
|
|
|
|
|
|
|
|
215
|
|
|
|
|
|
|
around mvp_multivalue_args => sub { |
216
|
|
|
|
|
|
|
my ($original, $self) = @_; |
217
|
|
|
|
|
|
|
|
218
|
|
|
|
|
|
|
my @res = $self->$original(); |
219
|
|
|
|
|
|
|
|
220
|
|
|
|
|
|
|
push @res, qw( run run_no_trial run_if_trial run_if_release run_no_release eval ); |
221
|
|
|
|
|
|
|
|
222
|
|
|
|
|
|
|
@res; |
223
|
|
|
|
|
|
|
}; |
224
|
|
|
|
|
|
|
|
225
|
|
|
|
|
|
|
my $path_separator = (File::Spec->catfile(qw(a b)) =~ m/^a(.+?)b$/)[0]; |
226
|
|
|
|
|
|
|
|
227
|
|
|
|
|
|
|
sub build_formatter { |
228
|
70
|
|
|
70
|
0
|
84505
|
my ( $self, $params ) = @_; |
229
|
|
|
|
|
|
|
|
230
|
70
|
|
|
|
|
7215
|
require String::Formatter; |
231
|
70
|
|
|
|
|
40820
|
String::Formatter->VERSION(0.102082); |
232
|
|
|
|
|
|
|
|
233
|
|
|
|
|
|
|
my $codes = { |
234
|
|
|
|
|
|
|
# not always available |
235
|
|
|
|
|
|
|
# explicitly pass a string (not an object) [rt-72008] |
236
|
|
|
|
|
|
|
a => sub { |
237
|
26
|
100
|
|
26
|
|
2298
|
return "$params->{archive}" if defined $params->{archive}; |
238
|
12
|
|
|
|
|
174
|
$self->log('attempting to use %a in a non-Release plugin'); |
239
|
12
|
|
|
|
|
3987
|
''; |
240
|
|
|
|
|
|
|
}, |
241
|
|
|
|
|
|
|
|
242
|
|
|
|
|
|
|
# source dir |
243
|
|
|
|
|
|
|
o => sub { |
244
|
64
|
|
66
|
64
|
|
7432
|
my $dir = $params->{source_dir} || $self->zilla->root; |
245
|
64
|
50
|
|
|
|
3717
|
return $dir ? "$dir" : ''; |
246
|
|
|
|
|
|
|
}, |
247
|
|
|
|
|
|
|
|
248
|
|
|
|
|
|
|
# build dir or mint dir |
249
|
|
|
|
|
|
|
d => sub { |
250
|
36
|
|
|
36
|
|
2161
|
require Path::Tiny; |
251
|
|
|
|
|
|
|
# stringify build directory |
252
|
36
|
|
100
|
|
|
1032
|
my $dir = $params->{dir} || $self->zilla->built_in; |
253
|
36
|
100
|
|
|
|
1746
|
return Path::Tiny::path($dir)->canonpath if $dir; |
254
|
4
|
|
|
|
|
58
|
$self->log('attempting to use %d in before_build'); |
255
|
4
|
|
|
|
|
2083
|
''; |
256
|
|
|
|
|
|
|
}, |
257
|
|
|
|
|
|
|
|
258
|
|
|
|
|
|
|
# distribution name |
259
|
30
|
|
|
30
|
|
2297
|
n => sub { $self->zilla->name }, |
260
|
|
|
|
|
|
|
|
261
|
|
|
|
|
|
|
# backward compatibility (don't error) |
262
|
|
|
|
|
|
|
s => '', |
263
|
|
|
|
|
|
|
|
264
|
|
|
|
|
|
|
# portability |
265
|
|
|
|
|
|
|
p => $path_separator, |
266
|
58
|
|
|
58
|
|
19592
|
x => sub { $self->perlpath }, |
267
|
70
|
|
|
|
|
3613
|
}; |
268
|
|
|
|
|
|
|
|
269
|
|
|
|
|
|
|
# available during build, not mint |
270
|
70
|
100
|
|
|
|
602
|
unless( $params->{minting} ){ |
271
|
68
|
|
|
33
|
|
967
|
$codes->{v} = sub { $self->zilla->version }; |
|
33
|
|
|
|
|
6817
|
|
272
|
68
|
100
|
|
18
|
|
808
|
$codes->{t} = sub { $self->_is_trial ? '-TRIAL' : '' }; |
|
18
|
|
|
|
|
4962
|
|
273
|
|
|
|
|
|
|
} |
274
|
|
|
|
|
|
|
|
275
|
|
|
|
|
|
|
# positional replacement of %s (backward compatible) |
276
|
70
|
100
|
|
|
|
252
|
if( my @pos = @{ $params->{pos} || [] } ){ |
|
70
|
100
|
|
|
|
766
|
|
277
|
|
|
|
|
|
|
# where are you defined-or // operator? |
278
|
|
|
|
|
|
|
$codes->{s} = sub { |
279
|
41
|
|
|
41
|
|
2834
|
my $s = shift(@pos); |
280
|
41
|
100
|
|
|
|
241
|
$s = $s->() if ref $s eq 'CODE'; |
281
|
41
|
100
|
|
|
|
7972
|
defined($s) ? $s : ''; |
282
|
61
|
|
|
|
|
633
|
}; |
283
|
|
|
|
|
|
|
} |
284
|
|
|
|
|
|
|
|
285
|
70
|
|
|
|
|
1033
|
return String::Formatter->new({ codes => $codes }); |
286
|
|
|
|
|
|
|
} |
287
|
|
|
|
|
|
|
|
288
|
37
|
|
|
37
|
0
|
4520
|
sub current_perl_path { $^X } |
289
|
|
|
|
|
|
|
|
290
|
|
|
|
|
|
|
1; |