public function testPrettyString() { $repo = new ArrayRepository(); $repo->addPackage($p1 = $this->getPackage('foo', '2.1')); $repo->addPackage($p2 = $this->getPackage('baz', '1.1')); $this->pool->addRepository($repo); $rule = new Rule(array($p1->getId(), -$p2->getId()), 'job1', null); $this->assertEquals('(don\'t install baz 1.1|install foo 2.1)', $rule->getPrettyString($this->pool)); }
public function testGetMaxId() { $pool = new Pool(); $repository = new ArrayRepository(); $firstPackage = $this->getPackage('foo', '1'); $secondPackage = $this->getPackage('foo1', '1'); $this->assertEquals(0, $pool->getMaxId()); $repository->addPackage($firstPackage); $repository->addPackage($secondPackage); $pool->addRepository($repository); $this->assertEquals(2, $pool->getMaxId()); }
public function testSearchWithPackageType() { $repo = new ArrayRepository(); $repo->addPackage($this->getPackage('foo', '1', 'Composer\\Package\\CompletePackage')); $repo->addPackage($this->getPackage('bar', '1', 'Composer\\Package\\CompletePackage')); $package = $this->getPackage('foobar', '1', 'Composer\\Package\\CompletePackage'); $package->setType('composer-plugin'); $repo->addPackage($package); $this->assertSame(array(array('name' => 'foo', 'description' => null)), $repo->search('foo', RepositoryInterface::SEARCH_FULLTEXT, 'library')); $this->assertEmpty($repo->search('bar', RepositoryInterface::SEARCH_FULLTEXT, 'package')); $this->assertSame(array(array('name' => 'foobar', 'description' => null)), $repo->search('foo', 0, 'composer-plugin')); }
public function testFindPackagesByName() { $repo = new ArrayRepository(); $repo->addPackage($this->getPackage('foo', '1')); $repo->addPackage($this->getPackage('bar', '2')); $repo->addPackage($this->getPackage('bar', '3')); $foo = $repo->findPackagesByName('foo'); $this->assertCount(1, $foo); $this->assertEquals('foo', $foo[0]->getName()); $bar = $repo->findPackagesByName('bar'); $this->assertCount(2, $bar); $this->assertEquals('bar', $bar[0]->getName()); }
protected function initialize() { parent::initialize(); $versionParser = new VersionParser(); try { $prettyVersion = PHP_VERSION; $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = preg_replace('#^(.+?)(-.+)?$#', '$1', PHP_VERSION); $version = $versionParser->normalize($prettyVersion); } $php = new MemoryPackage('php', $version, $prettyVersion); $php->setDescription('The PHP interpreter'); parent::addPackage($php); foreach (get_loaded_extensions() as $name) { if (in_array($name, array('standard', 'Core'))) { continue; } $reflExt = new \ReflectionExtension($name); try { $prettyVersion = $reflExt->getVersion(); $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = '0'; $version = $versionParser->normalize($prettyVersion); } $ext = new MemoryPackage('ext-' . $name, $version, $prettyVersion); $ext->setDescription('The ' . $name . ' PHP extension'); parent::addPackage($ext); } }
public function testRequestInstallAndRemove() { $pool = new Pool(); $repo = new ArrayRepository(); $foo = $this->getPackage('foo', '1'); $bar = $this->getPackage('bar', '1'); $foobar = $this->getPackage('foobar', '1'); $repo->addPackage($foo); $repo->addPackage($bar); $repo->addPackage($foobar); $pool->addRepository($repo); $request = new Request($pool); $request->install('foo'); $request->install('bar'); $request->remove('foobar'); $this->assertEquals(array(array('packages' => array($foo), 'cmd' => 'install', 'packageName' => 'foo'), array('packages' => array($bar), 'cmd' => 'install', 'packageName' => 'bar'), array('packages' => array($foobar), 'cmd' => 'remove', 'packageName' => 'foobar')), $request->getJobs()); }
public function testToString() { $repo = new ArrayRepository(); $repo->addPackage($p1 = $this->getPackage('foo', '2.1')); $repo->addPackage($p2 = $this->getPackage('baz', '1.1')); $this->pool->addRepository($repo); $rule = new Rule($this->pool, array($p1->getId(), -$p2->getId()), 'job1', null); $this->assertEquals('(-baz-1.1.0.0|+foo-2.1.0.0)', $rule->__toString()); }
public function testAutomaticallyAddAliasedPackage() { $repo = new ArrayRepository(); $package = $this->getPackage('foo', '1'); $alias = $this->getAliasPackage($package, '2'); $repo->addPackage($alias); $this->assertEquals(2, count($repo)); $this->assertTrue($repo->hasPackage($this->getPackage('foo', '1'))); $this->assertTrue($repo->hasPackage($this->getPackage('foo', '2'))); }
/** * @return array */ public function dataGetPackages() { $emptyRepo = new ArrayRepository(); $vendorRepo = new ArrayRepository(); $vendorRepo2 = new ArrayRepository(); $package = new Package('vendor/name', '1.0.0.0', '1.0'); $package2 = new Package('vendor2/name', '1.0.0.0', '1.0'); $package3 = new Package('vendor2/name2', '1.0.0.0', '1.0'); $vendorRepo->addPackage($package); $vendorRepo2->addPackage($package2); $vendorRepo2->addPackage($package3); $data = []; $data['empty repository'] = [[], [], $emptyRepo]; $data['empty repository with filter'] = [[], ['vendor/name'], $emptyRepo]; $data['repository with one package'] = [[$package], [], $vendorRepo]; $data['repository with one package and filter'] = [[], ['othervendor/othername'], $vendorRepo]; $data['repository with two packages'] = [[$package2, $package3], [], $vendorRepo2]; $data['repository with two packages and filter'] = [[$package2], ['vendor2/name'], $vendorRepo2]; return $data; }
public function dataGetPackages() { $emptyRepo = new ArrayRepository(); $vendorRepo = new ArrayRepository(); $vendorRepo2 = new ArrayRepository(); $package = new Package('vendor/name', '1.0.0.0', '1.0'); $package2 = new Package('vendor2/name', '1.0.0.0', '1.0'); $package3 = new Package('vendor2/name2', '1.0.0.0', '1.0'); $vendorRepo->addPackage($package); $vendorRepo2->addPackage($package2); $vendorRepo2->addPackage($package3); $data = array(); $data['empty repository'] = array(array(), array(), $emptyRepo); $data['empty repository with filter'] = array(array(), array('vendor/name'), $emptyRepo); $data['repository with one package'] = array(array($package), array(), $vendorRepo); $data['repository with one package and filter'] = array(array(), array('othervendor/othername'), $vendorRepo); $data['repository with two packages'] = array(array($package2, $package3), array(), $vendorRepo2); $data['repository with two packages and filter'] = array(array($package2), array('vendor2/name'), $vendorRepo2); return $data; }
public function testRequestInstallSamePackageFromDifferentRepositories() { $repo1 = new ArrayRepository(); $repo2 = new ArrayRepository(); $foo1 = $this->getPackage('foo', '1'); $foo2 = $this->getPackage('foo', '1'); $repo1->addPackage($foo1); $repo2->addPackage($foo2); $request = new Request(); $request->install('foo', $constraint = $this->getVersionConstraint('=', '1')); $this->assertEquals(array(array('cmd' => 'install', 'packageName' => 'foo', 'constraint' => $constraint, 'fixed' => false)), $request->getJobs()); }
public function testSolverInstallSamePackageFromDifferentRepositories() { $repo1 = new ArrayRepository(); $repo2 = new ArrayRepository(); $repo1->addPackage($foo1 = $this->getPackage('foo', '1')); $repo2->addPackage($foo2 = $this->getPackage('foo', '1')); $this->pool->addRepository($this->repoInstalled); $this->pool->addRepository($repo1); $this->pool->addRepository($repo2); $this->request->install('foo'); $this->checkSolverResult(array(array('job' => 'install', 'package' => $foo1))); }
public function testSelectLowest() { $policy = new DefaultPolicy(false, true); $this->repo->addPackage($packageA1 = $this->getPackage('A', '1.0')); $this->repo->addPackage($packageA2 = $this->getPackage('A', '2.0')); $this->pool->addRepository($this->repo); $literals = array($packageA1->getId(), $packageA2->getId()); $expected = array($packageA1->getId()); $selected = $policy->selectPreferredPackages($this->pool, array(), $literals); $this->assertSame($expected, $selected); }
public static function Construct(IOInterface $io) { $repo = new ArrayRepository(); try { $web_folder = Locator::getWebFolderPath(); $version_file = $web_folder . '/intranet/setup/_init/version.txt'; if (!file_exists($version_file)) { throw new \Exception("No version.txt for core found - assuming framework is not installed"); } $version_data = file($version_file); $core_version = $version_data[1]; $normalizer = new VersionParser(); $core_version_normalized = $normalizer->normalize($core_version); $io->write("Detected core version {$core_version} ({$core_version_normalized})"); $core_package = new Package(FrameworkInstallerV8::PACKAGE_NAME, $core_version_normalized, $core_version); $repo->addPackage($core_package); } catch (\Exception $e) { $io->write($e->getMessage()); // if can't determine location of 'web' folder, not adding the core package therefore letting // composer install it } return $repo; }
public function getLockedRepository($withDevReqs = false) { $lockData = $this->getLockData(); $packages = new ArrayRepository(); $lockedPackages = $lockData['packages']; if ($withDevReqs) { if (isset($lockData['packages-dev'])) { $lockedPackages = array_merge($lockedPackages, $lockData['packages-dev']); } else { throw new \RuntimeException('The lock file does not contain require-dev information, run install with the --no-dev option or run update to install those packages.'); } } if (empty($lockedPackages)) { return $packages; } if (isset($lockedPackages[0]['name'])) { foreach ($lockedPackages as $info) { $packages->addPackage($this->loader->load($info)); } return $packages; } throw new \RuntimeException('Your composer.lock was created before 2012-09-15, and is not supported anymore. Run "composer update" to generate a new one.'); }
protected function initialize() { parent::initialize(); $versionParser = new VersionParser(); try { $prettyVersion = PHP_VERSION; $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = preg_replace('#^([^~+-]+).*$#', '$1', PHP_VERSION); $version = $versionParser->normalize($prettyVersion); } $php = new CompletePackage('php', $version, $prettyVersion); $php->setDescription('The PHP interpreter'); parent::addPackage($php); if (PHP_INT_SIZE === 8) { $php64 = new CompletePackage('php-64bit', $version, $prettyVersion); $php64->setDescription('The PHP interpreter (64bit)'); parent::addPackage($php64); } $loadedExtensions = get_loaded_extensions(); // Extensions scanning foreach ($loadedExtensions as $name) { if (in_array($name, array('standard', 'Core'))) { continue; } $reflExt = new \ReflectionExtension($name); try { $prettyVersion = $reflExt->getVersion(); $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = '0'; $version = $versionParser->normalize($prettyVersion); } $ext = new CompletePackage('ext-' . $name, $version, $prettyVersion); $ext->setDescription('The ' . $name . ' PHP extension'); parent::addPackage($ext); } // Another quick loop, just for possible libraries // Doing it this way to know that functions or constants exist before // relying on them. foreach ($loadedExtensions as $name) { $prettyVersion = null; switch ($name) { case 'curl': $curlVersion = curl_version(); $prettyVersion = $curlVersion['version']; break; case 'iconv': $prettyVersion = ICONV_VERSION; break; case 'intl': $name = 'ICU'; if (defined('INTL_ICU_VERSION')) { $prettyVersion = INTL_ICU_VERSION; } else { $reflector = new \ReflectionExtension('intl'); ob_start(); $reflector->info(); $output = ob_get_clean(); preg_match('/^ICU version => (.*)$/m', $output, $matches); $prettyVersion = $matches[1]; } break; case 'libxml': $prettyVersion = LIBXML_DOTTED_VERSION; break; case 'openssl': $prettyVersion = preg_replace_callback('{^(?:OpenSSL\\s*)?([0-9.]+)([a-z]?).*}', function ($match) { return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96)); }, OPENSSL_VERSION_TEXT); break; case 'pcre': $prettyVersion = preg_replace('{^(\\S+).*}', '$1', PCRE_VERSION); break; case 'uuid': $prettyVersion = phpversion('uuid'); break; case 'xsl': $prettyVersion = LIBXSLT_DOTTED_VERSION; break; default: // None handled extensions have no special cases, skip continue 2; } try { $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { continue; } $lib = new CompletePackage('lib-' . $name, $version, $prettyVersion); $lib->setDescription('The ' . $name . ' PHP library'); parent::addPackage($lib); } }
protected function initialize() { parent::initialize(); $versionParser = new VersionParser(); $prettyVersion = PluginInterface::PLUGIN_API_VERSION; $version = $versionParser->normalize($prettyVersion); $composerPluginApi = new CompletePackage('composer-plugin-api', $version, $prettyVersion); $composerPluginApi->setDescription('The Composer Plugin API'); parent::addPackage($composerPluginApi); try { $prettyVersion = PHP_VERSION; $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = preg_replace('#^([^~+-]+).*$#', '$1', PHP_VERSION); $version = $versionParser->normalize($prettyVersion); } $php = new CompletePackage('php', $version, $prettyVersion); $php->setDescription('The PHP interpreter'); parent::addPackage($php); if (PHP_INT_SIZE === 8) { $php64 = new CompletePackage('php-64bit', $version, $prettyVersion); $php64->setDescription('The PHP interpreter (64bit)'); parent::addPackage($php64); } $loadedExtensions = get_loaded_extensions(); foreach ($loadedExtensions as $name) { if (in_array($name, array('standard', 'Core'))) { continue; } $reflExt = new \ReflectionExtension($name); try { $prettyVersion = $reflExt->getVersion(); $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = '0'; $version = $versionParser->normalize($prettyVersion); } $packageName = $this->buildPackageName($name); $ext = new CompletePackage($packageName, $version, $prettyVersion); $ext->setDescription('The ' . $name . ' PHP extension'); parent::addPackage($ext); } foreach ($loadedExtensions as $name) { $prettyVersion = null; switch ($name) { case 'curl': $curlVersion = curl_version(); $prettyVersion = $curlVersion['version']; break; case 'iconv': $prettyVersion = ICONV_VERSION; break; case 'intl': $name = 'ICU'; if (defined('INTL_ICU_VERSION')) { $prettyVersion = INTL_ICU_VERSION; } else { $reflector = new \ReflectionExtension('intl'); ob_start(); $reflector->info(); $output = ob_get_clean(); preg_match('/^ICU version => (.*)$/m', $output, $matches); $prettyVersion = $matches[1]; } break; case 'libxml': $prettyVersion = LIBXML_DOTTED_VERSION; break; case 'openssl': $prettyVersion = preg_replace_callback('{^(?:OpenSSL\\s*)?([0-9.]+)([a-z]?).*}', function ($match) { return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96)); }, OPENSSL_VERSION_TEXT); break; case 'pcre': $prettyVersion = preg_replace('{^(\\S+).*}', '$1', PCRE_VERSION); break; case 'uuid': $prettyVersion = phpversion('uuid'); break; case 'xsl': $prettyVersion = LIBXSLT_DOTTED_VERSION; break; default: continue 2; } try { $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { continue; } $lib = new CompletePackage('lib-' . $name, $version, $prettyVersion); $lib->setDescription('The ' . $name . ' PHP library'); parent::addPackage($lib); } if (defined('HHVM_VERSION')) { try { $prettyVersion = HHVM_VERSION; $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = preg_replace('#^([^~+-]+).*$#', '$1', HHVM_VERSION); $version = $versionParser->normalize($prettyVersion); } $hhvm = new CompletePackage('hhvm', $version, $prettyVersion); $hhvm->setDescription('The HHVM Runtime (64bit)'); parent::addPackage($hhvm); } }
public function testToString() { $repo = new ArrayRepository(); $repo->addPackage($p = $this->getPackage('foo', '2.1')); $this->pool->addRepository($repo); $ruleSet = new RuleSet(); $literal = $p->getId(); $rule = new Rule($this->pool, array($literal), 'job1', null); $ruleSet->add($rule, RuleSet::TYPE_JOB); $this->assertContains('JOB : (+foo-2.1.0.0)', $ruleSet->__toString()); }
/** * {@inheritDoc} */ public function addPackage(PackageInterface $package) { // Skip if overridden if (isset($this->overrides[strtolower($package->getName())])) { $overrider = $this->findPackage($package->getName(), '*'); $overrider->setDescription($overrider->getDescription() . ' (actual: ' . $package->getPrettyVersion() . ')'); return; } parent::addPackage($package); }
/** * {@inheritDoc} */ public function addPackage(PackageInterface $package) { // Skip if overridden if (isset($this->overrides[strtolower($package->getName())])) { return; } parent::addPackage($package); }
protected function initialize() { parent::initialize(); $versionParser = new VersionParser(); try { $prettyVersion = PHP_VERSION; $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = preg_replace('#^(.+?)(-.+)?$#', '$1', PHP_VERSION); $version = $versionParser->normalize($prettyVersion); } $php = new MemoryPackage('php', $version, $prettyVersion); $php->setDescription('The PHP interpreter'); parent::addPackage($php); $loadedExtensions = get_loaded_extensions(); // Extensions scanning foreach ($loadedExtensions as $name) { if (in_array($name, array('standard', 'Core'))) { continue; } $reflExt = new \ReflectionExtension($name); try { $prettyVersion = $reflExt->getVersion(); $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { $prettyVersion = '0'; $version = $versionParser->normalize($prettyVersion); } $ext = new MemoryPackage('ext-' . $name, $version, $prettyVersion); $ext->setDescription('The ' . $name . ' PHP extension'); parent::addPackage($ext); } // Another quick loop, just for possible libraries // Doing it this way to know that functions or constants exist before // relying on them. foreach ($loadedExtensions as $name) { switch ($name) { case 'curl': $curlVersion = curl_version(); $prettyVersion = $curlVersion['version']; break; case 'iconv': $prettyVersion = ICONV_VERSION; break; case 'libxml': $prettyVersion = LIBXML_DOTTED_VERSION; break; case 'openssl': $prettyVersion = preg_replace_callback('{^(?:OpenSSL\\s*)?([0-9.]+)([a-z]?).*}', function ($match) { return $match[1] . (empty($match[2]) ? '' : '.' . (ord($match[2]) - 96)); }, OPENSSL_VERSION_TEXT); break; case 'pcre': $prettyVersion = preg_replace('{^(\\S+).*}', '$1', PCRE_VERSION); break; case 'uuid': $prettyVersion = phpversion('uuid'); break; case 'xsl': $prettyVersion = LIBXSLT_DOTTED_VERSION; break; default: // None handled extensions have no special cases, skip continue 2; } try { $version = $versionParser->normalize($prettyVersion); } catch (\UnexpectedValueException $e) { continue; } $lib = new MemoryPackage('lib-' . $name, $version, $prettyVersion); $lib->setDescription('The ' . $name . ' PHP library'); parent::addPackage($lib); } }
public function testPackageById() { $pool = new Pool(); $repository = new ArrayRepository(); $package = $this->getPackage('foo', '1'); $repository->addPackage($package); $pool->addRepository($repository); $this->assertSame($package, $pool->packageById(1)); }
public function testPreferReplacingPackageFromSameVendor() { // test with default order $this->repo->addPackage($packageB = $this->getPackage('vendor-b/replacer', '1.0')); $this->repo->addPackage($packageA = $this->getPackage('vendor-a/replacer', '1.0')); $packageA->setReplaces(array(new Link('vendor-a/replacer', 'vendor-a/package', new Constraint('==', '1.0'), 'replaces'))); $packageB->setReplaces(array(new Link('vendor-b/replacer', 'vendor-a/package', new Constraint('==', '1.0'), 'replaces'))); $this->pool->addRepository($this->repo); $literals = array($packageA->getId(), $packageB->getId()); $expected = $literals; $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals, 'vendor-a/package'); $this->assertEquals($expected, $selected); // test with reversed order in repo $repo = new ArrayRepository(); $repo->addPackage($packageA = clone $packageA); $repo->addPackage($packageB = clone $packageB); $pool = new Pool('dev'); $pool->addRepository($this->repo); $literals = array($packageA->getId(), $packageB->getId()); $expected = $literals; $selected = $this->policy->selectPreferredPackages($this->pool, array(), $literals, 'vendor-a/package'); $this->assertEquals($expected, $selected); }
/** * Searches and returns an array of locked packages, retrieved from registered repositories. * * @param bool $dev true to retrieve the locked dev packages * @return \Composer\Repository\RepositoryInterface */ public function getLockedRepository($dev = false) { $lockData = $this->getLockData(); $packages = new ArrayRepository(); $lockedPackages = $dev ? $lockData['packages-dev'] : $lockData['packages']; if (empty($lockedPackages)) { return $packages; } if (isset($lockedPackages[0]['name'])) { foreach ($lockedPackages as $info) { $packages->addPackage($this->loader->load($info)); } return $packages; } // legacy lock file support $repo = $dev ? $this->repositoryManager->getLocalDevRepository() : $this->repositoryManager->getLocalRepository(); foreach ($lockedPackages as $info) { $resolvedVersion = !empty($info['alias-version']) ? $info['alias-version'] : $info['version']; // try to find the package in the local repo (best match) $package = $repo->findPackage($info['package'], $resolvedVersion); // try to find the package in any repo if (!$package) { $package = $this->repositoryManager->findPackage($info['package'], $resolvedVersion); } // try to find the package in any repo (second pass without alias + rebuild alias since it disappeared) if (!$package && !empty($info['alias-version'])) { $package = $this->repositoryManager->findPackage($info['package'], $info['version']); if ($package) { $package->setAlias($info['alias-version']); $package->setPrettyAlias($info['alias-pretty-version']); } } if (!$package) { throw new \LogicException(sprintf('Can not find "%s-%s" package in registered repositories', $info['package'], $info['version'])); } $package = clone $package; if (!empty($info['time'])) { $package->setReleaseDate($info['time']); } if (!empty($info['source-reference'])) { $package->setSourceReference($info['source-reference']); if (is_callable($package, 'setDistReference')) { $package->setDistReference($info['source-reference']); } } $packages->addPackage($package); } return $packages; }
/** * Adds a new package to the repository * * @param PackageInterface $package */ public function addPackage(PackageInterface $package) { parent::addPackage($package); $this->configurePackageTransportOptions($package); }
public function testCount() { $arrayRepoOne = new ArrayRepository(); $arrayRepoOne->addPackage($this->getPackage('foo', '1')); $arrayRepoTwo = new ArrayRepository(); $arrayRepoTwo->addPackage($this->getPackage('bar', '1')); $repo = new CompositeRepository(array($arrayRepoOne, $arrayRepoTwo)); $this->assertEquals(2, count($repo), "Should return '2' for count(\$repo)"); }
public function testPrettyString() { $repo = new ArrayRepository(); $repo->addPackage($p = $this->getPackage('foo', '2.1')); $this->pool->addRepository($repo); $ruleSet = new RuleSet(); $literal = $p->getId(); $rule = new Rule(array($literal), Rule::RULE_JOB_INSTALL, null); $ruleSet->add($rule, RuleSet::TYPE_JOB); $this->assertContains('JOB : Install command rule (install foo 2.1)', $ruleSet->getPrettyString($this->pool)); }
$loader = new ArrayLoader(); /* Remote repository definition */ $json_string = file_get_contents("remote.json"); $packages = JsonFile::parseJson($json_string); $remote_repo = new ArrayRepository(); foreach ($packages as $packageData) { $package = $loader->load($packageData); $remote_repo->addPackage($package); } /* Installed repository definition */ $json_string = file_get_contents("installed.json"); $packages = JsonFile::parseJson($json_string); $installed_repo = new ArrayRepository(); foreach ($packages as $packageData) { $package = $loader->load($packageData); $installed_repo->addPackage($package); } /* Pool definition */ $pool = new Pool(); $pool->addRepository($remote_repo); $pool->addRepository($installed_repo); $request = new Request($pool); $request->install("numpy", new MultiConstraint(array())); class DebuggingSolver extends Solver { public function printRules(Request $request) { $this->jobs = $request->getJobs(); $this->setupInstalledMap(); $this->decisions = new Decisions($this->pool); $this->rules = $this->ruleSetGenerator->getRulesFor($this->jobs, $this->installedMap);