/**
* Replace the pharext core in an .ext.phar package
* @param string $temp path to temp phar
* @return boolean FALSE if the package is too old (pre-v3) to upgrade
*/
private function replacePharext($temp)
{
$phar = new Phar($temp, Phar::CURRENT_AS_SELF);
$phar->startBuffering();
if (!($meta = $phar->getMetadata())) {
// don't upgrade pre-v3 packages
return false;
}
// replace current pharext files
$core = (new Task\BundleGenerator())->run($this->verbosity());
$phar->buildFromIterator($core);
$stub = __DIR__ . "/../pharext_installer.php";
(new Task\PharStub($phar, $stub))->run($this->verbosity());
// check dependencies
foreach ($phar as $info) {
if (fnmatch("*.ext.phar*", $info->getBasename())) {
$this->updatePackage($info, $phar);
}
}
$phar->stopBuffering();
$phar->setMetadata(["version" => Metadata::version(), "header" => Metadata::header()] + $meta);
$this->info("Updated pharext version from '%s' to '%s'\n", isset($meta["version"]) ? $meta["version"] : "(unknown)", $phar->getMetadata()["version"]);
return true;
}