Browse Source

Add memoization to parseConstraints, saves some (6-7% here) RAM and marginal CPU time

Jordi Boggiano 9 years ago
parent
commit
c9436438ff

+ 1 - 1
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;

+ 1 - 1
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;

+ 1 - 1
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;

+ 1 - 1
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;

+ 1 - 1
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;
 

+ 1 - 1
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 <j.boggiano@seld.be>

+ 1 - 1
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 <ever.zet@gmail.com>

+ 1 - 1
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;
 

+ 1 - 1
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;
 
 /**

+ 1 - 1
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;
 
 /**

+ 3 - 3
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;

+ 14 - 0
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.
      *

+ 2 - 2
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;

+ 1 - 1
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;

+ 1 - 1
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;
 

+ 1 - 1
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;

+ 1 - 1
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;
 
 /**

+ 1 - 1
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;

+ 1 - 1
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;
 
 /**

+ 1 - 1
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;