From 123f5fef777e8d571a4c6263032c8f6c890dd356 Mon Sep 17 00:00:00 2001 From: everzet Date: Sun, 25 Sep 2011 14:40:12 +0300 Subject: [PATCH] Refactored Operations in order to fulfill naderman requests --- .../Operation/InstallOperation.php | 35 +++++++++++++++++++ .../Operation/OperationInterface.php | 11 ++---- .../Operation/SolverOperation.php | 29 ++------------- .../Operation/UninstallOperation.php | 35 +++++++++++++++++++ .../Operation/UpdateOperation.php | 35 +++++++++++++++---- src/Composer/Installer/LibraryInstaller.php | 2 +- .../Test/DependencyResolver/SolverTest.php | 13 +++++-- 7 files changed, 115 insertions(+), 45 deletions(-) diff --git a/src/Composer/DependencyResolver/Operation/InstallOperation.php b/src/Composer/DependencyResolver/Operation/InstallOperation.php index b8383b121..69f042159 100644 --- a/src/Composer/DependencyResolver/Operation/InstallOperation.php +++ b/src/Composer/DependencyResolver/Operation/InstallOperation.php @@ -21,6 +21,41 @@ use Composer\Package\PackageInterface; */ class InstallOperation extends SolverOperation { + protected $package; + + /** + * Initializes operation. + * + * @param PackageInterface $package package instance + * @param string $reason operation reason + */ + public function __construct(PackageInterface $package, $reason = null) + { + parent::__construct($reason); + + $this->package = $package; + } + + /** + * Returns package instance. + * + * @return PackageInterface + */ + public function getPackage() + { + return $this->package; + } + + /** + * Returns installer type to be used with this operation. + * + * @return string + */ + public function getInstallerType() + { + return $this->package->getType(); + } + /** * Returns job type. * diff --git a/src/Composer/DependencyResolver/Operation/OperationInterface.php b/src/Composer/DependencyResolver/Operation/OperationInterface.php index fcfc6c201..7cb943440 100644 --- a/src/Composer/DependencyResolver/Operation/OperationInterface.php +++ b/src/Composer/DependencyResolver/Operation/OperationInterface.php @@ -29,18 +29,11 @@ interface OperationInterface function getJobType(); /** - * Returns package instance. - * - * @return PackageInterface - */ - function getPackage(); - - /** - * Returns package type. + * Returns installer type to be used with this operation. * * @return string */ - function getPackageType(); + function getInstallerType(); /** * Returns operation reason. diff --git a/src/Composer/DependencyResolver/Operation/SolverOperation.php b/src/Composer/DependencyResolver/Operation/SolverOperation.php index 0cca6a6da..a0071641e 100644 --- a/src/Composer/DependencyResolver/Operation/SolverOperation.php +++ b/src/Composer/DependencyResolver/Operation/SolverOperation.php @@ -21,39 +21,16 @@ use Composer\Package\PackageInterface; */ abstract class SolverOperation implements OperationInterface { - protected $package; protected $reason; /** * Initializes operation. * - * @param PackageInterface $package package instance - * @param string $reason operation reason + * @param string $reason operation reason */ - public function __construct(PackageInterface $package, $reason = null) + public function __construct($reason = null) { - $this->package = $package; - $this->reason = $reason; - } - - /** - * Returns package instance. - * - * @return PackageInterface - */ - public function getPackage() - { - return $this->package; - } - - /** - * Returns package type. - * - * @return string - */ - public function getPackageType() - { - return $this->package->getType(); + $this->reason = $reason; } /** diff --git a/src/Composer/DependencyResolver/Operation/UninstallOperation.php b/src/Composer/DependencyResolver/Operation/UninstallOperation.php index f6c853079..71bfc088f 100644 --- a/src/Composer/DependencyResolver/Operation/UninstallOperation.php +++ b/src/Composer/DependencyResolver/Operation/UninstallOperation.php @@ -21,6 +21,41 @@ use Composer\Package\PackageInterface; */ class UninstallOperation extends SolverOperation { + protected $package; + + /** + * Initializes operation. + * + * @param PackageInterface $package package instance + * @param string $reason operation reason + */ + public function __construct(PackageInterface $package, $reason = null) + { + parent::__construct($reason); + + $this->package = $package; + } + + /** + * Returns package instance. + * + * @return PackageInterface + */ + public function getPackage() + { + return $this->package; + } + + /** + * Returns installer type to be used with this operation. + * + * @return string + */ + public function getInstallerType() + { + return $this->package->getType(); + } + /** * Returns job type. * diff --git a/src/Composer/DependencyResolver/Operation/UpdateOperation.php b/src/Composer/DependencyResolver/Operation/UpdateOperation.php index 1ea400d07..5caadd881 100644 --- a/src/Composer/DependencyResolver/Operation/UpdateOperation.php +++ b/src/Composer/DependencyResolver/Operation/UpdateOperation.php @@ -21,6 +21,7 @@ use Composer\Package\PackageInterface; */ class UpdateOperation extends SolverOperation { + protected $initialPackage; protected $targetPackage; /** @@ -32,19 +33,20 @@ class UpdateOperation extends SolverOperation */ public function __construct(PackageInterface $initial, PackageInterface $target, $reason = null) { - parent::__construct($initial, $reason); + parent::__construct($reason); - $this->targetPackage = $target; + $this->initialPackage = $initial; + $this->targetPackage = $target; } /** - * Returns job type. + * Returns initial package. * - * @return string + * @return PackageInterface */ - public function getJobType() + public function getInitialPackage() { - return 'update'; + return $this->initialPackage; } /** @@ -56,4 +58,25 @@ class UpdateOperation extends SolverOperation { return $this->targetPackage; } + + /** + * Returns installer type to be used with this operation. + * + * @return string + */ + public function getInstallerType() + { + return $this->targetPackage->getType(); + } + + + /** + * Returns job type. + * + * @return string + */ + public function getJobType() + { + return 'update'; + } } diff --git a/src/Composer/Installer/LibraryInstaller.php b/src/Composer/Installer/LibraryInstaller.php index f8b1313e9..ebe767259 100644 --- a/src/Composer/Installer/LibraryInstaller.php +++ b/src/Composer/Installer/LibraryInstaller.php @@ -81,7 +81,7 @@ class LibraryInstaller implements InstallerInterface $method = $operation->getJobType(); if ('update' === $method) { - $this->$method($operation->getPackage(), $operation->getTargetPackage()); + $this->$method($operation->getInitialPackage(), $operation->getTargetPackage()); } else { $this->$method($operation->getPackage()); } diff --git a/tests/Composer/Test/DependencyResolver/SolverTest.php b/tests/Composer/Test/DependencyResolver/SolverTest.php index 8fc8fc630..dd5d267a3 100644 --- a/tests/Composer/Test/DependencyResolver/SolverTest.php +++ b/tests/Composer/Test/DependencyResolver/SolverTest.php @@ -226,10 +226,17 @@ class SolverTest extends \PHPUnit_Framework_TestCase $result = array(); foreach ($transaction as $operation) { if ('update' === $operation->getJobType()) { - $result[] = array('job' => 'update', 'from' => $operation->getPackage(), 'to' => $operation->getTargetPackage()); + $result[] = array( + 'job' => 'update', + 'from' => $operation->getInitialPackage(), + 'to' => $operation->getTargetPackage() + ); } else { - $job = 'uninstall' === $operation->getJobType() ? 'remove' : 'install'; - $result[] = array('job' => $job, 'package' => $operation->getPackage()); + $job = ('uninstall' === $operation->getJobType() ? 'remove' : 'install'); + $result[] = array( + 'job' => $job, + 'package' => $operation->getPackage() + ); } }