1
0
Fork 0

Refactored LibraryInstaller to use WritableRepository instead of Registry

pull/19/head
everzet 2011-09-25 15:44:41 +03:00
parent 9f98ee25ea
commit 6133108710
2 changed files with 55 additions and 86 deletions

View File

@ -13,8 +13,7 @@
namespace Composer\Installer;
use Composer\Downloader\DownloadManager;
use Composer\Installer\Registry\RegistryInterface;
use Composer\Installer\Registry\FilesystemRegistry;
use Composer\Repository\WritableRepositoryInterface;
use Composer\DependencyResolver\Operation\OperationInterface;
use Composer\Package\PackageInterface;
@ -28,16 +27,16 @@ class LibraryInstaller implements InstallerInterface
{
private $dir;
private $dm;
private $registry;
private $repository;
/**
* Initializes library installer.
*
* @param string $dir relative path for packages home
* @param DownloadManager $dm download manager
* @param RegistryInterface $registry registry controller
* @param WritableRepositoryInterface $repository repository controller
*/
public function __construct($dir, DownloadManager $dm, RegistryInterface $registry = null)
public function __construct($dir, DownloadManager $dm, WritableRepositoryInterface $repository)
{
$this->dir = $dir;
$this->dm = $dm;
@ -55,20 +54,7 @@ class LibraryInstaller implements InstallerInterface
}
}
if (null === $registry) {
$registry = new FilesystemRegistry('.composer', str_replace('/', '_', $dir));
}
$this->registry = $registry;
$this->registry->open();
}
/**
* Closes packages registry.
*/
public function __destruct()
{
$this->registry->close();
$this->repository = $repository;
}
/**
@ -96,7 +82,7 @@ class LibraryInstaller implements InstallerInterface
*/
public function isInstalled(PackageInterface $package)
{
return $this->registry->isPackageRegistered($package);
return $this->repository->hasPackage($package);
}
/**
@ -108,8 +94,10 @@ class LibraryInstaller implements InstallerInterface
*/
public function install(PackageInterface $package)
{
$type = $this->dm->download($package, $this->dir.'/'.$package->getName());
$this->registry->registerPackage($package, $type);
$downloadPath = $this->dir.DIRECTORY_SEPARATOR.$package->getName();
$this->dm->download($package, $downloadPath);
$this->repository->addPackage($package);
}
/**
@ -122,14 +110,15 @@ class LibraryInstaller implements InstallerInterface
*/
public function update(PackageInterface $initial, PackageInterface $target)
{
if (!$this->registry->isPackageRegistered($initial)) {
throw new \UnexpectedValueException('Package is not installed: '.$initial);
if (!$this->repository->hasPackage($initial)) {
throw new \InvalidArgumentException('Package is not installed: '.$initial);
}
$type = $this->registry->getRegisteredPackageInstallerType($initial);
$this->dm->update($initial, $target, $this->dir.'/'.$initial->getName(), $type);
$this->registry->unregisterPackage($initial);
$this->registry->registerPackage($target, $type);
$downloadPath = $this->dir.DIRECTORY_SEPARATOR.$initial->getName();
$this->dm->update($initial, $target, $downloadPath);
$this->repository->removePackage($initial);
$this->repository->addPackage($target);
}
/**
@ -141,12 +130,13 @@ class LibraryInstaller implements InstallerInterface
*/
public function uninstall(PackageInterface $package)
{
if (!$this->registry->isPackageRegistered($package)) {
throw new \UnexpectedValueException('Package is not installed: '.$package);
if (!$this->repository->hasPackage($package)) {
throw new \InvalidArgumentException('Package is not installed: '.$package);
}
$type = $this->registry->getRegisteredPackageInstallerType($package);
$this->dm->remove($package, $this->dir.'/'.$package->getName(), $type);
$this->registry->unregisterPackage($package);
$downloadPath = $this->dir.DIRECTORY_SEPARATOR.$package->getName();
$this->dm->remove($package, $downloadPath);
$this->repository->removePackage($package);
}
}

View File

@ -19,7 +19,7 @@ class LibraryInstallerTest extends \PHPUnit_Framework_TestCase
{
private $dir;
private $dm;
private $registry;
private $repository;
private $library;
protected function setUp()
@ -33,35 +33,27 @@ class LibraryInstallerTest extends \PHPUnit_Framework_TestCase
->disableOriginalConstructor()
->getMock();
$this->registry = $this->getMockBuilder('Composer\Installer\Registry\RegistryInterface')
$this->repository = $this->getMockBuilder('Composer\Repository\WritableRepositoryInterface')
->disableOriginalConstructor()
->getMock();
}
public function testInstallerCreation()
{
$this->registry
->expects($this->once())
->method('open');
$this->registry
->expects($this->once())
->method('close');
$library = new LibraryInstaller($this->dir, $this->dm, $this->registry);
$library = new LibraryInstaller($this->dir, $this->dm, $this->repository);
$this->assertTrue(is_dir($this->dir));
$file = sys_get_temp_dir().'/file';
touch($file);
$this->setExpectedException('UnexpectedValueException');
$library = new LibraryInstaller($file, $this->dm, $this->registry);
$library = new LibraryInstaller($file, $this->dm, $this->repository);
}
public function testExecuteOperation()
{
$library = $this->getMockBuilder('Composer\Installer\LibraryInstaller')
->setConstructorArgs(array($this->dir, $this->dm, $this->registry))
->setConstructorArgs(array($this->dir, $this->dm, $this->repository))
->setMethods(array('install', 'update', 'uninstall'))
->getMock();
@ -92,12 +84,12 @@ class LibraryInstallerTest extends \PHPUnit_Framework_TestCase
public function testIsInstalled()
{
$library = new LibraryInstaller($this->dir, $this->dm, $this->registry);
$library = new LibraryInstaller($this->dir, $this->dm, $this->repository);
$package = $this->createPackageMock();
$this->registry
$this->repository
->expects($this->exactly(2))
->method('isPackageRegistered')
->method('hasPackage')
->with($package)
->will($this->onConsecutiveCalls(true, false));
@ -107,7 +99,7 @@ class LibraryInstallerTest extends \PHPUnit_Framework_TestCase
public function testInstall()
{
$library = new LibraryInstaller($this->dir, $this->dm, $this->registry);
$library = new LibraryInstaller($this->dir, $this->dm, $this->repository);
$package = $this->createPackageMock();
$package
@ -118,20 +110,19 @@ class LibraryInstallerTest extends \PHPUnit_Framework_TestCase
$this->dm
->expects($this->once())
->method('download')
->with($package, $this->dir.'/some/package')
->will($this->returnValue('source'));
->with($package, $this->dir.'/some/package');
$this->registry
$this->repository
->expects($this->once())
->method('registerPackage')
->with($package, 'source');
->method('addPackage')
->with($package);
$library->install($package);
}
public function testUpdate()
{
$library = new LibraryInstaller($this->dir, $this->dm, $this->registry);
$library = new LibraryInstaller($this->dir, $this->dm, $this->repository);
$initial = $this->createPackageMock();
$target = $this->createPackageMock();
@ -140,43 +131,37 @@ class LibraryInstallerTest extends \PHPUnit_Framework_TestCase
->method('getName')
->will($this->returnValue('package1'));
$this->registry
$this->repository
->expects($this->exactly(2))
->method('isPackageRegistered')
->method('hasPackage')
->with($initial)
->will($this->onConsecutiveCalls(true, false));
$this->registry
->expects($this->once())
->method('getRegisteredPackageInstallerType')
->with($initial)
->will($this->returnValue('dist'));
$this->dm
->expects($this->once())
->method('update')
->with($initial, $target, $this->dir.'/package1', 'dist');
->with($initial, $target, $this->dir.'/package1');
$this->registry
$this->repository
->expects($this->once())
->method('unregisterPackage')
->method('removePackage')
->with($initial);
$this->registry
$this->repository
->expects($this->once())
->method('registerPackage')
->with($target, 'dist');
->method('addPackage')
->with($target);
$library->update($initial, $target);
$this->setExpectedException('UnexpectedValueException');
$this->setExpectedException('InvalidArgumentException');
$library->update($initial, $target);
}
public function testUninstall()
{
$library = new LibraryInstaller($this->dir, $this->dm, $this->registry);
$library = new LibraryInstaller($this->dir, $this->dm, $this->repository);
$package = $this->createPackageMock();
$package
@ -184,31 +169,25 @@ class LibraryInstallerTest extends \PHPUnit_Framework_TestCase
->method('getName')
->will($this->returnValue('pkg'));
$this->registry
$this->repository
->expects($this->exactly(2))
->method('isPackageRegistered')
->method('hasPackage')
->with($package)
->will($this->onConsecutiveCalls(true, false));
$this->registry
->expects($this->once())
->method('getRegisteredPackageInstallerType')
->with($package)
->will($this->returnValue('source'));
$this->dm
->expects($this->once())
->method('remove')
->with($package, $this->dir.'/pkg', 'source');
->with($package, $this->dir.'/pkg');
$this->registry
$this->repository
->expects($this->once())
->method('unregisterPackage')
->method('removePackage')
->with($package);
$library->uninstall($package);
$this->setExpectedException('UnexpectedValueException');
$this->setExpectedException('InvalidArgumentException');
$library->uninstall($package);
}