diff --git a/src/Composer/Installer/NoopInstaller.php b/src/Composer/Installer/NoopInstaller.php new file mode 100644 index 000000000..b37329c6f --- /dev/null +++ b/src/Composer/Installer/NoopInstaller.php @@ -0,0 +1,92 @@ + + * Jordi Boggiano + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +namespace Composer\Installer; + +use Composer\IO\IOInterface; +use Composer\Downloader\DownloadManager; +use Composer\Repository\InstalledRepositoryInterface; +use Composer\Package\PackageInterface; +use Composer\Util\Filesystem; + +/** + * Does not install anything but marks packages installed in the repo + * + * Useful for dry runs + * + * @author Jordi Boggiano + */ +class NoopInstaller implements InstallerInterface +{ + /** + * {@inheritDoc} + */ + public function supports($packageType) + { + return true; + } + + /** + * {@inheritDoc} + */ + public function isInstalled(InstalledRepositoryInterface $repo, PackageInterface $package) + { + return $repo->hasPackage($package); + } + + /** + * {@inheritDoc} + */ + public function install(InstalledRepositoryInterface $repo, PackageInterface $package) + { + if (!$repo->hasPackage($package)) { + $repo->addPackage(clone $package); + } + } + + /** + * {@inheritDoc} + */ + public function update(InstalledRepositoryInterface $repo, PackageInterface $initial, PackageInterface $target) + { + if (!$repo->hasPackage($initial)) { + throw new \InvalidArgumentException('Package is not installed: '.$initial); + } + + if (!$repo->hasPackage($target)) { + $repo->addPackage(clone $target); + } + } + + /** + * {@inheritDoc} + */ + public function uninstall(InstalledRepositoryInterface $repo, PackageInterface $package) + { + if (!$repo->hasPackage($package)) { + // TODO throw exception again here, when update is fixed and we don't have to remove+install (see #125) + return; + throw new \InvalidArgumentException('Package is not installed: '.$package); + } + $repo->removePackage($package); + } + + /** + * {@inheritDoc} + */ + public function getInstallPath(PackageInterface $package) + { + $targetDir = $package->getTargetDir(); + + return $package->getPrettyName() . ($targetDir ? '/'.$targetDir : ''); + } +}