/** * Mock the controller. * * @return \PHPUnit_Framework_MockObject_MockObject|PackageController */ private function prepareController() { $manager = $this->getMockBuilder(RepositoryManager::class)->disableOriginalConstructor()->setMethods(null)->getMock(); $config = new Config(); $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config); $rootPackage = $loader->load(json_decode($this->readFixture('composer.json'), true)); $loader = new ArrayLoader(); $json = json_decode($this->readFixture('installed.json'), true); $packages = []; foreach ($json as $package) { $packages[] = $loader->load($package); } $manager->setLocalRepository(new WritableArrayRepository($packages)); $composer = $this->getMockBuilder(Composer::class)->setMethods(['getPackage', 'getRepositoryManager'])->getMock(); $composer->method('getPackage')->willReturn($rootPackage); $composer->method('getRepositoryManager')->willReturn($manager); $controller = $this->getMockBuilder(PackageController::class)->setMethods(['getComposer', 'forward'])->getMock(); $controller->method('getComposer')->willReturn($composer); $home = $this->getMock(HomePathDeterminator::class, ['homeDir']); $home->method('homeDir')->willReturn($this->getTempDir()); $composerJson = $this->provideFixture('composer.json'); $this->provideFixture('composer.lock'); $this->provideFixture('installed.json', 'vendor/composer/installed.json'); $container = new Container(); $container->set('tenside.home', $home); $container->set('tenside.composer_json', new ComposerJson($composerJson)); /** @var PackageController $controller */ $controller->setContainer($container); return $controller; }
public function testDetachedHeadBecomesDevHash() { if (!function_exists('proc_open')) { $this->markTestSkipped('proc_open() is not available'); } $commitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea'; $manager = $this->getMockBuilder('\\Composer\\Repository\\RepositoryManager')->disableOriginalConstructor()->getMock(); $self = $this; /* Can do away with this mock object when https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 is fixed */ $processExecutor = new ProcessExecutorMock(function ($command, &$output = null, $cwd = null) use($self, $commitHash) { $self->assertStringStartsWith('git branch', $command); $output = "* (no branch) {$commitHash} Commit message\n"; return 0; }); $config = new Config(); $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config, null, $processExecutor); $package = $loader->load(array()); $this->assertEquals("dev-{$commitHash}", $package->getVersion()); }
protected function setup() { // Set config $this->refConfig = new ReflectionProperty(OptionalPackages::class, 'config'); $this->refConfig->setAccessible(true); $this->refConfig->setValue(require 'src/ExpressiveInstaller/config.php'); $this->io = $this->prophesize('Composer\\IO\\IOInterface'); // Set composer.json $composerFile = Factory::getComposerFile(); $json = new JsonFile($composerFile); $localConfig = $json->read(); $this->refComposerDefinition = new ReflectionProperty(OptionalPackages::class, 'composerDefinition'); $this->refComposerDefinition->setAccessible(true); $this->refComposerDefinition->setValue($localConfig); // Load parsed package data $manager = $this->prophesize(RepositoryManager::class); $composerConfig = new Config(); $composerConfig->merge(['repositories' => ['packagist' => false]]); $loader = new RootPackageLoader($manager->reveal(), $composerConfig); $package = $loader->load($localConfig); // Set package data $this->refComposerRequires = new ReflectionProperty(OptionalPackages::class, 'composerRequires'); $this->refComposerRequires->setAccessible(true); $this->refComposerRequires->setValue($package->getRequires()); $this->refComposerDevRequires = new ReflectionProperty(OptionalPackages::class, 'composerDevRequires'); $this->refComposerDevRequires->setAccessible(true); $this->refComposerDevRequires->setValue($package->getDevRequires()); $this->refStabilityFlags = new ReflectionProperty(OptionalPackages::class, 'stabilityFlags'); $this->refStabilityFlags->setAccessible(true); $this->refStabilityFlags->setValue($package->getStabilityFlags()); // Set project root $this->refProjectRoot = new ReflectionProperty(OptionalPackages::class, 'projectRoot'); $this->refProjectRoot->setAccessible(true); $this->refProjectRoot->setValue(realpath(dirname($composerFile))); // Cleanup old install files $this->cleanup(); }
public function testNonFeatureBranchPrettyVersion() { if (!function_exists('proc_open')) { $this->markTestSkipped('proc_open() is not available'); } $manager = $this->getMockBuilder('\\Composer\\Repository\\RepositoryManager')->disableOriginalConstructor()->getMock(); $executor = $this->getMockBuilder('\\Composer\\Util\\ProcessExecutor')->setMethods(array('execute'))->disableArgumentCloning()->disableOriginalConstructor()->getMock(); $self = $this; $executor->expects($this->at(0))->method('execute')->willReturnCallback(function ($command, &$output) use($self) { $self->assertEquals('git branch --no-color --no-abbrev -v', $command); $output = "* latest-production 38137d2f6c70e775e137b2d8a7a7d3eaebf7c7e5 Commit message\n master 4f6ed96b0bc363d2aa4404c3412de1c011f67c66 Commit message\n"; return 0; }); $config = new Config(); $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config, null, new VersionGuesser($config, $executor, new VersionParser())); $package = $loader->load(array('require' => array('foo/bar' => 'self.version'), "non-feature-branches" => array("latest-.*"))); $this->assertEquals("dev-latest-production", $package->getPrettyVersion()); }
/** * Creates a Composer instance * * @param IOInterface $io IO instance * @param array|string|null $localConfig either a configuration array or a filename to read from, if null it will * read from the default filename * @param bool $disablePlugins Whether plugins should not be loaded * @param bool $fullLoad Whether to initialize everything or only main project stuff (used when loading the global composer) * @throws \InvalidArgumentException * @throws \UnexpectedValueException * @return Composer */ public function createComposer(IOInterface $io, $localConfig = null, $disablePlugins = false, $cwd = null, $fullLoad = true) { $cwd = $cwd ?: getcwd(); // load Composer configuration if (null === $localConfig) { $localConfig = static::getComposerFile(); } if (is_string($localConfig)) { $composerFile = $localConfig; $file = new JsonFile($localConfig, null, $io); if (!$file->exists()) { if ($localConfig === './composer.json' || $localConfig === 'composer.json') { $message = 'Composer could not find a composer.json file in ' . $cwd; } else { $message = 'Composer could not find the config file: ' . $localConfig; } $instructions = 'To initialize a project, please create a composer.json file as described in the https://getcomposer.org/ "Getting Started" section'; throw new \InvalidArgumentException($message . PHP_EOL . $instructions); } $file->validateSchema(JsonFile::LAX_SCHEMA); $jsonParser = new JsonParser(); try { $jsonParser->parse(file_get_contents($localConfig), JsonParser::DETECT_KEY_CONFLICTS); } catch (\Seld\JsonLint\DuplicateKeyException $e) { $details = $e->getDetails(); $io->writeError('<warning>Key ' . $details['key'] . ' is a duplicate in ' . $localConfig . ' at line ' . $details['line'] . '</warning>'); } $localConfig = $file->read(); } // Load config and override with local config/auth config $config = static::createConfig($io, $cwd); $config->merge($localConfig); if (isset($composerFile)) { $io->writeError('Loading config file ' . $composerFile, true, IOInterface::DEBUG); $localAuthFile = new JsonFile(dirname(realpath($composerFile)) . '/auth.json'); if ($localAuthFile->exists()) { $io->writeError('Loading config file ' . $localAuthFile->getPath(), true, IOInterface::DEBUG); $config->merge(array('config' => $localAuthFile->read())); $config->setAuthConfigSource(new JsonConfigSource($localAuthFile, true)); } } $vendorDir = $config->get('vendor-dir'); $binDir = $config->get('bin-dir'); // initialize composer $composer = new Composer(); $composer->setConfig($config); if ($fullLoad) { // load auth configs into the IO instance $io->loadConfiguration($config); } $rfs = self::createRemoteFilesystem($io, $config); // initialize event dispatcher $dispatcher = new EventDispatcher($composer, $io); $composer->setEventDispatcher($dispatcher); // initialize repository manager $rm = $this->createRepositoryManager($io, $config, $dispatcher, $rfs); $composer->setRepositoryManager($rm); // load local repository $this->addLocalRepository($io, $rm, $vendorDir); // force-set the version of the global package if not defined as // guessing it adds no value and only takes time if (!$fullLoad && !isset($localConfig['version'])) { $localConfig['version'] = '1.0.0'; } // load package $parser = new VersionParser(); $guesser = new VersionGuesser($config, new ProcessExecutor($io), $parser); $loader = new Package\Loader\RootPackageLoader($rm, $config, $parser, $guesser); $package = $loader->load($localConfig, 'Composer\\Package\\RootPackage', $cwd); $composer->setPackage($package); // initialize installation manager $im = $this->createInstallationManager(); $composer->setInstallationManager($im); if ($fullLoad) { // initialize download manager $dm = $this->createDownloadManager($io, $config, $dispatcher, $rfs); $composer->setDownloadManager($dm); // initialize autoload generator $generator = new AutoloadGenerator($dispatcher, $io); $composer->setAutoloadGenerator($generator); } // add installers to the manager (must happen after download manager is created since they read it out of $composer) $this->createDefaultInstallers($im, $composer, $io); if ($fullLoad) { $globalComposer = $this->createGlobalComposer($io, $config, $disablePlugins); $pm = $this->createPluginManager($io, $composer, $globalComposer, $disablePlugins); $composer->setPluginManager($pm); $pm->loadInstalledPlugins(); // once we have plugins and custom installers we can // purge packages from local repos if they have been deleted on the filesystem if ($rm->getLocalRepository()) { $this->purgePackages($rm->getLocalRepository(), $im); } } // init locker if possible if ($fullLoad && isset($composerFile)) { $lockFile = "json" === pathinfo($composerFile, PATHINFO_EXTENSION) ? substr($composerFile, 0, -4) . 'lock' : $composerFile . '.lock'; $locker = new Package\Locker($io, new JsonFile($lockFile, null, $io), $rm, $im, file_get_contents($composerFile)); $composer->setLocker($locker); } return $composer; }
/** * Creates a Composer instance * * @param IOInterface $io IO instance * @param array|string|null $localConfig either a configuration array or a filename to read from, if null it will * read from the default filename * @throws \InvalidArgumentException * @return Composer */ public function createComposer(IOInterface $io, $localConfig = null) { // load Composer configuration if (null === $localConfig) { $localConfig = static::getComposerFile(); } if (is_string($localConfig)) { $composerFile = $localConfig; $file = new JsonFile($localConfig, new RemoteFilesystem($io)); if (!$file->exists()) { if ($localConfig === 'composer.json') { $message = 'Composer could not find a composer.json file in ' . getcwd(); } else { $message = 'Composer could not find the config file: ' . $localConfig; } $instructions = 'To initialize a project, please create a composer.json file as described in the http://getcomposer.org/ "Getting Started" section'; throw new \InvalidArgumentException($message . PHP_EOL . $instructions); } $file->validateSchema(JsonFile::LAX_SCHEMA); $localConfig = $file->read(); } // Configuration defaults $config = static::createConfig(); $config->merge($localConfig); // reload oauth token from config if available if ($tokens = $config->get('github-oauth')) { foreach ($tokens as $domain => $token) { if (!preg_match('{^[a-z0-9]+$}', $token)) { throw new \UnexpectedValueException('Your github oauth token for ' . $domain . ' contains invalid characters: "' . $token . '"'); } $io->setAuthentication($domain, $token, 'x-oauth-basic'); } } $vendorDir = $config->get('vendor-dir'); $binDir = $config->get('bin-dir'); // setup process timeout ProcessExecutor::setTimeout((int) $config->get('process-timeout')); // initialize repository manager $rm = $this->createRepositoryManager($io, $config); // load local repository $this->addLocalRepository($rm, $vendorDir); // load package $loader = new Package\Loader\RootPackageLoader($rm, $config); $package = $loader->load($localConfig); // initialize download manager $dm = $this->createDownloadManager($io, $config); // initialize installation manager $im = $this->createInstallationManager(); // initialize composer $composer = new Composer(); $composer->setConfig($config); $composer->setPackage($package); $composer->setRepositoryManager($rm); $composer->setDownloadManager($dm); $composer->setInstallationManager($im); // initialize event dispatcher $dispatcher = new EventDispatcher($composer, $io); $composer->setEventDispatcher($dispatcher); // initialize autoload generator $generator = new AutoloadGenerator($dispatcher); $composer->setAutoloadGenerator($generator); // add installers to the manager $this->createDefaultInstallers($im, $composer, $io); // purge packages if they have been deleted on the filesystem $this->purgePackages($rm, $im); // init locker if possible if (isset($composerFile)) { $lockFile = "json" === pathinfo($composerFile, PATHINFO_EXTENSION) ? substr($composerFile, 0, -4) . 'lock' : $composerFile . '.lock'; $locker = new Package\Locker(new JsonFile($lockFile, new RemoteFilesystem($io)), $rm, $im, md5_file($composerFile)); $composer->setLocker($locker); } return $composer; }
protected function loadPackage($data) { $manager = $this->getMockBuilder('\\Composer\\Repository\\RepositoryManager')->disableOriginalConstructor()->getMock(); $processExecutor = new ProcessExecutorMock(function ($command, &$output = null, $cwd = null) { return 1; }); $config = new Config(); $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config); return $loader->load($data); }
/** * Creates a Composer instance * * @param IOInterface $io IO instance * @param array|string|null $localConfig either a configuration array or a filename to read from, if null it will * read from the default filename * @param bool $disablePlugins Whether plugins should not be loaded * @throws \InvalidArgumentException * @throws \UnexpectedValueException * @return Composer */ public function createComposer(IOInterface $io, $localConfig = null, $disablePlugins = false) { // load Composer configuration if (null === $localConfig) { $localConfig = static::getComposerFile(); } if (is_string($localConfig)) { $composerFile = $localConfig; $file = new JsonFile($localConfig, new RemoteFilesystem($io)); if (!$file->exists()) { if ($localConfig === './composer.json' || $localConfig === 'composer.json') { $message = 'Composer could not find a composer.json file in ' . getcwd(); } else { $message = 'Composer could not find the config file: ' . $localConfig; } $instructions = 'To initialize a project, please create a composer.json file as described in the http://getcomposer.org/ "Getting Started" section'; throw new \InvalidArgumentException($message . PHP_EOL . $instructions); } $file->validateSchema(JsonFile::LAX_SCHEMA); $localConfig = $file->read(); } // Load config and override with local config/auth config $config = static::createConfig($io); $config->merge($localConfig); if (isset($composerFile)) { if ($io && $io->isDebug()) { $io->write('Loading config file ' . $composerFile); } $localAuthFile = new JsonFile(dirname(realpath($composerFile)) . '/auth.json'); if ($localAuthFile->exists()) { if ($io && $io->isDebug()) { $io->write('Loading config file ' . $localAuthFile->getPath()); } $config->merge(array('config' => $localAuthFile->read())); $config->setAuthConfigSource(new JsonConfigSource($localAuthFile, true)); } } // load auth configs into the IO instance $io->loadConfiguration($config); $vendorDir = $config->get('vendor-dir'); $binDir = $config->get('bin-dir'); // setup process timeout ProcessExecutor::setTimeout((int) $config->get('process-timeout')); // initialize composer $composer = new Composer(); $composer->setConfig($config); // initialize event dispatcher $dispatcher = new EventDispatcher($composer, $io); // initialize repository manager $rm = $this->createRepositoryManager($io, $config, $dispatcher); // load local repository $this->addLocalRepository($rm, $vendorDir); // load package $parser = new VersionParser(); $loader = new Package\Loader\RootPackageLoader($rm, $config, $parser, new ProcessExecutor($io)); $package = $loader->load($localConfig); // initialize installation manager $im = $this->createInstallationManager(); // Composer composition $composer->setPackage($package); $composer->setRepositoryManager($rm); $composer->setInstallationManager($im); // initialize download manager $dm = $this->createDownloadManager($io, $config, $dispatcher); $composer->setDownloadManager($dm); $composer->setEventDispatcher($dispatcher); // initialize autoload generator $generator = new AutoloadGenerator($dispatcher, $io); $composer->setAutoloadGenerator($generator); // add installers to the manager $this->createDefaultInstallers($im, $composer, $io); $globalRepository = $this->createGlobalRepository($config, $vendorDir); $pm = $this->createPluginManager($composer, $io, $globalRepository); $composer->setPluginManager($pm); if (!$disablePlugins) { $pm->loadInstalledPlugins(); } // purge packages if they have been deleted on the filesystem $this->purgePackages($rm, $im); // init locker if possible if (isset($composerFile)) { $lockFile = "json" === pathinfo($composerFile, PATHINFO_EXTENSION) ? substr($composerFile, 0, -4) . 'lock' : $composerFile . '.lock'; $locker = new Package\Locker($io, new JsonFile($lockFile, new RemoteFilesystem($io, $config)), $rm, $im, md5_file($composerFile)); $composer->setLocker($locker); } return $composer; }
/** * Creates a Composer instance * * @return Composer */ public function createComposer(IOInterface $io, $composerFile = null) { // load Composer configuration if (null === $composerFile) { $composerFile = getenv('COMPOSER') ?: 'composer.json'; } $file = new JsonFile($composerFile); if (!$file->exists()) { if ($composerFile === 'composer.json') { $message = 'Composer could not find a composer.json file in ' . getcwd(); } else { $message = 'Composer could not find the config file: ' . $composerFile; } $instructions = 'To initialize a project, please create a composer.json file as described on the http://packagist.org/ "Getting Started" section'; throw new \InvalidArgumentException($message . PHP_EOL . $instructions); } // Configuration defaults $composerConfig = array('vendor-dir' => 'vendor', 'process-timeout' => 300); $packageConfig = $file->read(); if (isset($packageConfig['config']) && is_array($packageConfig['config'])) { $packageConfig['config'] = array_merge($composerConfig, $packageConfig['config']); } else { $packageConfig['config'] = $composerConfig; } $vendorDir = getenv('COMPOSER_VENDOR_DIR') ?: $packageConfig['config']['vendor-dir']; if (!isset($packageConfig['config']['bin-dir'])) { $packageConfig['config']['bin-dir'] = $vendorDir . '/bin'; } $binDir = getenv('COMPOSER_BIN_DIR') ?: $packageConfig['config']['bin-dir']; // setup process timeout $processTimeout = getenv('COMPOSER_PROCESS_TIMEOUT') ?: $packageConfig['config']['process-timeout']; ProcessExecutor::setTimeout((int) $processTimeout); // initialize repository manager $rm = $this->createRepositoryManager($io); // load default repository unless it's explicitly disabled $loadPackagist = true; if (isset($packageConfig['repositories'])) { foreach ($packageConfig['repositories'] as $repo) { if (isset($repo['packagist']) && $repo['packagist'] === false) { $loadPackagist = false; } } } if ($loadPackagist) { $this->addPackagistRepository($rm); } // load local repository $this->addLocalRepository($rm, $vendorDir); // load package $loader = new Package\Loader\RootPackageLoader($rm); $package = $loader->load($packageConfig); // initialize download manager $dm = $this->createDownloadManager($io); // initialize installation manager $im = $this->createInstallationManager($rm, $dm, $vendorDir, $binDir, $io); // init locker $lockFile = substr($composerFile, -5) === '.json' ? substr($composerFile, 0, -4) . 'lock' : $composerFile . '.lock'; $locker = new Package\Locker(new JsonFile($lockFile), $rm, md5_file($composerFile)); // initialize composer $composer = new Composer(); $composer->setPackage($package); $composer->setLocker($locker); $composer->setRepositoryManager($rm); $composer->setDownloadManager($dm); $composer->setInstallationManager($im); return $composer; }
public function testNonFeatureBranchPrettyVersion() { if (!function_exists('proc_open')) { $this->markTestSkipped('proc_open() is not available'); } $manager = $this->getMockBuilder('\\Composer\\Repository\\RepositoryManager') ->disableOriginalConstructor() ->getMock(); $self = $this; /* Can do away with this mock object when https://github.com/sebastianbergmann/phpunit-mock-objects/issues/81 is fixed */ $processExecutor = new ProcessExecutorMock(function ($command, &$output = null, $cwd = null) use ($self) { if (0 === strpos($command, 'git rev-list')) { $output = ""; return 0; } if ('git branch --no-color --no-abbrev -v' !== $command) { return 1; //0; } $self->assertEquals('git branch --no-color --no-abbrev -v', $command); $output = "* latest-production 38137d2f6c70e775e137b2d8a7a7d3eaebf7c7e5 Commit message\n master 4f6ed96b0bc363d2aa4404c3412de1c011f67c66 Commit message\n"; return 0; }); $config = new Config; $config->merge(array('repositories' => array('packagist' => false))); $loader = new RootPackageLoader($manager, $config, null, $processExecutor); $package = $loader->load(array('require' => array('foo/bar' => 'self.version'), "non-feature-branches" => array("latest-.*"))); $this->assertEquals("dev-latest-production", $package->getPrettyVersion()); }
/** * Creates a Composer instance * * @param IOInterface $io IO instance * @param mixed $localConfig either a configuration array or a filename to read from, if null it will read from the default filename * @return Composer */ public function createComposer(IOInterface $io, $localConfig = null) { // load Composer configuration if (null === $localConfig) { $localConfig = $this->getComposerFile(); } if (is_string($localConfig)) { $composerFile = $localConfig; $file = new JsonFile($localConfig, new RemoteFilesystem($io)); if (!$file->exists()) { if ($localConfig === 'composer.json') { $message = 'Composer could not find a composer.json file in ' . getcwd(); } else { $message = 'Composer could not find the config file: ' . $localConfig; } $instructions = 'To initialize a project, please create a composer.json file as described in the http://getcomposer.org/ "Getting Started" section'; throw new \InvalidArgumentException($message . PHP_EOL . $instructions); } $file->validateSchema(JsonFile::LAX_SCHEMA); $localConfig = $file->read(); } // Configuration defaults $config = static::createConfig(); $config->merge($localConfig); $vendorDir = $config->get('vendor-dir'); $binDir = $config->get('bin-dir'); // setup process timeout ProcessExecutor::setTimeout((int) $config->get('process-timeout')); // initialize repository manager $rm = $this->createRepositoryManager($io, $config); // load default repository unless it's explicitly disabled $localConfig = $this->addPackagistRepository($localConfig); // load local repository $this->addLocalRepository($rm, $vendorDir); // load package $loader = new Package\Loader\RootPackageLoader($rm); $package = $loader->load($localConfig); // initialize download manager $dm = $this->createDownloadManager($io); // initialize installation manager $im = $this->createInstallationManager($rm, $dm, $vendorDir, $binDir, $io); // purge packages if they have been deleted on the filesystem $this->purgePackages($rm, $im); // initialize composer $composer = new Composer(); $composer->setConfig($config); $composer->setPackage($package); $composer->setRepositoryManager($rm); $composer->setDownloadManager($dm); $composer->setInstallationManager($im); // init locker if possible if (isset($composerFile)) { $lockFile = "json" === pathinfo($composerFile, PATHINFO_EXTENSION) ? substr($composerFile, 0, -4) . 'lock' : $composerFile . '.lock'; $locker = new Package\Locker(new JsonFile($lockFile, new RemoteFilesystem($io)), $rm, md5_file($composerFile)); $composer->setLocker($locker); } return $composer; }
public function createComposer(IOInterface $io, $localConfig = null, $disablePlugins = false) { if (null === $localConfig) { $localConfig = static::getComposerFile(); } if (is_string($localConfig)) { $composerFile = $localConfig; $file = new JsonFile($localConfig, new RemoteFilesystem($io)); if (!$file->exists()) { if ($localConfig === './composer.json' || $localConfig === 'composer.json') { $message = 'Composer could not find a composer.json file in ' . getcwd(); } else { $message = 'Composer could not find the config file: ' . $localConfig; } $instructions = 'To initialize a project, please create a composer.json file as described in the http://getcomposer.org/ "Getting Started" section'; throw new \InvalidArgumentException($message . PHP_EOL . $instructions); } $file->validateSchema(JsonFile::LAX_SCHEMA); $localConfig = $file->read(); } $config = static::createConfig(); $config->merge($localConfig); $io->loadConfiguration($config); $vendorDir = $config->get('vendor-dir'); $binDir = $config->get('bin-dir'); ProcessExecutor::setTimeout((int) $config->get('process-timeout')); $composer = new Composer(); $composer->setConfig($config); $dispatcher = new EventDispatcher($composer, $io); $rm = $this->createRepositoryManager($io, $config, $dispatcher); $this->addLocalRepository($rm, $vendorDir); $parser = new VersionParser(); $loader = new Package\Loader\RootPackageLoader($rm, $config, $parser, new ProcessExecutor($io)); $package = $loader->load($localConfig); $im = $this->createInstallationManager(); $composer->setPackage($package); $composer->setRepositoryManager($rm); $composer->setInstallationManager($im); $dm = $this->createDownloadManager($io, $config, $dispatcher); $composer->setDownloadManager($dm); $composer->setEventDispatcher($dispatcher); $generator = new AutoloadGenerator($dispatcher); $composer->setAutoloadGenerator($generator); $this->createDefaultInstallers($im, $composer, $io); $globalRepository = $this->createGlobalRepository($config, $vendorDir); $pm = $this->createPluginManager($composer, $io, $globalRepository); $composer->setPluginManager($pm); if (!$disablePlugins) { $pm->loadInstalledPlugins(); } $this->purgePackages($rm, $im); if (isset($composerFile)) { $lockFile = "json" === pathinfo($composerFile, PATHINFO_EXTENSION) ? substr($composerFile, 0, -4) . 'lock' : $composerFile . '.lock'; $locker = new Package\Locker($io, new JsonFile($lockFile, new RemoteFilesystem($io)), $rm, $im, md5_file($composerFile)); $composer->setLocker($locker); } return $composer; }
public function createComposer() { $cwd = sprintf('%s/%s', getcwd(), '.eva'); $factory = new Factory(); if (false) { $composer = $factory->createComposer($this->io, $config, true, $cwd); } // ----------------- // ----------------- // ----------------- $fullLoad = true; $composerFile = $cwd . '/manifest.composer.json'; $file = new JsonFile($composerFile); $file->validateSchema(JsonFile::LAX_SCHEMA); $localConfig = $file->read(); // ----------------- // ----------------- // ----------------- // Load config and override with local config/auth config // $config = Factory::createConfig($this->io, $cwd); $vendorDir = $cwd . '/manifests/vendor'; $config = $factory::createConfig($this->io, $cwd); $config->merge($localConfig); $config->merge(['config' => ['vendor-dir' => $vendorDir]]); $localAuthFile = new JsonFile(dirname(realpath($composerFile)) . '/auth.json'); if ($localAuthFile->exists()) { if ($this->io && $this->io->isDebug()) { $this->io->writeError('Loading config file ' . $localAuthFile->getPath()); } $config->merge(array('config' => $localAuthFile->read())); $config->setAuthConfigSource(new JsonConfigSource($localAuthFile, true)); } // initialize composer $composer = new Composer(); $composer->setConfig($config); // initialize event dispatcher $dispatcher = new EventDispatcher($composer, $this->io); $composer->setEventDispatcher($dispatcher); // initialize repository manager // $rm = $this->createRepositoryManager($io, $config, $dispatcher); // $composer->setRepositoryManager($rm); $rm = new RepositoryManager($this->io, $config, $dispatcher); $rm->setRepositoryClass('composer', ComposerRepository::class); $composer->setRepositoryManager($rm); // load local repository $rm->setLocalRepository(new InstalledFilesystemRepository(new JsonFile($vendorDir . '/composer/installed.json'))); // load package $parser = new VersionParser(); $guesser = new VersionGuesser($config, new ProcessExecutor($this->io), $parser); $loader = new RootPackageLoader($rm, $config, $parser, $guesser); $package = $loader->load($localConfig); $composer->setPackage($package); // initialize installation manager $im = new InstallationManager(); $composer->setInstallationManager($im); if ($fullLoad) { // initialize download manager $dm = $factory->createDownloadManager($this->io, $config, $dispatcher); $composer->setDownloadManager($dm); // initialize autoload generator $generator = new AutoloadGenerator($dispatcher, $this->io); $composer->setAutoloadGenerator($generator); } // add installers to the manager (must happen after download manager is created since they read it out of $composer) $im->addInstaller(new Installer\LibraryInstaller($this->io, $composer, null)); $im->addInstaller(new Installer\PearInstaller($this->io, $composer, 'pear-library')); $im->addInstaller(new Installer\PluginInstaller($this->io, $composer)); $im->addInstaller(new Installer\MetapackageInstaller($this->io)); // if ($fullLoad) { // $globalComposer = $this->createGlobalComposer($io, $config, $disablePlugins); // $pm = $this->createPluginManager($io, $composer, $globalComposer); // $composer->setPluginManager($pm); // // if (!$disablePlugins) { // $pm->loadInstalledPlugins(); // } // // // once we have plugins and custom installers we can // // purge packages from local repos if they have been deleted on the filesystem // if ($rm->getLocalRepository()) { // $this->purgePackages($rm->getLocalRepository(), $im); // } // } // init locker if possible if ($fullLoad && isset($composerFile)) { $lockFile = "json" === pathinfo($composerFile, PATHINFO_EXTENSION) ? substr($composerFile, 0, -4) . 'lock' : $composerFile . '.lock'; $locker = new Locker($this->io, new JsonFile($lockFile, new RemoteFilesystem($this->io, $config)), $rm, $im, file_get_contents($composerFile)); $composer->setLocker($locker); } // ----------------- // ----------------- // ----------------- return $composer; }