/** * Executes composer for the extension. */ public function execute(InputInterface $input, OutputInterface $output) { $name = $this->argument('extension'); $update = $this->option('update'); if (!is_dir($path = $this->pagekit['path.extensions'] . "/{$name}") && file_exists("{$path}/extension.json")) { $this->error("Extension not exists '{$path}'"); exit; } $package = json_decode(file_get_contents("{$path}/extension.json"), true); if (!isset($package['composer']) || empty($package['composer'])) { $this->error("Composer not defined in '{$path}/extension.json'"); exit; } $this->loadComposer($path); $io = new ConsoleIO($input, $output, $this->getHelperSet()); $composer = Factory::create($io, $package['composer']); $lockFile = new JsonFile("{$path}/extension.lock"); $locker = new Locker($io, $lockFile, $composer->getRepositoryManager(), $composer->getInstallationManager(), md5(json_encode($package['composer']))); $composer->setLocker($locker); $installed = new JsonFile($this->pagekit['path'] . '/vendor/composer/installed.json'); $internal = new CompositeRepository([]); $internal->addRepository(new InstalledFilesystemRepository($installed)); $installer = Installer::create($io, $composer); $installer->setAdditionalInstalledRepository($internal); $installer->setUpdate($update); return $installer->run(); }
/** * Create \Composer\Composer * * @return \Composer\Composer * @throws \Exception */ public function create() { if (!getenv('COMPOSER_HOME')) { putenv('COMPOSER_HOME=' . $this->directoryList->getPath(DirectoryList::COMPOSER_HOME)); } return \Composer\Factory::create(new BufferIO(), $this->composerJsonFinder->findComposerJson()); }
public function getComposer() { if ($this->composer === null) { $this->composer = Factory::create($this->io, null, false); } return $this->composer; }
/** * Runs the project configurator. * * @return void */ public function run() { $namespace = $this->ask('Namespace', function ($namespace) { return $this->validateNamespace($namespace); }, 'App'); $packageName = $this->ask('Package name', function ($packageName) { return $this->validatePackageName($packageName); }, $this->suggestPackageName($namespace)); $license = $this->ask('License', function ($license) { return trim($license); }, 'proprietary'); $description = $this->ask('Description', function ($description) { return trim($description); }, ''); $file = new JsonFile('./composer.json'); $config = $file->read(); $config['name'] = $packageName; $config['license'] = $license; $config['description'] = $description; $config['autoload']['psr-4'] = [$namespace . '\\' => 'src/']; $config['autoload-dev']['psr-4'] = [$namespace . '\\Tests\\' => 'tests/']; unset($config['scripts']['post-root-package-install']); $config['extra']['branch-alias']['dev-master'] = '1.0-dev'; $file->write($config); $this->composer->setPackage(Factory::create($this->io, null, true)->getPackage()); // reload root package $filesystem = new Filesystem(); $filesystem->removeDirectory('./app/Distribution'); }
/** * Removes patched packages. */ public function main() { // Check if all required data is present. $this->checkRequirements(); $composer = Factory::create(new NullIO(), $this->composerJsonPath); // Force discarding of changes, these packages are patched after all. // @todo Make this configurable with a "force" flag. $config = $composer->getConfig(); $config->merge(['config' => ['discard-changes' => TRUE]]); // Get the list of patches. $extra = $composer->getPackage()->getExtra(); if (!empty($extra['patches'])) { $repository = $composer->getRepositoryManager()->getLocalRepository(); $installation_manager = $composer->getInstallationManager(); // Loop over the patched packages. foreach (array_keys($extra['patches']) as $package_name) { foreach ($repository->findPackages($package_name) as $package) { // Skip aliases, only remove the actual packages. if (!$package instanceof AliasPackage) { // Remove the package. $this->log("Removing patched package '{$package_name}'."); $operation = new UninstallOperation($package, 'Uninstalling patched package so it can be reinstalled.'); $installation_manager->uninstall($repository, $operation); } } } // Re-generate the autoloader to get rid of stale class definitions. $generator = $composer->getAutoloadGenerator(); $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $package = $composer->getPackage(); $installationManager = $composer->getInstallationManager(); $generator->dump($config, $localRepo, $package, $installationManager, 'composer'); } }
/** * {@inheritDoc} */ protected function prepareCommand() { RuntimeHelper::setupHome($this->file->get(self::SETTING_HOME)); $command = new UpdateCommand(); $command->setComposer(Factory::create($this->getIO())); return $command; }
/** * Retrieve a composer instance. * * @param null|IOInterface $inputOutput The input/output handler to use. * * @return Composer */ public function getComposer(IOInterface $inputOutput = null) { if (null === $inputOutput) { $inputOutput = $this->getInputOutput(); } RuntimeHelper::setupHome($this->getTensideHome()); return ComposerFactory::create($inputOutput); }
/** * @return PackageInterface[] */ public function getAvailable() { $plugins = array(); $composer = Factory::create(new NullIO(), $this->config); foreach ($composer->getPackage()->getSuggests() as $id => $version) { $plugins[$id] = new Package($id, $version, $version); } return $plugins; }
/** * Constructor * * @param Filesystem $filesystem */ public function __construct(Filesystem $filesystem) { $vendor = $filesystem->getDirectoryRead(DirectoryList::CONFIG)->getAbsolutePath('vendor_path.php'); $vendorPath = $filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath() . (include $vendor); // Create Composer $io = new \Composer\IO\BufferIO(); $this->composer = ComposerFactory::create($io, $vendorPath . '/../composer.json'); $this->locker = $this->composer->getLocker(); }
/** * @param InputInterface $input * @param OutputInterface $output * * @return int */ protected function execute(InputInterface $input, OutputInterface $output) { $file = $input->getArgument('file'); $io = $this->getIO(); if (!file_exists($file)) { $io->writeError('<error>' . $file . ' not found.</error>'); return 1; } if (!is_readable($file)) { $io->writeError('<error>' . $file . ' is not readable.</error>'); return 1; } $validator = new ConfigValidator($io); $checkAll = $input->getOption('no-check-all') ? 0 : ValidatingArrayLoader::CHECK_ALL; $checkPublish = !$input->getOption('no-check-publish'); list($errors, $publishErrors, $warnings) = $validator->validate($file, $checkAll); $checkLock = !$input->getOption('no-check-lock'); $lockErrors = array(); $composer = Factory::create($io, $file); $locker = $composer->getLocker(); if ($locker->isLocked() && !$locker->isFresh()) { $lockErrors[] = 'The lock file is not up to date with the latest changes in composer.json.'; } // output errors/warnings if (!$errors && !$publishErrors && !$warnings) { $io->write('<info>' . $file . ' is valid</info>'); } elseif (!$errors && !$publishErrors) { $io->writeError('<info>' . $file . ' is valid, but with a few warnings</info>'); $io->writeError('<warning>See https://getcomposer.org/doc/04-schema.md for details on the schema</warning>'); } elseif (!$errors) { $io->writeError('<info>' . $file . ' is valid for simple usage with composer but has</info>'); $io->writeError('<info>strict errors that make it unable to be published as a package:</info>'); $io->writeError('<warning>See https://getcomposer.org/doc/04-schema.md for details on the schema</warning>'); } else { $io->writeError('<error>' . $file . ' is invalid, the following errors/warnings were found:</error>'); } $messages = array('error' => $errors, 'warning' => $warnings); // If checking publish errors, display them as errors, otherwise just show them as warnings if ($checkPublish) { $messages['error'] = array_merge($messages['error'], $publishErrors); } else { $messages['warning'] = array_merge($messages['warning'], $publishErrors); } // If checking lock errors, display them as errors, otherwise just show them as warnings if ($checkLock) { $messages['error'] = array_merge($messages['error'], $lockErrors); } else { $messages['warning'] = array_merge($messages['warning'], $lockErrors); } foreach ($messages as $style => $msgs) { foreach ($msgs as $msg) { $io->writeError('<' . $style . '>' . $msg . '</' . $style . '>'); } } return $errors || $publishErrors && $checkPublish || $lockErrors && $checkLock ? 1 : 0; }
public function __construct($binDir, $jsonDir) { \Phar::loadPhar($binDir . '/composer.phar', 'composer.phar'); require 'phar://composer.phar/src/bootstrap.php'; $this->io = new \Composer\IO\NullIO(); $this->composer = \Composer\Factory::create($this->io, $jsonDir . '/composer.json'); $vendorDir = $this->composer->getConfig()->get('vendor-dir'); $jsonFile = new \Composer\Json\JsonFile($vendorDir . '/composer/installed.json'); $this->composer->getRepositoryManager()->setLocalRepository(new \Composer\Repository\InstalledFilesystemRepository($jsonFile)); }
/** * @param IOInterface $io * @param mixed $config * @param bool $disablePlugins * @return Composer\Composer * @throws \Exception|\InvalidArgumentException */ public static function createComposer(IOInterface $io = null, $config = null, $disablePlugins = false) { try { if (null === $io) { $io = static::createConsoleIO(); } return Composer\Factory::create($io, $config, $disablePlugins); } catch (\InvalidArgumentException $e) { throw $e; } }
/** * @return CompletePackageInterface[] */ public function getAvailable() { $composer = Factory::create(new NullIO(), $this->config); //transform to complete packages $availablePackages = array(); foreach ($this->packageLocatorStrategy->getAvailable() as $id => $availablePackage) { $completePackage = $composer->getRepositoryManager()->findPackage($availablePackage->getName(), $availablePackage->getVersion()); $availablePackages[$id] = $completePackage; } return $availablePackages; }
/** * Attach the composer factory to the command. * * @param BaseCommand $command The command to patch. * * @return BaseCommand * * @throws \InvalidArgumentException When no setComposerFactory method is declared. */ protected function attachComposerFactory(BaseCommand $command) { if (!method_exists($command, 'setComposerFactory')) { throw new \InvalidArgumentException('The passed command does not implement method setComposerFactory()'); } /** @var WrappedCommandTrait $command */ $command->setComposerFactory(function () { return Factory::create($this->getIO()); }); return $command; }
/** * @return Composer */ public function getComposer($required = true, $config = null) { if (null === $this->composer) { try { $this->composer = Factory::create($this->io, $config); } catch (\InvalidArgumentException $e) { $this->io->write($e->getMessage()); exit(1); } } return $this->composer; }
public function perform($configs) { if (is_file(".ethna")) { return; } $config = array_merge(array("project" => "example", "renderer" => "smarty"), $configs); $config = $this->processParams($config, $config); $targets = array("app/action/Index.php", "app/view/Index.php", "app/Example_ActionClass.php", "app/Example_ActionForm.php", "app/Example_Controller.php", "app/Example_Error.php", "app/Example_ViewClass.php", "etc/example-ini.php", "skel/skel.action.php", "skel/skel.action_cli.php", "skel/skel.app_object.php", "skel/skel.entry_cli.php", "skel/skel.entry_www.php", "skel/skel.template.tpl", "skel/skel.view.php", "www/index.php"); $project_class = self::camerize($config['project']); if ($config['renderer'] == 'twig') { if (file_exists("app/Example_Controller.php")) { $data = file_get_contents("app/Example_Controller.php"); $data = preg_replace("/Ethna_Renderer_Smarty/", "Ethna_Renderer_Twig", $data); file_put_contents("app/Example_Controller.php", $data); } } foreach ($targets as $target) { if (file_exists($target)) { $data = file_get_contents($target); $data = preg_replace("/Example/", $project_class, $data); $data = preg_replace("/EXAMPLE/", strtoupper($project_class), $data); file_put_contents($target, $data); $name = basename($target); if (preg_match("/Example/", $name)) { $name = preg_replace("/Example/", $project_class, $name); $dir = dirname($target); rename($target, $dir . DIRECTORY_SEPARATOR . $name); } else { if (preg_match("/example-ini.php/", $name)) { $dir = dirname($target); $name = preg_replace("/example/", $config['project'], $name); rename($target, $dir . DIRECTORY_SEPARATOR . $name); } } } } file_put_contents(".ethna", sprintf("[project]\ncontroller_file = '%s'\ncontroller_class = '%s'", "app/{$project_class}_Controller.php", "{$project_class}_Controller")); if ($config['renderer'] == 'twig') { $file = Factory::getComposerFile(); $prior_json = $composer_json = json_decode(file_get_contents($file), true); if (!isset($composer_json['require']['twig/twig'])) { $composer_json['require']['twig/twig'] = '1.*'; file_put_contents($file, json_encode($composer_json, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); $composer = $this->composer = Factory::create($this->io, null, true); $composer->getDownloadManager()->setOutputProgress(true); $install = Installer::create($this->io, $composer); $install->setVerbose(true)->setPreferSource(true)->setPreferDist(false)->setDevMode(true)->setUpdate(true)->setUpdateWhitelist(array_keys($prior_json['require'])); // とりあえず $status = $install->run(); } } }
public function execute(InputInterface $input, OutputInterface $output) { // make sure the proxy command didn't instantiate Composer $this->assert->assertNull($this->getComposer(false)); $this->assert->assertNull($this->getApplication()->getComposer(false)); // put a dummy composer.json to be able to create Composer file_put_contents(getcwd() . '/composer.json', '{}'); $factory = Factory::create(new NullIO()); $config = $factory->getConfig(); $this->data[] = array('bin-dir' => $config->get('bin-dir'), 'cwd' => getcwd(), 'vendor-dir' => $config->get('vendor-dir')); $this->resetComposer(); $this->getApplication()->resetComposer(); }
/** * Constructor * * @param Filesystem $filesystem * @param BufferIoFactory $bufferIoFactory * @throws \Exception */ public function __construct(Filesystem $filesystem, BufferIoFactory $bufferIoFactory) { // composer.json is in same directory as vendor $vendorPath = $filesystem->getDirectoryRead(DirectoryList::CONFIG)->getAbsolutePath('vendor_path.php'); $vendorDir = (require "{$vendorPath}"); $composerJson = $filesystem->getDirectoryRead(DirectoryList::ROOT)->getAbsolutePath() . "/{$vendorDir}/../composer.json"; $composerJsonRealPath = realpath($composerJson); if ($composerJsonRealPath === false) { throw new \Exception('Composer file not found: ' . $composerJson); } putenv('COMPOSER_HOME=' . $filesystem->getDirectoryRead(DirectoryList::COMPOSER_HOME)->getAbsolutePath()); // Create Composer $this->composer = ComposerFactory::create($bufferIoFactory->create(), $composerJson); $this->locker = $this->composer->getLocker(); }
/** * @return \Composer\Composer */ public function getComposer() { if ($this->composer === NULL) { try { $this->composer = Factory::create($this->io, NULL, FALSE); } catch (\InvalidArgumentException $e) { $this->io->writeError($e->getMessage()); exit(1); } catch (\Composer\Json\JsonValidationException $e) { $errors = ' - ' . implode(PHP_EOL . ' - ', $e->getErrors()); $message = $e->getMessage() . ':' . PHP_EOL . $errors; throw new \Composer\Json\JsonValidationException($message); } } return $this->composer; }
/** * @param ConsoleEvent $event */ public function registerComposer(ConsoleEvent $event) { /* * Inject composer object in composer commands */ $command = $event->getCommand(); if (strstr(get_class($command), 'Composer\\Command\\')) { $io = new ConsoleIO($event->getInput(), $event->getOutput(), $command->getHelperSet()); $contaoRootFolder = $command->getApplication()->getContaoRootFolder(); $configFile = $contaoRootFolder . '/composer.json'; $composer = Factory::create($io, $configFile); \chdir($contaoRootFolder); $command->setComposer($composer); $command->setIO($io); } }
public function run_install() { ob_start(); $input = new ArgvInput(array()); $output = new ConsoleOutput(); $helper = new HelperSet(); $config = new Config(); $output->setVerbosity(0); $io = new ConsoleIO($input, $output, $helper); $composer = Factory::create($io); $composer->setConfig($config); $update = new InstallCommand(); $update->setComposer($composer); $out = $update->run($input, $output); ob_end_clean(); return $out; }
/** * Get a Composer object. * * @return \Composer\Composer */ public function getComposer() { if (!$this->composer) { // Set working directory chdir($this->options['basedir']); // Use the factory to get a new Composer object try { $this->composer = \Composer\Factory::create($this->getIO(), $this->options['composerjson'], true); } catch (\Exception $e) { $this->app['logger.system']->critical($e->getMessage(), array('event' => 'exception', 'exception' => $e)); } if ($this->downgradeSsl) { $this->allowSslDowngrade(true); } } return $this->composer; }
/** * @param bool $required * @param bool $disablePlugins * @throws JsonValidationException * @return \Composer\Composer */ public function getComposer($required = true, $disablePlugins = false) { if (null === $this->composer) { try { $this->composer = Factory::create($this->io, null, $disablePlugins); } catch (\InvalidArgumentException $e) { if ($required) { $this->io->write($e->getMessage()); exit(1); } } catch (JsonValidationException $e) { $errors = ' - ' . implode(PHP_EOL . ' - ', $e->getErrors()); $message = $e->getMessage() . ':' . PHP_EOL . $errors; throw new JsonValidationException($message); } } return $this->composer; }
protected function execute(InputInterface $input, OutputInterface $output) { $newWorkDir = $this->getNewWorkingDir($input); if (!is_dir($newWorkDir)) { throw new \RuntimeException("Not found directory:" . $newWorkDir); } $oldWorkingDir = getcwd(); chdir($newWorkDir); $io = new ConsoleIO($input, $output, $this->getHelperSet()); $composer = Factory::create($io); $this->setComposer($composer); $this->setIO($io); $statusCode = parent::execute($input, $output); if (isset($oldWorkingDir)) { chdir($oldWorkingDir); } return $statusCode; }
/** * @param InputInterface $input * @param OutputInterface $output * * @return int */ protected function execute(InputInterface $input, OutputInterface $output) { $file = $input->getArgument('file'); $io = $this->getIO(); if (!file_exists($file)) { $io->writeError('<error>' . $file . ' not found.</error>'); return 3; } if (!is_readable($file)) { $io->writeError('<error>' . $file . ' is not readable.</error>'); return 3; } $validator = new ConfigValidator($io); $checkAll = $input->getOption('no-check-all') ? 0 : ValidatingArrayLoader::CHECK_ALL; $checkPublish = !$input->getOption('no-check-publish'); $checkLock = !$input->getOption('no-check-lock'); $isStrict = $input->getOption('strict'); list($errors, $publishErrors, $warnings) = $validator->validate($file, $checkAll); $lockErrors = array(); $composer = Factory::create($io, $file); $locker = $composer->getLocker(); if ($locker->isLocked() && !$locker->isFresh()) { $lockErrors[] = 'The lock file is not up to date with the latest changes in composer.json, it is recommended that you run `composer update`.'; } $this->outputResult($io, $file, $errors, $warnings, $checkPublish, $publishErrors, $checkLock, $lockErrors, true); $exitCode = $errors || $publishErrors && $checkPublish || $lockErrors && $checkLock ? 2 : ($isStrict && $warnings ? 1 : 0); if ($input->getOption('with-dependencies')) { $localRepo = $composer->getRepositoryManager()->getLocalRepository(); foreach ($localRepo->getPackages() as $package) { $path = $composer->getInstallationManager()->getInstallPath($package); $file = $path . '/composer.json'; if (is_dir($path) && file_exists($file)) { list($errors, $publishErrors, $warnings) = $validator->validate($file, $checkAll); $this->outputResult($io, $package->getPrettyName(), $errors, $warnings, $checkPublish, $publishErrors); $depCode = $errors || $publishErrors && $checkPublish ? 2 : ($isStrict && $warnings ? 1 : 0); $exitCode = max($depCode, $exitCode); } } } $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'validate', $input, $output); $eventCode = $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $exitCode = max($eventCode, $exitCode); return $exitCode; }
/** * Get a Composer object. * * @return \Composer\Composer */ protected function getComposer() { if (!$this->composer) { // Set working directory chdir($this->getOption('basedir')); // Use the factory to get a new Composer object try { $this->composer = Factory::create($this->getIO(), $this->getOption('composerjson'), true); // Add the event subscriber $this->composer->getEventDispatcher()->addSubscriber($this->app['extend.listener']); if (!$this->app['extend.manager']->useSsl()) { $this->setAllowSslDowngrade(true); } } catch (\Exception $e) { $this->app['logger.system']->critical($e->getMessage(), ['event' => 'exception', 'exception' => $e]); } } return $this->composer; }
/** * @return PackageInterface[] */ public function getInstalled() { $composer = Factory::create(new NullIO(), $this->config); $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $repos = new CompositeRepository(array_merge(array($localRepo), $composer->getRepositoryManager()->getRepositories())); $pool = new Pool(); $pool->addRepository($repos); $vs = new VersionSelector($pool); $packages = []; foreach ($localRepo->getPackages() as $package) { if (!isset($packages[$package->getName()]) || !is_object($packages[$package->getName()]) || version_compare($packages[$package->getName()]->getVersion(), $package->getVersion(), '<')) { if ($package instanceof CompletePackageInterface) { $latestPackage = $vs->findBestCandidate($package->getName()); $package = new InstalledPackage($package, $latestPackage); } $packages[$package->getName()] = $package; } } return $packages; }
protected function execute(InputInterface $input, OutputInterface $output) { // init repos $platformRepo = new PlatformRepository(); $io = $this->getIO(); if (!($composer = $this->getComposer(false))) { $composer = Factory::create($this->getIO(), array()); } $localRepo = $composer->getRepositoryManager()->getLocalRepository(); $installedRepo = new CompositeRepository(array($localRepo, $platformRepo)); $repos = new CompositeRepository(array_merge(array($installedRepo), $composer->getRepositoryManager()->getRepositories())); $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'search', $input, $output); $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent); $onlyName = $input->getOption('only-name'); $flags = $onlyName ? RepositoryInterface::SEARCH_NAME : RepositoryInterface::SEARCH_FULLTEXT; $results = $repos->search(implode(' ', $input->getArgument('tokens')), $flags); foreach ($results as $result) { $io->write($result['name'] . (isset($result['description']) ? ' ' . $result['description'] : '')); } }
/** * Get a Composer object. * * @throws \Exception * * @return \Composer\Composer */ protected function getComposer() { if (!$this->composer) { // Set working directory chdir($this->getOptions()->baseDir()); try { // Use the factory to get a new Composer object $this->composer = Factory::create($this->getIO(), $this->getOptions()->composerJson()->getPath(), false); } catch (\InvalidArgumentException $e) { throw new PackageManagerException($e->getMessage(), $e->getCode(), $e); } catch (\Exception $e) { $this->app['logger.system']->critical($e->getMessage(), ['event' => 'exception', 'exception' => $e]); throw $e; } // Add the event subscriber $this->composer->getEventDispatcher()->addSubscriber($this->app['extend.listener']); if (!$this->app['extend.manager']->useSsl()) { $this->setAllowSslDowngrade(true); } } return $this->composer; }
protected function getRepos() { $input = new StringInput(''); $output = new BufferedOutput(); $helperSet = new HelperSet(); $io = new ConsoleIO($input, $output, $helperSet); if (!file_exists('composer.json')) { putenv('COMPOSER=../composer.json'); } $composer = Factory::create($io); $config = $composer->getConfig(); $repos = $config->getRepositories(); foreach ($repos as &$repo) { $type = ucfirst($repo['type']); $type = "Composer\\Repository\\{$type}Repository"; $repo = new $type($repo, $io, $config); $ref = new \ReflectionProperty($repo, 'url'); $ref->setAccessible(true); $url = $ref->getValue($repo); $repo->name = preg_replace(['{^https?://}i', '{[^a-z0-9._]}i'], ['', '-'], $url); } return $repos; }