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;
 }
Beispiel #4
0
 /**
  * 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;
 }
Beispiel #15
0
 /**
  * @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;
 }
Beispiel #16
0
 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;
 }
Beispiel #19
0
 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());
    }
Beispiel #22
0
 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;
 }
Beispiel #24
0
 /**
  * @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>');
 }
Beispiel #25
0
 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());
 }
Beispiel #26
0
 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();
 }
Beispiel #28
0
 /**
  * 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);
 }