mirror of
https://github.com/danog/parallel.git
synced 2025-01-22 14:01:14 +01:00
Symlink PHARs if they don't have a .phar extension
This commit is contained in:
parent
b4cdb95f58
commit
7326946884
@ -18,6 +18,9 @@ class Process implements Context {
|
||||
/** @var string|null External version of SCRIPT_PATH if inside a PHAR. */
|
||||
private static $pharScriptPath;
|
||||
|
||||
/** @var string|null PHAR path with a '.phar' extension. */
|
||||
private static $pharCopy;
|
||||
|
||||
/** @var string|null Cached path to located PHP binary. */
|
||||
private static $binaryPath;
|
||||
|
||||
@ -60,12 +63,6 @@ class Process implements Context {
|
||||
"log_errors" => "1",
|
||||
];
|
||||
|
||||
if (\is_array($script)) {
|
||||
$script = \implode(" ", \array_map("escapeshellarg", $script));
|
||||
} else {
|
||||
$script = \escapeshellarg($script);
|
||||
}
|
||||
|
||||
if ($binary === null) {
|
||||
if (\PHP_SAPI === "cli") {
|
||||
$binary = \PHP_BINARY;
|
||||
@ -82,8 +79,21 @@ class Process implements Context {
|
||||
if (self::$pharScriptPath) {
|
||||
$scriptPath = self::$pharScriptPath;
|
||||
} else {
|
||||
$path = \dirname(self::SCRIPT_PATH);
|
||||
|
||||
if (\substr(\Phar::running(false), -5) !== ".phar") {
|
||||
self::$pharCopy = \sys_get_temp_dir() . "/phar-" . \bin2hex(\random_bytes(10)) . ".phar";
|
||||
\copy(\Phar::running(false), self::$pharCopy);
|
||||
|
||||
\register_shutdown_function(static function () {
|
||||
@\unlink(self::$pharCopy);
|
||||
});
|
||||
|
||||
$path = "phar://" . self::$pharCopy . "/" . \substr($path, \strlen(\Phar::running(true)));
|
||||
}
|
||||
|
||||
$contents = \file_get_contents(self::SCRIPT_PATH);
|
||||
$contents = \str_replace("__DIR__", \var_export(\dirname(self::SCRIPT_PATH), true), $contents);
|
||||
$contents = \str_replace("__DIR__", \var_export($path, true), $contents);
|
||||
self::$pharScriptPath = $scriptPath = \tempnam(\sys_get_temp_dir(), "amp-process-runner-");
|
||||
\file_put_contents($scriptPath, $contents);
|
||||
|
||||
@ -91,10 +101,21 @@ class Process implements Context {
|
||||
@\unlink(self::$pharScriptPath);
|
||||
});
|
||||
}
|
||||
|
||||
// Monkey-patch the script path in the same way, only supported if the command is given as array.
|
||||
if (isset(self::$pharCopy) && \is_array($script) && isset($script[0])) {
|
||||
$script[0] = "phar://" . self::$pharCopy . \substr($script[0], \strlen(\Phar::running(true)));
|
||||
}
|
||||
} else {
|
||||
$scriptPath = self::SCRIPT_PATH;
|
||||
}
|
||||
|
||||
if (\is_array($script)) {
|
||||
$script = \implode(" ", \array_map("escapeshellarg", $script));
|
||||
} else {
|
||||
$script = \escapeshellarg($script);
|
||||
}
|
||||
|
||||
$command = \implode(" ", [
|
||||
\escapeshellarg($binary),
|
||||
$this->formatOptions($options),
|
||||
|
Loading…
x
Reference in New Issue
Block a user