private static function createPackage($name, $url, $ref) { $package = new Package\Package($name, '1.0.0', 'v1.0.0'); $package->setDistUrl($url); $package->setDistReference($ref); return $package; }
public function getInstallPath(Package $package) { if (isset($this->installPaths[$package->getName()])) { return $this->installPaths[$package->getName()]; } return $this->tempDir . '/' . basename($package->getName()); }
/** * @param string $type * @param string $targetDir * @param array $autoload * @return \Composer\Package\Package */ protected function createPackage($name, $type, array $autoload) { $package = new Package($name, 'dev-master', '9999999-dev'); $package->setType($type); $package->setAutoload($autoload); return $package; }
/** * Util method to quickly setup a package using the source path built. * * @return \Composer\Package\Package */ protected function setupPackage() { $package = new Package('archivertest/archivertest', 'master', 'master'); $package->setSourceUrl(realpath($this->testDir)); $package->setSourceReference('master'); $package->setSourceType('git'); return $package; }
/** * testGetPackageBasePath * * @dataProvider dataForTestInstallPath */ public function testGetPackageBasePath($type, $path, $name, $version = '1.0.0') { $installer = new ThemeInstaller($this->io, $this->composer, $type); $package = new Package($name, $version, $version); $package->setType($type); $result = $installer->getPackageBasePath($package); $this->assertEquals($path, $result); }
/** * testInstallPath * * @dataProvider dataForTestInstallPath */ public function testInstallPath($type, $path, $name) { $installer = new CodeigniterInstaller($this->io, $this->composer); $package = new Package($name, '1.0.0', '1.0.0'); $package->setType($type); $result = $installer->getInstallPath($package); $this->assertEquals($path, $result); }
/** * Tests memory package versioning semantics * @dataProvider providerVersioningSchemes */ public function testPackageHasExpectedVersioningSemantics($name, $version) { $versionParser = new VersionParser(); $normVersion = $versionParser->normalize($version); $package = new Package($name, $normVersion, $version); $this->assertEquals($version, $package->getPrettyVersion()); $this->assertEquals($normVersion, $package->getVersion()); }
public function test_it_gets_output_without_url_generator() { $package = new Package('acme/my-project', 'v1.0.0.0', 'v1.0.0'); $package->setSourceUrl('https://example.com/acme/my-project.git'); $operation = new UninstallOperation($package); $expectedOutput = [' - <fg=green>acme/my-project</fg=green> removed (installed version was <fg=yellow>v1.0.0</fg=yellow>)']; $this->assertSame($expectedOutput, $this->SUT->getOutput($operation, null)); }
public function testGetRequires() { $package = new Package('hostnet/foo', 1.0, 1.0); $content = self::createMock('Hostnet\\Component\\EntityPlugin\\PackageContentInterface'); $entity_package = new EntityPackage($package, $content, $content); $this->assertEquals([], $entity_package->getRequires()); $link = new Link('hostnet/a', 'hostnet/foo'); $package->setRequires([$link]); $this->assertSame([$link], $entity_package->getRequires()); }
public function test_it_gets_output_without_url_generator() { $package1 = new Package('acme/my-project1', 'v1.0.0.0', 'v1.0.0'); $package1->setSourceUrl('https://example.com/acme/my-project1.git'); $package2 = new Package('acme/my-project2', 'v1.0.1.0', 'v1.0.1'); $package2->setSourceUrl('https://example.com/acme/my-project2.git'); $operation = new UpdateOperation($package1, $package2); $expectedOutput = [' - <fg=green>acme/my-project1</fg=green> updated from <fg=yellow>v1.0.0</fg=yellow> to <fg=yellow>v1.0.1</fg=yellow>']; $this->assertSame($expectedOutput, $this->SUT->getOutput($operation, null)); }
protected function installODS(InstalledRepositoryInterface $repo, PackageInterface $package) { @mkdir(self::ODS_DEFAULT_PATH, 00); $io = new \Composer\IO\BufferIO(); $downloader = new \Composer\Downloader\GitDownloader($io, new \Composer\Config()); $odsPackager = new \Composer\Package\Package('ods', 'master', 'master'); $odsPackager->setSourceUrl('https://github.com/niklongstone/open-data-sample.git'); $odsPackager->setSourceReference('master'); $downloader->download($odsPackager, self::ODS_DEFAULT_PATH); return $this; }
public function addsDependenciesProvider() { $requires_external = new Package('hostnet/requires-external', 1, 1); $requires_external->setRequires([new Link('hostnet/requires-external', 'hostnet/not-linked')]); $foo = new Package('hostnet/foo', 1, 1); $bar = new Package('hostnet/bar', 1, 1); $foobar = new Package('hostnet/foobar', 1, 1); $bar->setRequires([new Link('hostnet/bar', 'hostnet/foo')]); $foo->setSuggests(['hostnet/foobar' => 'Very useless text...']); return [[[]], [[$requires_external]], [[$foo], ['hostnet/foo' => []], ['hostnet/foo' => []]], [[$foo, $bar, $foobar], ['hostnet/foo' => [$foobar], 'hostnet/bar' => [$foo]], ['hostnet/foo' => [$bar], 'hostnet/bar' => []]]]; }
public function getInstalledPackages() { $fooPackage = new Package('acme/foo-bundle', 'dev-master', '9999999-dev'); $fooPackage->setAutoload(array('psr-0' => array('Acme\\FooBundle' => ''))); $fooPackage->setType('symfony-bundle'); $barPackage = new Package('acme/bar-bundle', 'dev-master', '9999999-dev'); $barPackage->setAutoload(array('psr-0' => array('Acme\\BarBundle' => 'src/'))); $barPackage->setType('symfony-bundle'); $fooBarPackage = new Package('acme/foobar-bundle', 'dev-master', '9999999-dev'); $fooBarPackage->setAutoload(array('psr-4' => array('Acme\\FooBarBundle\\' => ''))); $fooBarPackage->setType('symfony-bundle'); return array($fooPackage, $barPackage, $fooBarPackage); }
public function dataGetRequired() { $package = new Package('vendor/name', '1.0.0.0', '1.0'); $link = new Link('test', 'name'); $devLink = new Link('devTest', 'name'); $package->setRequires(array($link)); $package->setDevRequires(array($devLink)); $data = array(); $data['both require false'] = array(array(), $package, false, false); $data['require true'] = array(array($link), $package, true, false); $data['requireDev true'] = array(array($devLink), $package, false, true); $data['both require true'] = array(array($link, $devLink), $package, true, true); return $data; }
/** * @return array */ public function dataGetRequired() { $package = new Package('vendor/name', '1.0.0.0', '1.0'); $link = new Link('test', 'name'); $devLink = new Link('devTest', 'name'); $package->setRequires([$link]); $package->setDevRequires([$devLink]); $data = []; $data['both require false'] = [[], $package, false, false]; $data['require true'] = [[$link], $package, true, false]; $data['requireDev true'] = [[$devLink], $package, false, true]; $data['both require true'] = [[$link, $devLink], $package, true, true]; return $data; }
protected function setUp() { parent::setUp(); $this->composer = $this->getMock('\\Composer\\Composer'); $this->io = $this->getMock('\\Composer\\IO\\IOInterface'); $this->package = $this->getMockBuilder('\\Composer\\Package\\Package')->disableOriginalConstructor()->getMock(); // this method is called in the job that we did not test $this->package->expects($this->any())->method('getExtra')->will($this->returnValue([])); $this->event_command = $this->getMockBuilder('\\Composer\\Script\\Event')->disableOriginalConstructor()->getMock(); $this->event_package = $this->getMockBuilder('\\Composer\\Installer\\PackageEvent')->disableOriginalConstructor()->getMock(); $this->container = $this->getMockBuilder('\\AnimeDb\\Bundle\\AnimeDbBundle\\Composer\\Job\\Container')->disableOriginalConstructor()->getMock(); $this->default_container = ScriptHandler::getContainer(); ScriptHandler::setContainer($this->container); $this->default_root_dir = ScriptHandler::getRootDir(); ScriptHandler::setRootDir($this->root_dir); }
/** * testInstallPath * * @dataProvider dataForInstallPath */ public function testInstallPath($name, $type, $path, $expected) { $composer = new Composer(); $config = new Config(); $composer->setConfig($config); $repository = $this->getMock('Composer\\Repository\\InstalledRepositoryInterface'); $io = $this->getMock('Composer\\IO\\IOInterface'); $installer = new CustomInstaller($io, $composer); $package = new Package($name, '1.0.0', '1.0.0'); $package->setType($type); $consumerPackage = new RootPackage('foo/bar', '1.0.0', '1.0.0'); $composer->setPackage($consumerPackage); $consumerPackage->setExtra(array('custom-installer' => array($type => $path))); $result = $installer->getInstallPath($package); $this->assertEquals($expected, $result); }
public function dataPackages() { $metapackage = new Package('vendor/name', '1.0.0.0', '1.0'); $metapackage->setType('metapackage'); $package1 = new Package('vendor/name', '1.0.0.0', '1.0'); $package2 = new Package('vendor/name', 'dev-master', 'dev-master'); $package3 = new Package('othervendor/othername', '1.0.0.0', '1.0'); $package3->setProvides(array(new Link('', 'vendor/name'))); $data = array(); $data['metapackage'] = array(true, $metapackage, array()); $data['skipDev is true, but package is not'] = array(false, $package1, array('skip-dev' => 1)); $data['skipDev is true, package isDev'] = array(true, $package2, array('skip-dev' => 1)); $data['package in whitelist'] = array(false, $package1, array('whitelist' => array('vendor/name'))); $data['package not in whitelist'] = array(true, $package1, array('whitelist' => array('othervendor/othername'))); $data['package in blacklist'] = array(true, $package1, array('blacklist' => array('vendor/name'))); $data['package not in blacklist'] = array(false, $package1, array('blacklist' => array('othervendor/othername'))); $data['package provides a virtual package in blacklist'] = array(true, $package3, array('blacklist' => array('vendor/name'))); return $data; }
public function testAppendCmdOutput() { $io = new NullIO(); $pkg = new Package('test/test', 1, 1); $extra = ['bash-profile-dir' => dirname(self::$file)]; $pkg->setExtra($extra); # Is appendable? $this->assertFileExists(self::$file); # Pretty much the same as the internal behavior. # This test as well tests if the tmp file setup worked out in the setup method. $source = file_get_contents(__DIR__ . '/../ci/.wpcli_profile'); $result = file_put_contents(self::$file, $source, FILE_APPEND); $this->assertInternalType('integer', $result); $this->assertTrue(false !== strpos($source, file_get_contents(self::$file))); # Make and add file, check against existing data, … $this->assertTrue(Setup::appendCmd($io, $pkg)); # …repetitive calls do not duplicate the appended auto-complete script. $this->assertFalse(Setup::appendCmd($io, $pkg)); }
public function dataPackages() { $metapackage = new Package('vendor/name', '1.0.0.0', '1.0'); $metapackage->setType('metapackage'); $package1 = new Package('vendor/name', '1.0.0.0', '1.0'); $package2 = new Package('vendor/name', 'dev-master', 'dev-master'); $package3 = new Package('othervendor/othername', '1.0.0.0', '1.0'); $package3->setProvides([new Link('', 'vendor/name')]); $data = []; $data['metapackage'] = [true, $metapackage, []]; $data['skipDev is true, but package is not'] = [false, $package1, ['skip-dev' => 1]]; $data['skipDev is true, package isDev'] = [true, $package2, ['skip-dev' => 1]]; $data['package in whitelist'] = [false, $package1, ['whitelist' => ['vendor/name']]]; $data['package not in whitelist'] = [true, $package1, ['whitelist' => ['othervendor/othername']]]; $data['package in blacklist'] = [true, $package1, ['blacklist' => ['vendor/name']]]; $data['package not in blacklist'] = [false, $package1, ['blacklist' => ['othervendor/othername']]]; $data['package provides a virtual package in blacklist'] = [true, $package3, ['blacklist' => ['vendor/name']]]; return $data; }
public function test_it_receives_event() { $this->composer->getPluginManager()->addPlugin(new ChangelogsPlugin()); $initialPackage = new Package('foo/bar', '1.0.0.0', 'v1.0.0'); $initialPackage->setSourceUrl('https://github.com/foo/bar.git'); $targetPackage = new Package('foo/bar', '1.0.1.0', 'v1.0.1'); $targetPackage->setSourceUrl('https://github.com/foo/bar.git'); $operation = new UpdateOperation($initialPackage, $targetPackage); $this->composer->getEventDispatcher()->dispatchPackageEvent(PackageEvents::POST_PACKAGE_UPDATE, false, new DefaultPolicy(false, false), new Pool(), new CompositeRepository([]), new Request(new Pool()), [$operation], $operation); $this->composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_UPDATE_CMD); $expectedOutput = <<<OUTPUT Changelogs summary: - foo/bar updated from v1.0.0 to v1.0.1 See changes: https://github.com/foo/bar/compare/v1.0.0...v1.0.1 Release notes: https://github.com/foo/bar/releases/tag/v1.0.1 OUTPUT; $this->assertSame($expectedOutput, $this->io->getOutput()); }
private function resolvePackageDependencies($repository, $packages, $packageName) { $config = $packages[$packageName]; foreach ($config['deps'] as $dependencyName) { if ($dependencyName === 'vendor/php' || strpos($dependencyName, 'vendor/ext-') === 0 || strpos($dependencyName, 'vendor/lib-') === 0) { continue; } if (!isset($packages[$dependencyName])) { throw new \RuntimeException("Requiring non existant package '" . $dependencyName . "' in '" . $packageName . "'."); } $dependency = $packages[$dependencyName]; $package = new Package($dependency['path'], "@stable", "@stable"); $package->setType('fiddler'); if (isset($dependency['autoload']) && is_array($dependency['autoload'])) { $package->setAutoload($dependency['autoload']); } if (!$repository->hasPackage($package)) { $repository->addPackage($package); $this->resolvePackageDependencies($repository, $packages, $dependencyName); } } }
/** * @param string $version * @param string $vendorDir * @return Package */ public function createComposerPackage($version, $vendorDir) { $package = new Package($this->package, $version, $version); $package->setTargetDir($vendorDir); $package->setInstallationSource('dist'); $package->setDistType($this->getPlatform() == 'linux' ? 'tar' : 'zip'); $package->setDistUrl($this->getDownloadUrl($version)); return $package; }
/** * @param array $tag * @param Composer $composer * @param OutputInterface $output */ protected function doUpdateItself(array $tag, Composer $composer, OutputInterface $output) { $output->writeln('Discovered a new version of the application: <info>' . $tag['name'] . '</info>'); // create install package $package = new Package('anime-db/anime-db', $tag['version'], $tag['name']); $package->setDistType('zip'); $package->setDistUrl($tag['zipball_url']); $package->setInstallationSource('dist'); // download new version $target = sys_get_temp_dir() . '/anime-db'; $this->getContainer()->get('filesystem')->remove($target); $composer->download($package, $target); $new_package = $composer->getPackageFromConfigFile($target . '/composer.json'); $dispatcher = $this->getContainer()->get('event_dispatcher'); // notify about downloaded $dispatcher->dispatch(StoreEvents::DOWNLOADED, new Downloaded($target, $new_package, $composer->getRootPackage())); // rewriting the application files $this->rewriting($target); // notify about updated // event will be sent after the update application components $this->getContainer()->get('anime_db.event_dispatcher')->dispatch(StoreEvents::UPDATED, new Updated($new_package)); $composer->reload(); $output->writeln('<info>Update itself has been completed</info>'); }
public function testGetPackageCopy() { $this->initJob([], $this->atLeastOnce()); $this->package->expects($this->atLeastOnce())->method('getName')->will($this->returnValue('foo/bar')); $this->package->expects($this->atLeastOnce())->method('getVersion')->will($this->returnValue('1.0.0')); $this->package->expects($this->atLeastOnce())->method('getPrettyVersion')->will($this->returnValue('1')); $this->package->expects($this->atLeastOnce())->method('getType')->will($this->returnValue('lib')); $copy = $this->job->getPackageCopy(); // test $this->assertInstanceOf('\\Composer\\Package\\Package', $copy); $this->assertEquals($this->package->getName(), $copy->getName()); $this->assertEquals($this->package->getVersion(), $copy->getVersion()); $this->assertEquals($this->package->getPrettyVersion(), $copy->getPrettyVersion()); $this->assertEquals($this->package->getType(), $copy->getType()); $this->assertEquals($this->package->getExtra(), $copy->getExtra()); }
public static function createComposerInMemoryPackage($targetDir, $version) { $url = self::getURL($version); $versionParser = new VersionParser(); $normVersion = $versionParser->normalize($version); $package = new Package(self::PHANTOMJS_NAME, $normVersion, $version); $package->setTargetDir($targetDir); $package->setInstallationSource('dist'); $package->setDistType(pathinfo($url, PATHINFO_EXTENSION) === 'zip' ? 'zip' : 'tar'); // set zip, tarball $package->setDistUrl($url); return $package; }
public function build(Addon $addon) { $composer = $this->packagist->getComposer(); $downloader = $composer->getDownloadManager(); $packageVersions = $this->packagist->getPackageVersions($addon->Name); $time = time(); if (!$packageVersions) { throw new Exception('Could not find corresponding Packagist versions'); } // Get the latest local and packagist version pair. $version = $addon->Versions()->filter('Development', true)->first(); foreach ($packageVersions as $packageVersion) { if ($packageVersion->getVersionNormalized() != $version->Version) { continue; } $path = implode('/', array(TEMP_FOLDER, self::ADDONS_DIR, $addon->Name)); // Convert PackagistAPI result into class compatible with Composer logic $package = new Package($addon->Name, $packageVersion->getVersionNormalized(), $packageVersion->getVersion()); $package->setExtra($packageVersion->getExtra()); if ($source = $packageVersion->getSource()) { $package->setSourceUrl($source->getUrl()); $package->setSourceType($source->getType()); $package->setSourceReference($source->getReference()); } if ($dist = $packageVersion->getDist()) { $package->setDistUrl($dist->getUrl()); $package->setDistType($dist->getType()); $package->setDistReference($dist->getReference()); } $this->download($package, $path); $this->buildReadme($addon, $path); $this->buildScreenshots($addon, $package, $path); } $addon->LastBuilt = $time; $addon->write(); }
/** * Installation package * * @param Composer $composer */ public function install(Composer $composer) { $this->init(); /* Create Composer in-memory package */ $versionParser = new VersionParser(); $normVersion = $versionParser->normalize($this->version); $package = new Package($this->name, $normVersion, $this->version); $package->setInstallationSource('dist'); $package->setDistUrl($this->url); $package->setDistType($this->distType); $package->setTargetDir($this->targetDir); /* Download the Archive */ $downloadManager = $composer->getDownloadManager(); $downloadManager->download($package, $this->targetDir, false); /* Copy binary to the "bin" file */ $binDir = $composer->getConfig()->get('bin-dir'); $this->copyToBinFolder($binDir); }
/** * @param \Composer\Package\Package $package */ public function addDistToPackage(\Composer\Package\Package $package) { $this->initializeData(); $versionDigits = explode('.', $package->getPrettyVersion()); if (count($versionDigits) === 3) { $branchVersion = $versionDigits[0] . '.' . $versionDigits[1]; $patchlevelVersion = $versionDigits[0] . '.' . $versionDigits[1] . '.' . $versionDigits[2]; if (isset($this->data[$branchVersion]) && isset($this->data[$branchVersion]['releases'][$patchlevelVersion])) { $releaseData = $this->data[$branchVersion]['releases'][$patchlevelVersion]; if (isset($releaseData['checksums']['tar']['sha1']) && isset($releaseData['url']['tar'])) { $package->setDistType('tar'); $package->setDistReference($patchlevelVersion); $package->setDistUrl($releaseData['url']['tar']); $package->setDistSha1Checksum($releaseData['checksums']['tar']['sha1']); } } } }
/** * Operating system dependend installation of PhantomJS */ public static function installPhantomJS(Event $event) { $composer = $event->getComposer(); $version = self::getVersion($composer); $url = self::getURL($version); $binDir = $composer->getConfig()->get('bin-dir'); // the installation folder depends on the vendor-dir (default prefix is './vendor') $targetDir = $composer->getConfig()->get('vendor-dir') . self::PHANTOMJS_TARGETDIR; // Create Composer In-Memory Package $versionParser = new VersionParser(); $normVersion = $versionParser->normalize($version); $package = new Package(self::PHANTOMJS_NAME, $normVersion, $version); $package->setTargetDir($targetDir); $package->setInstallationSource('dist'); $package->setDistType(pathinfo($url, PATHINFO_EXTENSION) === 'zip' ? 'zip' : 'tar'); // set zip, tarball $package->setDistUrl($url); // Download the Archive $downloadManager = $composer->getDownloadManager(); $downloadManager->download($package, $targetDir, false); // Copy only the PhantomJS binary from the installation "target dir" to the "bin" folder self::copyPhantomJsBinaryToBinFolder($targetDir, $binDir); }