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. */
|
/** @var string|null External version of SCRIPT_PATH if inside a PHAR. */
|
||||||
private static $pharScriptPath;
|
private static $pharScriptPath;
|
||||||
|
|
||||||
|
/** @var string|null PHAR path with a '.phar' extension. */
|
||||||
|
private static $pharCopy;
|
||||||
|
|
||||||
/** @var string|null Cached path to located PHP binary. */
|
/** @var string|null Cached path to located PHP binary. */
|
||||||
private static $binaryPath;
|
private static $binaryPath;
|
||||||
|
|
||||||
@ -60,12 +63,6 @@ class Process implements Context {
|
|||||||
"log_errors" => "1",
|
"log_errors" => "1",
|
||||||
];
|
];
|
||||||
|
|
||||||
if (\is_array($script)) {
|
|
||||||
$script = \implode(" ", \array_map("escapeshellarg", $script));
|
|
||||||
} else {
|
|
||||||
$script = \escapeshellarg($script);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($binary === null) {
|
if ($binary === null) {
|
||||||
if (\PHP_SAPI === "cli") {
|
if (\PHP_SAPI === "cli") {
|
||||||
$binary = \PHP_BINARY;
|
$binary = \PHP_BINARY;
|
||||||
@ -82,8 +79,21 @@ class Process implements Context {
|
|||||||
if (self::$pharScriptPath) {
|
if (self::$pharScriptPath) {
|
||||||
$scriptPath = self::$pharScriptPath;
|
$scriptPath = self::$pharScriptPath;
|
||||||
} else {
|
} 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 = \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-");
|
self::$pharScriptPath = $scriptPath = \tempnam(\sys_get_temp_dir(), "amp-process-runner-");
|
||||||
\file_put_contents($scriptPath, $contents);
|
\file_put_contents($scriptPath, $contents);
|
||||||
|
|
||||||
@ -91,10 +101,21 @@ class Process implements Context {
|
|||||||
@\unlink(self::$pharScriptPath);
|
@\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 {
|
} else {
|
||||||
$scriptPath = self::SCRIPT_PATH;
|
$scriptPath = self::SCRIPT_PATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (\is_array($script)) {
|
||||||
|
$script = \implode(" ", \array_map("escapeshellarg", $script));
|
||||||
|
} else {
|
||||||
|
$script = \escapeshellarg($script);
|
||||||
|
}
|
||||||
|
|
||||||
$command = \implode(" ", [
|
$command = \implode(" ", [
|
||||||
\escapeshellarg($binary),
|
\escapeshellarg($binary),
|
||||||
$this->formatOptions($options),
|
$this->formatOptions($options),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user