From 868e607f17e1e904deaa1aef464c12651a40e348 Mon Sep 17 00:00:00 2001 From: Niels Keurentjes Date: Sat, 27 Feb 2016 22:39:03 +0100 Subject: [PATCH 1/5] Missing parent constructor calls. --- src/Composer/Repository/ArtifactRepository.php | 1 + src/Composer/Repository/ComposerRepository.php | 1 + src/Composer/Repository/FilesystemRepository.php | 1 + src/Composer/Repository/PackageRepository.php | 1 + src/Composer/Repository/PearRepository.php | 1 + src/Composer/Repository/VcsRepository.php | 1 + 6 files changed, 6 insertions(+) diff --git a/src/Composer/Repository/ArtifactRepository.php b/src/Composer/Repository/ArtifactRepository.php index e0f01dc33..a4f5421de 100644 --- a/src/Composer/Repository/ArtifactRepository.php +++ b/src/Composer/Repository/ArtifactRepository.php @@ -30,6 +30,7 @@ class ArtifactRepository extends ArrayRepository implements ConfigurableReposito public function __construct(array $repoConfig, IOInterface $io) { + parent::__construct(); if (!extension_loaded('zip')) { throw new \RuntimeException('The artifact repository requires PHP\'s zip extension'); } diff --git a/src/Composer/Repository/ComposerRepository.php b/src/Composer/Repository/ComposerRepository.php index 5bd4e8a24..ebc273eb6 100644 --- a/src/Composer/Repository/ComposerRepository.php +++ b/src/Composer/Repository/ComposerRepository.php @@ -62,6 +62,7 @@ class ComposerRepository extends ArrayRepository implements ConfigurableReposito public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $eventDispatcher = null, RemoteFilesystem $rfs = null) { + parent::__construct(); if (!preg_match('{^[\w.]+\??://}', $repoConfig['url'])) { // assume http as the default protocol $repoConfig['url'] = 'http://'.$repoConfig['url']; diff --git a/src/Composer/Repository/FilesystemRepository.php b/src/Composer/Repository/FilesystemRepository.php index 0ffac9f1d..112e3da4b 100644 --- a/src/Composer/Repository/FilesystemRepository.php +++ b/src/Composer/Repository/FilesystemRepository.php @@ -33,6 +33,7 @@ class FilesystemRepository extends WritableArrayRepository */ public function __construct(JsonFile $repositoryFile) { + parent::__construct(); $this->file = $repositoryFile; } diff --git a/src/Composer/Repository/PackageRepository.php b/src/Composer/Repository/PackageRepository.php index ca3334204..fd33e34e4 100644 --- a/src/Composer/Repository/PackageRepository.php +++ b/src/Composer/Repository/PackageRepository.php @@ -31,6 +31,7 @@ class PackageRepository extends ArrayRepository */ public function __construct(array $config) { + parent::__construct(); $this->config = $config['package']; // make sure we have an array of package definitions diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 33ce48094..c4f0b83e7 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -49,6 +49,7 @@ class PearRepository extends ArrayRepository implements ConfigurableRepositoryIn public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $dispatcher = null, RemoteFilesystem $rfs = null) { + parent::__construct(); if (!preg_match('{^https?://}', $repoConfig['url'])) { $repoConfig['url'] = 'http://'.$repoConfig['url']; } diff --git a/src/Composer/Repository/VcsRepository.php b/src/Composer/Repository/VcsRepository.php index 376dd1f38..196a47acb 100644 --- a/src/Composer/Repository/VcsRepository.php +++ b/src/Composer/Repository/VcsRepository.php @@ -41,6 +41,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $dispatcher = null, array $drivers = null) { + parent::__construct(); $this->drivers = $drivers ?: array( 'github' => 'Composer\Repository\Vcs\GitHubDriver', 'gitlab' => 'Composer\Repository\Vcs\GitLabDriver', From 98845dca6f2dc03bb2390a758813046b5f02c2e7 Mon Sep 17 00:00:00 2001 From: Niels Keurentjes Date: Sat, 27 Feb 2016 22:45:44 +0100 Subject: [PATCH 2/5] PHP 5.3 does not support $this in closures. Nested reuse of identical variables separated. --- src/Composer/Config/JsonConfigSource.php | 10 ++++++---- src/Composer/Package/Loader/RootPackageLoader.php | 8 ++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/Composer/Config/JsonConfigSource.php b/src/Composer/Config/JsonConfigSource.php index 8e5a6036e..1eeaee6f4 100644 --- a/src/Composer/Config/JsonConfigSource.php +++ b/src/Composer/Config/JsonConfigSource.php @@ -79,10 +79,11 @@ class JsonConfigSource implements ConfigSourceInterface */ public function addConfigSetting($name, $value) { - $this->manipulateJson('addConfigSetting', $name, $value, function (&$config, $key, $val) { + $that = $this; + $this->manipulateJson('addConfigSetting', $name, $value, function (&$config, $key, $val) use ($that) { if (preg_match('{^(github-oauth|gitlab-oauth|http-basic|platform)\.}', $key)) { list($key, $host) = explode('.', $key, 2); - if ($this->authConfig) { + if ($that->authConfig) { $config[$key][$host] = $val; } else { $config['config'][$key][$host] = $val; @@ -98,10 +99,11 @@ class JsonConfigSource implements ConfigSourceInterface */ public function removeConfigSetting($name) { - $this->manipulateJson('removeConfigSetting', $name, function (&$config, $key) { + $that = $this; + $this->manipulateJson('removeConfigSetting', $name, function (&$config, $key) use ($that) { if (preg_match('{^(github-oauth|gitlab-oauth|http-basic|platform)\.}', $key)) { list($key, $host) = explode('.', $key, 2); - if ($this->authConfig) { + if ($that->authConfig) { unset($config[$key][$host]); } else { unset($config['config'][$key][$host]); diff --git a/src/Composer/Package/Loader/RootPackageLoader.php b/src/Composer/Package/Loader/RootPackageLoader.php index 959d3c17f..18a551748 100644 --- a/src/Composer/Package/Loader/RootPackageLoader.php +++ b/src/Composer/Package/Loader/RootPackageLoader.php @@ -175,10 +175,10 @@ class RootPackageLoader extends ArrayLoader // extract all sub-constraints in case it is an OR/AND multi-constraint $orSplit = preg_split('{\s*\|\|?\s*}', trim($reqVersion)); - foreach ($orSplit as $constraint) { - $andSplit = preg_split('{(?< ,]) *(?< ,]) *(? Date: Sat, 27 Feb 2016 23:21:11 +0100 Subject: [PATCH 3/5] Removed unused variables and includes, fixed functions being called with more arguments than declared. --- src/Composer/Autoload/ClassMapGenerator.php | 1 - src/Composer/Command/ShowCommand.php | 3 +-- src/Composer/Command/StatusCommand.php | 1 - src/Composer/DependencyResolver/PolicyInterface.php | 2 +- src/Composer/DependencyResolver/Solver.php | 3 --- src/Composer/Package/Version/VersionSelector.php | 1 - src/Composer/Repository/Pear/BaseChannelReader.php | 1 - 7 files changed, 2 insertions(+), 10 deletions(-) diff --git a/src/Composer/Autoload/ClassMapGenerator.php b/src/Composer/Autoload/ClassMapGenerator.php index 59542a4a7..b0b1616c3 100644 --- a/src/Composer/Autoload/ClassMapGenerator.php +++ b/src/Composer/Autoload/ClassMapGenerator.php @@ -18,7 +18,6 @@ namespace Composer\Autoload; -use Composer\Util\Silencer; use Symfony\Component\Finder\Finder; use Composer\IO\IOInterface; diff --git a/src/Composer/Command/ShowCommand.php b/src/Composer/Command/ShowCommand.php index a4eb9a362..76cfd7954 100644 --- a/src/Composer/Command/ShowCommand.php +++ b/src/Composer/Command/ShowCommand.php @@ -125,7 +125,6 @@ EOT // show single package or single version if ($input->getArgument('package') || !empty($package)) { - $versions = array(); if (empty($package)) { list($package, $versions) = $this->getPackage($installedRepo, $repos, $input->getArgument('package'), $input->getArgument('version')); @@ -139,7 +138,7 @@ EOT if ($input->getOption('tree')) { $this->displayPackageTree($package, $installedRepo, $repos); } else { - $this->printMeta($package, $versions, $installedRepo, $repos); + $this->printMeta($package, $versions, $installedRepo); $this->printLinks($package, 'requires'); $this->printLinks($package, 'devRequires', 'requires (dev)'); if ($package->getSuggests()) { diff --git a/src/Composer/Command/StatusCommand.php b/src/Composer/Command/StatusCommand.php index b16b3f394..f86077458 100644 --- a/src/Composer/Command/StatusCommand.php +++ b/src/Composer/Command/StatusCommand.php @@ -19,7 +19,6 @@ use Composer\Downloader\ChangeReportInterface; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Script\ScriptEvents; -use Composer\Downloader\VcsDownloader; use Composer\Downloader\DvcsDownloaderInterface; /** diff --git a/src/Composer/DependencyResolver/PolicyInterface.php b/src/Composer/DependencyResolver/PolicyInterface.php index b68cfffb8..3464bd594 100644 --- a/src/Composer/DependencyResolver/PolicyInterface.php +++ b/src/Composer/DependencyResolver/PolicyInterface.php @@ -23,5 +23,5 @@ interface PolicyInterface public function findUpdatePackages(Pool $pool, array $installedMap, PackageInterface $package); - public function selectPreferredPackages(Pool $pool, array $installedMap, array $literals); + public function selectPreferredPackages(Pool $pool, array $installedMap, array $literals, $requiredPackage = null); } diff --git a/src/Composer/DependencyResolver/Solver.php b/src/Composer/DependencyResolver/Solver.php index 5f7f7e54c..fbd1b9f19 100644 --- a/src/Composer/DependencyResolver/Solver.php +++ b/src/Composer/DependencyResolver/Solver.php @@ -789,7 +789,6 @@ class Solver continue; } - $oLevel = $level; $level = $this->selectAndInstall($level, $decisionQueue, $disableRules, $rule); if (0 === $level) { @@ -810,7 +809,6 @@ class Solver $lastLevel = null; $lastBranchIndex = 0; $lastBranchOffset = 0; - $l = 0; for ($i = count($this->branches) - 1; $i >= 0; $i--) { list($literals, $l) = $this->branches[$i]; @@ -833,7 +831,6 @@ class Solver $why = $this->decisions->lastReason(); - $oLevel = $level; $level = $this->setPropagateLearn($level, $lastLiteral, $disableRules, $why); if ($level == 0) { diff --git a/src/Composer/Package/Version/VersionSelector.php b/src/Composer/Package/Version/VersionSelector.php index 8d4a57bf1..817d5ed48 100644 --- a/src/Composer/Package/Version/VersionSelector.php +++ b/src/Composer/Package/Version/VersionSelector.php @@ -17,7 +17,6 @@ use Composer\Package\BasePackage; use Composer\Package\PackageInterface; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Dumper\ArrayDumper; -use Composer\Semver\Semver; use Composer\Semver\Constraint\Constraint; /** diff --git a/src/Composer/Repository/Pear/BaseChannelReader.php b/src/Composer/Repository/Pear/BaseChannelReader.php index e3ab71af7..a9b87c228 100644 --- a/src/Composer/Repository/Pear/BaseChannelReader.php +++ b/src/Composer/Repository/Pear/BaseChannelReader.php @@ -74,7 +74,6 @@ abstract class BaseChannelReader $xml = simplexml_load_string($this->requestContent($origin, $path), "SimpleXMLElement", LIBXML_NOERROR); if (false == $xml) { - $url = rtrim($origin, '/') . '/' . ltrim($path, '/'); throw new \UnexpectedValueException(sprintf('The PEAR channel at ' . $origin . ' is broken. (Invalid XML at file `%s`)', $path)); } From f794ee787014f82a64e94ed313d1982d955b6bb3 Mon Sep 17 00:00:00 2001 From: Niels Keurentjes Date: Sat, 27 Feb 2016 23:39:57 +0100 Subject: [PATCH 4/5] Fixes for implicit variable declarations, return type mismatches and invalid method declarations. --- src/Composer/Downloader/FileDownloader.php | 1 + src/Composer/Downloader/PerforceDownloader.php | 5 +++-- src/Composer/Package/AliasPackage.php | 3 ++- src/Composer/Repository/VcsRepository.php | 4 ++++ src/Composer/Util/Perforce.php | 18 ++++++++++++++---- src/Composer/Util/RemoteFilesystem.php | 1 + src/Composer/Util/TlsHelper.php | 2 +- 7 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/Composer/Downloader/FileDownloader.php b/src/Composer/Downloader/FileDownloader.php index 1a30fd71e..4d35b31a3 100644 --- a/src/Composer/Downloader/FileDownloader.php +++ b/src/Composer/Downloader/FileDownloader.php @@ -40,6 +40,7 @@ class FileDownloader implements DownloaderInterface protected $cache; protected $outputProgress = true; private $lastCacheWrites = array(); + private $eventDispatcher; /** * Constructor. diff --git a/src/Composer/Downloader/PerforceDownloader.php b/src/Composer/Downloader/PerforceDownloader.php index 0acc60f84..6b01bf516 100644 --- a/src/Composer/Downloader/PerforceDownloader.php +++ b/src/Composer/Downloader/PerforceDownloader.php @@ -21,6 +21,7 @@ use Composer\Util\Perforce; */ class PerforceDownloader extends VcsDownloader { + /** @var Perforce */ protected $perforce; /** @@ -34,7 +35,7 @@ class PerforceDownloader extends VcsDownloader $this->io->writeError(' Cloning ' . $ref); $this->initPerforce($package, $path, $url); $this->perforce->setStream($ref); - $this->perforce->p4Login($this->io); + $this->perforce->p4Login(); $this->perforce->writeP4ClientSpec(); $this->perforce->connectClient(); $this->perforce->syncCodeBase($label); @@ -51,7 +52,7 @@ class PerforceDownloader extends VcsDownloader return null; } - public function initPerforce($package, $path, $url) + public function initPerforce(PackageInterface $package, $path, $url) { if (!empty($this->perforce)) { $this->perforce->initializePath($path); diff --git a/src/Composer/Package/AliasPackage.php b/src/Composer/Package/AliasPackage.php index 631b319b9..09ed4fb9b 100644 --- a/src/Composer/Package/AliasPackage.php +++ b/src/Composer/Package/AliasPackage.php @@ -23,10 +23,11 @@ class AliasPackage extends BasePackage implements CompletePackageInterface protected $version; protected $prettyVersion; protected $dev; - protected $aliasOf; protected $rootPackageAlias = false; protected $stability; + /** @var PackageInterface */ + protected $aliasOf; /** @var Link[] */ protected $requires; /** @var Link[] */ diff --git a/src/Composer/Repository/VcsRepository.php b/src/Composer/Repository/VcsRepository.php index 196a47acb..765e73f4f 100644 --- a/src/Composer/Repository/VcsRepository.php +++ b/src/Composer/Repository/VcsRepository.php @@ -38,6 +38,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt protected $loader; protected $repoConfig; protected $branchErrorOccurred = false; + private $drivers; public function __construct(array $repoConfig, IOInterface $io, Config $config, EventDispatcher $dispatcher = null, array $drivers = null) { @@ -77,6 +78,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt if (isset($this->drivers[$this->type])) { $class = $this->drivers[$this->type]; $driver = new $class($this->repoConfig, $this->io, $this->config); + /** @var VcsDriverInterface $driver */ $driver->initialize(); return $driver; @@ -85,6 +87,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt foreach ($this->drivers as $driver) { if ($driver::supports($this->io, $this->config, $this->url)) { $driver = new $driver($this->repoConfig, $this->io, $this->config); + /** @var VcsDriverInterface $driver */ $driver->initialize(); return $driver; @@ -94,6 +97,7 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt foreach ($this->drivers as $driver) { if ($driver::supports($this->io, $this->config, $this->url, true)) { $driver = new $driver($this->repoConfig, $this->io, $this->config); + /** @var VcsDriverInterface $driver */ $driver->initialize(); return $driver; diff --git a/src/Composer/Util/Perforce.php b/src/Composer/Util/Perforce.php index b57a64a1f..8a341ee5c 100644 --- a/src/Composer/Util/Perforce.php +++ b/src/Composer/Util/Perforce.php @@ -244,6 +244,7 @@ class Perforce return $value; } } + return null; } else { $command = 'echo $' . $name; $this->executeCommand($command); @@ -516,18 +517,22 @@ class Perforce return false; } + /** + * @param $reference + * @return mixed|null + */ protected function getChangeList($reference) { $index = strpos($reference, '@'); if ($index === false) { - return; + return null; } $label = substr($reference, $index); $command = $this->generateP4Command(' changes -m1 ' . $label); $this->executeCommand($command); $changes = $this->commandResult; if (strpos($changes, 'Change') !== 0) { - return; + return null; } $fields = explode(' ', $changes); $changeList = $fields[1]; @@ -535,15 +540,20 @@ class Perforce return $changeList; } + /** + * @param $fromReference + * @param $toReference + * @return mixed|null + */ public function getCommitLogs($fromReference, $toReference) { $fromChangeList = $this->getChangeList($fromReference); if ($fromChangeList == null) { - return; + return null; } $toChangeList = $this->getChangeList($toReference); if ($toChangeList == null) { - return; + return null; } $index = strpos($fromReference, '@'); $main = substr($fromReference, 0, $index) . '/...'; diff --git a/src/Composer/Util/RemoteFilesystem.php b/src/Composer/Util/RemoteFilesystem.php index e5ea5c2b4..048cc7b6e 100644 --- a/src/Composer/Util/RemoteFilesystem.php +++ b/src/Composer/Util/RemoteFilesystem.php @@ -25,6 +25,7 @@ class RemoteFilesystem { private $io; private $config; + private $scheme; private $bytesMax; private $originUrl; private $fileUrl; diff --git a/src/Composer/Util/TlsHelper.php b/src/Composer/Util/TlsHelper.php index 721e93825..1afb4bb21 100644 --- a/src/Composer/Util/TlsHelper.php +++ b/src/Composer/Util/TlsHelper.php @@ -247,7 +247,7 @@ EOT; /** * Convert certificate name into matching function. * - * @param $certName CN/SAN + * @param string $certName CN/SAN * * @return callable|null */ From 3a66d1b9bbc1be1162c6ea33c201a4556d0a4f8c Mon Sep 17 00:00:00 2001 From: Niels Keurentjes Date: Sat, 27 Feb 2016 23:42:55 +0100 Subject: [PATCH 5/5] Fixed unit test explicitly depending on erroneous method invocation. --- tests/Composer/Test/Downloader/PerforceDownloaderTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/tests/Composer/Test/Downloader/PerforceDownloaderTest.php b/tests/Composer/Test/Downloader/PerforceDownloaderTest.php index 2b8105e65..627db80e7 100644 --- a/tests/Composer/Test/Downloader/PerforceDownloaderTest.php +++ b/tests/Composer/Test/Downloader/PerforceDownloaderTest.php @@ -25,6 +25,7 @@ use Composer\Util\Filesystem; class PerforceDownloaderTest extends TestCase { protected $config; + /** @var PerforceDownloader */ protected $downloader; protected $io; protected $package; @@ -130,7 +131,7 @@ class PerforceDownloaderTest extends TestCase $perforce = $this->getMockBuilder('Composer\Util\Perforce', $perforceMethods)->disableOriginalConstructor()->getMock(); $perforce->expects($this->at(0))->method('initializePath')->with($this->equalTo($this->testPath)); $perforce->expects($this->at(1))->method('setStream')->with($this->equalTo($ref)); - $perforce->expects($this->at(2))->method('p4Login')->with($this->identicalTo($this->io)); + $perforce->expects($this->at(2))->method('p4Login'); $perforce->expects($this->at(3))->method('writeP4ClientSpec'); $perforce->expects($this->at(4))->method('connectClient'); $perforce->expects($this->at(5))->method('syncCodeBase')->with($label); @@ -153,7 +154,7 @@ class PerforceDownloaderTest extends TestCase $perforce = $this->getMockBuilder('Composer\Util\Perforce', $perforceMethods)->disableOriginalConstructor()->getMock(); $perforce->expects($this->at(0))->method('initializePath')->with($this->equalTo($this->testPath)); $perforce->expects($this->at(1))->method('setStream')->with($this->equalTo($ref)); - $perforce->expects($this->at(2))->method('p4Login')->with($this->identicalTo($this->io)); + $perforce->expects($this->at(2))->method('p4Login'); $perforce->expects($this->at(3))->method('writeP4ClientSpec'); $perforce->expects($this->at(4))->method('connectClient'); $perforce->expects($this->at(5))->method('syncCodeBase')->with($label);