-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathProgram.php
More file actions
81 lines (72 loc) · 1.96 KB
/
Copy pathProgram.php
File metadata and controls
81 lines (72 loc) · 1.96 KB
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
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
<?php
declare(strict_types=1);
namespace DockerBase\Dependency;
use DockerBase\Command\Result;
use ErrorException;
use Throwable;
final readonly class Program
{
public function __construct(
private Console $console,
) {
}
/**
* @param list<string> $arguments
*/
public function execute(array $arguments): Result
{
try {
set_error_handler(
static function (
int $severity,
string $message,
string $file,
int $line,
): bool {
if ((error_reporting() & $severity) === 0) {
return false;
}
throw new ErrorException(
$message,
0,
$severity,
$file,
$line,
);
},
);
try {
return new Result(
0,
$this->console->execute($arguments) . PHP_EOL,
'',
);
} catch (UsageException $exception) {
return new Result(
2,
'',
'Error: ' . $this->detail($exception) . PHP_EOL,
);
} catch (Throwable $exception) {
return new Result(
1,
'',
'Error: ' . $this->detail($exception) . PHP_EOL,
);
}
} finally {
restore_error_handler();
}
}
private function detail(Throwable $exception): string
{
$detail = preg_replace(
'/\s+/',
' ',
trim($exception->getMessage()),
);
return $detail === null || $detail === ''
? 'Dependency update failed'
: $detail;
}
}