コード例 #1
0
 /**
  * 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();
 }
コード例 #2
0
ファイル: ComposerFactory.php プロジェクト: mage2pro/core
 /**
  * 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());
 }
コード例 #3
0
ファイル: AbstractScript.php プロジェクト: opis-colibri/core
 public function getComposer()
 {
     if ($this->composer === null) {
         $this->composer = Factory::create($this->io, null, false);
     }
     return $this->composer;
 }
コード例 #4
0
 /**
  * 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');
 }
コード例 #5
0
 /**
  * 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');
     }
 }
コード例 #6
0
ファイル: UpgradeTask.php プロジェクト: aschempp/tenside-core
 /**
  * {@inheritDoc}
  */
 protected function prepareCommand()
 {
     RuntimeHelper::setupHome($this->file->get(self::SETTING_HOME));
     $command = new UpdateCommand();
     $command->setComposer(Factory::create($this->getIO()));
     return $command;
 }
コード例 #7
0
 /**
  * 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;
 }
コード例 #9
0
 /**
  * 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();
 }
コード例 #10
0
ファイル: ValidateCommand.php プロジェクト: 4ung/composer
 /**
  * @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;
 }
コード例 #11
0
ファイル: Outside.php プロジェクト: Xinc-org/Xinc.Packager
 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));
 }
コード例 #12
0
ファイル: ComposerAdapter.php プロジェクト: modera/module
 /**
  * @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;
     }
 }
コード例 #13
0
 /**
  * @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;
 }
コード例 #14
0
 /**
  * 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;
 }
コード例 #15
0
ファイル: Application.php プロジェクト: ausger/satis
 /**
  * @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;
 }
コード例 #16
0
 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();
         }
     }
 }
コード例 #17
0
 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();
 }
コード例 #18
0
 /**
  * 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();
 }
コード例 #19
0
ファイル: Application.php プロジェクト: vojtasvoboda/victor
 /**
  * @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;
 }
コード例 #20
0
 /**
  * @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);
     }
 }
コード例 #21
0
 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;
 }
コード例 #22
0
ファイル: Factory.php プロジェクト: aleksabp/bolt
 /**
  * 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;
 }
コード例 #23
0
ファイル: Application.php プロジェクト: mbolli/drupal-tangler
 /**
  * @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;
 }
コード例 #24
0
ファイル: UpdateCommand.php プロジェクト: kohkimakimoto/altax
 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;
 }
コード例 #25
0
ファイル: ValidateCommand.php プロジェクト: alcaeus/composer
 /**
  * @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;
 }
コード例 #26
0
ファイル: BaseAction.php プロジェクト: MenZil-Team/bolt
 /**
  * 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;
 }
コード例 #27
0
 /**
  * @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;
 }
コード例 #28
0
 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'] : ''));
     }
 }
コード例 #29
0
ファイル: BaseAction.php プロジェクト: d-m-/bolt
 /**
  * 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;
 }
コード例 #30
0
 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;
 }