From c9436438ff907ece08c2bca5bf2405be7f067198 Mon Sep 17 00:00:00 2001 From: Jordi Boggiano Date: Wed, 24 Feb 2016 17:27:42 +0000 Subject: [PATCH] Add memoization to parseConstraints, saves some (6-7% here) RAM and marginal CPU time --- src/Composer/Command/DependsCommand.php | 2 +- src/Composer/Command/RequireCommand.php | 2 +- src/Composer/Command/ShowCommand.php | 2 +- src/Composer/DependencyResolver/Pool.php | 2 +- src/Composer/Factory.php | 2 +- src/Composer/Package/AliasPackage.php | 2 +- src/Composer/Package/Loader/ArrayLoader.php | 2 +- src/Composer/Package/Loader/RootPackageLoader.php | 2 +- .../Package/Loader/ValidatingArrayLoader.php | 2 +- src/Composer/Package/Package.php | 2 +- src/Composer/Package/Version/VersionGuesser.php | 6 +++--- src/Composer/Package/Version/VersionParser.php | 14 ++++++++++++++ src/Composer/Package/Version/VersionSelector.php | 4 ++-- src/Composer/Plugin/PluginManager.php | 2 +- src/Composer/Repository/ArrayRepository.php | 2 +- src/Composer/Repository/ComposerRepository.php | 2 +- src/Composer/Repository/PathRepository.php | 2 +- src/Composer/Repository/PearRepository.php | 2 +- src/Composer/Repository/PlatformRepository.php | 2 +- src/Composer/Repository/VcsRepository.php | 2 +- 20 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/Composer/Command/DependsCommand.php b/src/Composer/Command/DependsCommand.php index abdce5a86..81cf51c95 100644 --- a/src/Composer/Command/DependsCommand.php +++ b/src/Composer/Command/DependsCommand.php @@ -20,7 +20,7 @@ use Composer\Repository\CompositeRepository; use Composer\Repository\PlatformRepository; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputOption; diff --git a/src/Composer/Command/RequireCommand.php b/src/Composer/Command/RequireCommand.php index cd62bbc5a..65294c44b 100644 --- a/src/Composer/Command/RequireCommand.php +++ b/src/Composer/Command/RequireCommand.php @@ -20,7 +20,7 @@ use Composer\Factory; use Composer\Installer; use Composer\Json\JsonFile; use Composer\Json\JsonManipulator; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Repository\CompositeRepository; diff --git a/src/Composer/Command/ShowCommand.php b/src/Composer/Command/ShowCommand.php index 5ddce2954..38cc4ea68 100644 --- a/src/Composer/Command/ShowCommand.php +++ b/src/Composer/Command/ShowCommand.php @@ -16,7 +16,7 @@ use Composer\DependencyResolver\Pool; use Composer\DependencyResolver\DefaultPolicy; use Composer\Factory; use Composer\Package\CompletePackageInterface; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Plugin\CommandEvent; use Composer\Plugin\PluginEvents; use Composer\Package\PackageInterface; diff --git a/src/Composer/DependencyResolver/Pool.php b/src/Composer/DependencyResolver/Pool.php index 1a7da84a2..a185de66d 100644 --- a/src/Composer/DependencyResolver/Pool.php +++ b/src/Composer/DependencyResolver/Pool.php @@ -14,7 +14,7 @@ namespace Composer\DependencyResolver; use Composer\Package\BasePackage; use Composer\Package\AliasPackage; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Semver\Constraint\ConstraintInterface; use Composer\Semver\Constraint\Constraint; use Composer\Semver\Constraint\EmptyConstraint; diff --git a/src/Composer/Factory.php b/src/Composer/Factory.php index cdf34b6f5..1f77554ac 100644 --- a/src/Composer/Factory.php +++ b/src/Composer/Factory.php @@ -27,7 +27,7 @@ use Composer\Util\Silencer; use Symfony\Component\Console\Formatter\OutputFormatterStyle; use Composer\EventDispatcher\EventDispatcher; use Composer\Autoload\AutoloadGenerator; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Downloader\TransportException; use Seld\JsonLint\JsonParser; diff --git a/src/Composer/Package/AliasPackage.php b/src/Composer/Package/AliasPackage.php index e161a4482..631b319b9 100644 --- a/src/Composer/Package/AliasPackage.php +++ b/src/Composer/Package/AliasPackage.php @@ -13,7 +13,7 @@ namespace Composer\Package; use Composer\Semver\Constraint\Constraint; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; /** * @author Jordi Boggiano diff --git a/src/Composer/Package/Loader/ArrayLoader.php b/src/Composer/Package/Loader/ArrayLoader.php index 42398e41f..160b8000a 100644 --- a/src/Composer/Package/Loader/ArrayLoader.php +++ b/src/Composer/Package/Loader/ArrayLoader.php @@ -17,7 +17,7 @@ use Composer\Package\AliasPackage; use Composer\Package\Link; use Composer\Package\RootAliasPackage; use Composer\Package\RootPackageInterface; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; /** * @author Konstantin Kudryashiv diff --git a/src/Composer/Package/Loader/RootPackageLoader.php b/src/Composer/Package/Loader/RootPackageLoader.php index 565ff39c4..8d44d0e03 100644 --- a/src/Composer/Package/Loader/RootPackageLoader.php +++ b/src/Composer/Package/Loader/RootPackageLoader.php @@ -18,7 +18,7 @@ use Composer\Package\AliasPackage; use Composer\Config; use Composer\Factory; use Composer\Package\Version\VersionGuesser; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Repository\RepositoryManager; use Composer\Util\ProcessExecutor; diff --git a/src/Composer/Package/Loader/ValidatingArrayLoader.php b/src/Composer/Package/Loader/ValidatingArrayLoader.php index 511e94282..69da71c47 100644 --- a/src/Composer/Package/Loader/ValidatingArrayLoader.php +++ b/src/Composer/Package/Loader/ValidatingArrayLoader.php @@ -15,7 +15,7 @@ namespace Composer\Package\Loader; use Composer\Package; use Composer\Package\BasePackage; use Composer\Semver\Constraint\Constraint; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Repository\PlatformRepository; /** diff --git a/src/Composer/Package/Package.php b/src/Composer/Package/Package.php index 03d595f3b..6c7b426e7 100644 --- a/src/Composer/Package/Package.php +++ b/src/Composer/Package/Package.php @@ -12,7 +12,7 @@ namespace Composer\Package; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Util\ComposerMirror; /** diff --git a/src/Composer/Package/Version/VersionGuesser.php b/src/Composer/Package/Version/VersionGuesser.php index 4dd0be511..1cc591043 100644 --- a/src/Composer/Package/Version/VersionGuesser.php +++ b/src/Composer/Package/Version/VersionGuesser.php @@ -15,7 +15,7 @@ namespace Composer\Package\Version; use Composer\Config; use Composer\Repository\Vcs\HgDriver; use Composer\IO\NullIO; -use Composer\Semver\VersionParser as SemverVersionParser; +use Composer\Package\Version\VersionParser; use Composer\Util\Git as GitUtil; use Composer\Util\ProcessExecutor; use Composer\Util\Svn as SvnUtil; @@ -39,7 +39,7 @@ class VersionGuesser private $process; /** - * @var SemverVersionParser + * @var VersionParser */ private $versionParser; @@ -48,7 +48,7 @@ class VersionGuesser * @param ProcessExecutor $process * @param VersionParser $versionParser */ - public function __construct(Config $config, ProcessExecutor $process, SemverVersionParser $versionParser) + public function __construct(Config $config, ProcessExecutor $process, VersionParser $versionParser) { $this->config = $config; $this->process = $process; diff --git a/src/Composer/Package/Version/VersionParser.php b/src/Composer/Package/Version/VersionParser.php index 00d1e669a..65791848b 100644 --- a/src/Composer/Package/Version/VersionParser.php +++ b/src/Composer/Package/Version/VersionParser.php @@ -16,6 +16,20 @@ use Composer\Semver\VersionParser as SemverVersionParser; class VersionParser extends SemverVersionParser { + private static $constraints = array(); + + /** + * {@inheritDoc} + */ + public function parseConstraints($constraints) + { + if (!isset(self::$constraints[$constraints])) { + self::$constraints[$constraints] = parent::parseConstraints($constraints); + } + + return self::$constraints[$constraints]; + } + /** * Parses an array of strings representing package/version pairs. * diff --git a/src/Composer/Package/Version/VersionSelector.php b/src/Composer/Package/Version/VersionSelector.php index ee14a1221..cd71a0f44 100644 --- a/src/Composer/Package/Version/VersionSelector.php +++ b/src/Composer/Package/Version/VersionSelector.php @@ -17,7 +17,7 @@ use Composer\Package\BasePackage; use Composer\Package\PackageInterface; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Dumper\ArrayDumper; -use Composer\Semver\VersionParser as SemverVersionParser; +use Composer\Package\Version\VersionParser; use Composer\Semver\Semver; use Composer\Semver\Constraint\Constraint; @@ -160,7 +160,7 @@ class VersionSelector private function getParser() { if ($this->parser === null) { - $this->parser = new SemverVersionParser(); + $this->parser = new VersionParser(); } return $this->parser; diff --git a/src/Composer/Plugin/PluginManager.php b/src/Composer/Plugin/PluginManager.php index 175a5e05b..d83b78ac2 100644 --- a/src/Composer/Plugin/PluginManager.php +++ b/src/Composer/Plugin/PluginManager.php @@ -16,7 +16,7 @@ use Composer\Composer; use Composer\EventDispatcher\EventSubscriberInterface; use Composer\IO\IOInterface; use Composer\Package\Package; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Repository\RepositoryInterface; use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; diff --git a/src/Composer/Repository/ArrayRepository.php b/src/Composer/Repository/ArrayRepository.php index 5f9eaf406..80fe6890d 100644 --- a/src/Composer/Repository/ArrayRepository.php +++ b/src/Composer/Repository/ArrayRepository.php @@ -15,7 +15,7 @@ namespace Composer\Repository; use Composer\Package\AliasPackage; use Composer\Package\PackageInterface; use Composer\Package\CompletePackageInterface; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Semver\Constraint\ConstraintInterface; use Composer\Semver\Constraint\Constraint; diff --git a/src/Composer/Repository/ComposerRepository.php b/src/Composer/Repository/ComposerRepository.php index ec673a62f..5bd4e8a24 100644 --- a/src/Composer/Repository/ComposerRepository.php +++ b/src/Composer/Repository/ComposerRepository.php @@ -15,7 +15,7 @@ namespace Composer\Repository; use Composer\Package\Loader\ArrayLoader; use Composer\Package\PackageInterface; use Composer\Package\AliasPackage; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\DependencyResolver\Pool; use Composer\Json\JsonFile; use Composer\Cache; diff --git a/src/Composer/Repository/PathRepository.php b/src/Composer/Repository/PathRepository.php index 487f06030..c89c328cf 100644 --- a/src/Composer/Repository/PathRepository.php +++ b/src/Composer/Repository/PathRepository.php @@ -18,7 +18,7 @@ use Composer\Json\JsonFile; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Locker; use Composer\Package\Version\VersionGuesser; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Util\ProcessExecutor; /** diff --git a/src/Composer/Repository/PearRepository.php b/src/Composer/Repository/PearRepository.php index 2c3e64bbe..8ae85c260 100644 --- a/src/Composer/Repository/PearRepository.php +++ b/src/Composer/Repository/PearRepository.php @@ -13,7 +13,7 @@ namespace Composer\Repository; use Composer\IO\IOInterface; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Repository\Pear\ChannelReader; use Composer\Package\CompletePackage; use Composer\Repository\Pear\ChannelInfo; diff --git a/src/Composer/Repository/PlatformRepository.php b/src/Composer/Repository/PlatformRepository.php index 5016335b0..d5e7e583c 100644 --- a/src/Composer/Repository/PlatformRepository.php +++ b/src/Composer/Repository/PlatformRepository.php @@ -15,7 +15,7 @@ namespace Composer\Repository; use Composer\Config; use Composer\Package\PackageInterface; use Composer\Package\CompletePackage; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Plugin\PluginInterface; /** diff --git a/src/Composer/Repository/VcsRepository.php b/src/Composer/Repository/VcsRepository.php index cc819e694..96a068eb8 100644 --- a/src/Composer/Repository/VcsRepository.php +++ b/src/Composer/Repository/VcsRepository.php @@ -14,7 +14,7 @@ namespace Composer\Repository; use Composer\Downloader\TransportException; use Composer\Repository\Vcs\VcsDriverInterface; -use Composer\Semver\VersionParser; +use Composer\Package\Version\VersionParser; use Composer\Package\Loader\ArrayLoader; use Composer\Package\Loader\ValidatingArrayLoader; use Composer\Package\Loader\InvalidPackageException;