芝麻web文件管理V1.00
编辑当前文件:/home/qrafawbu/kwesioben.com/paymoney/vendor/psy/psysh/src/VersionUpdater/SelfUpdate.php
checker = $checker; $this->installer = $installer; } /** * Allow the downloader to be injected for testing. * * @param Downloader $downloader * * @return void */ public function setDownloader(Downloader $downloader) { $this->downloader = $downloader; } /** * Get the currently set Downloader or create one based on the capabilities of the php environment. * * @throws ErrorException if a downloader cannot be created for the php environment */ private function getDownloader(): Downloader { if (!isset($this->downloader)) { return Downloader\Factory::getDownloader(); } return $this->downloader; } /** * Build the download URL for the latest release. * * The file name used in the URL will include the flavour postfix extracted from the current version * if it's present * * @param string $latestVersion */ private function getAssetUrl(string $latestVersion): string { $versionPostfix = ''; if (\strpos(Shell::VERSION, '+')) { $versionPostfix = '-'.\substr(Shell::VERSION, \strpos(Shell::VERSION, '+') + 1); } $downloadFilename = \sprintf('psysh-%s%s.tar.gz', $latestVersion, $versionPostfix); // check if latest release data contains an asset matching the filename? return \sprintf('%s/%s/%s', self::URL_PREFIX, $latestVersion, $downloadFilename); } /** * Execute the self-update process. * * @param InputInterface $input * @param OutputInterface $output * * @throws ErrorException if the current version is not restored when installation fails */ public function run(InputInterface $input, OutputInterface $output): int { $currentVersion = Shell::VERSION; // already have the latest version? if ($this->checker->isLatest()) { // current version is latest version... $output->writeln('
Current version is up-to-date.
'); return self::SUCCESS; } // can overwrite current version? if (!$this->installer->isInstallLocationWritable()) { $output->writeln('
Installed version is not writable.
'); return self::FAILURE; } // can download to, and create a backup in the temp directory? if (!$this->installer->isTempDirectoryWritable()) { $output->writeln('
Temporary directory is not writable.
'); return self::FAILURE; } $latestVersion = $this->checker->getLatest(); $downloadUrl = $this->getAssetUrl($latestVersion); $output->write("Downloading PsySH $latestVersion ..."); try { $downloader = $this->getDownloader(); $downloader->setTempDir($this->installer->getTempDirectory()); $downloaded = $downloader->download($downloadUrl); } catch (ErrorException $e) { $output->write('
Failed.
'); $output->writeln(\sprintf('
%s
', $e->getMessage())); return self::FAILURE; } if (!$downloaded) { $output->writeln('
Download failed.
'); $downloader->cleanup(); return self::FAILURE; } else { $output->write('
OK
'.\PHP_EOL); } $downloadedFile = $downloader->getFilename(); if (!$this->installer->isValidSource($downloadedFile)) { $downloader->cleanup(); $output->writeln('
Downloaded file is not a valid archive.
'); return self::FAILURE; } // create backup as bin.old-version in the temporary directory $backupCreated = $this->installer->createBackup($currentVersion); if (!$backupCreated) { $downloader->cleanup(); $output->writeln('
Failed to create a backup of the current version.
'); return self::FAILURE; } elseif ($input->getOption('verbose')) { $backupFilename = $this->installer->getBackupFilename($currentVersion); $output->writeln('Created backup of current version: '.$backupFilename); } if (!$this->installer->install($downloadedFile)) { $this->installer->restoreFromBackup($currentVersion); $downloader->cleanup(); $output->writeln("
Failed to install new PsySH version $latestVersion.
"); return self::FAILURE; } // Remove the downloaded archive file from the temporary directory $downloader->cleanup(); $output->writeln("Updated PsySH from $currentVersion to
$latestVersion
"); return self::SUCCESS; } }