public update ( Composer\Repository\InstalledRepositoryInterface $repo, Composer\Package\PackageInterface $initial, Composer\Package\PackageInterface $target ) | ||
$repo | Composer\Repository\InstalledRepositoryInterface | |
$initial | Composer\Package\PackageInterface | |
$target | Composer\Package\PackageInterface |
/** * Behaviors : * * New (version replacement, Stable to Dev or Dev to Stable) : * - Stable : > vendor directory * - Dev : > shared dependencies directory * * Update (if package name & target directory are the same) : * - Stable : checkout new sources * - Dev : checkout new sources * * In case of replacement (see "New" part above) : * - The old package is completely deleted ("composer remove" process) before installing the new version * * * {@inheritdoc} */ public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) { // If both packages are stable version (tag) if (!$target->isDev() && !$initial->isDev()) { $this->defaultInstaller->update($repo, $initial, $target); } else { if (!$repo->hasPackage($initial)) { throw new \InvalidArgumentException('Package is not installed : ' . $initial->getPrettyName()); } $this->symlinkInstaller->update($repo, $initial, $target); } }
/** * @test * * @depends testInstallerCreationShouldNotCreateVendorDirectory * @depends testInstallerCreationShouldNotCreateBinDirectory */ public function updateDevelopmentToStable() { $initial = $this->createDevelopmentPackageMock(); $target = $this->createStablePackageMock(); $installer = new SharedPackageInstaller($this->io, $this->composer, $this->fs, $this->dataManager); $defaultInstaller = $this->getMockBuilder('Composer\\Installer\\LibraryInstaller')->disableOriginalConstructor()->getMock(); $defaultInstaller->expects($this->once())->method('install'); $im = new InstallationManager(); $im->addInstaller(new SharedPackageInstallerSolver($installer, $defaultInstaller)); $this->composer->setInstallationManager($im); $initial->expects($this->any())->method('getPrettyName')->will($this->returnValue('initial-package')); $initial->expects($this->once())->method('getType')->willReturn('shared-package'); $target->expects($this->once())->method('getType')->willReturn('shared-package'); $target->expects($this->any())->method('getPrettyName')->will($this->returnValue('package1')); $target->expects($this->any())->method('getTargetDir')->will($this->returnValue('newtarget')); $this->repository->expects($this->exactly(1))->method('hasPackage')->will($this->onConsecutiveCalls(true, true, false, false)); $installer->update($this->repository, $initial, $target); $this->assertFileExists($this->vendorDir, 'Vendor dir should be created'); $this->assertFileExists($this->binDir, 'Bin dir should be created'); $this->assertFileExists($this->dependenciesDir, 'Dependencies dir should be created'); $this->assertFileNotExists($this->symlinkDir, 'Symlink dir should be created'); $this->assertFalse(is_link($this->symlinkDir . '/letudiant/foo-bar')); }