Last active
August 29, 2015 14:18
-
-
Save pierrejoye/44e8a641ae46b4826487 to your computer and use it in GitHub Desktop.
start install-extension
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| diff --git a/src/Composer/Command/InstallCommand.php b/src/Composer/Command/InstallCommand.php | |
| index e548b8d..9803878 100644 | |
| --- a/src/Composer/Command/InstallCommand.php | |
| +++ b/src/Composer/Command/InstallCommand.php | |
| @@ -47,6 +47,7 @@ class InstallCommand extends Command | |
| new InputOption('verbose', 'v|vv|vvv', InputOption::VALUE_NONE, 'Shows more details including new commits pulled in when updating packages.'), | |
| new InputOption('optimize-autoloader', 'o', InputOption::VALUE_NONE, 'Optimize autoloader during autoloader dump'), | |
| new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'), | |
| + new InputOption('install-extensions', null, InputOption::VALUE_NONE, 'install PHP extensions'), | |
| new InputArgument('packages', InputArgument::IS_ARRAY | InputArgument::OPTIONAL, 'Should not be provided, use composer require instead to add a given package to composer.json.'), | |
| )) | |
| ->setHelp(<<<EOT | |
| @@ -122,6 +123,7 @@ EOT | |
| ->setRunScripts(!$input->getOption('no-scripts')) | |
| ->setOptimizeAutoloader($optimize) | |
| ->setIgnorePlatformRequirements($input->getOption('ignore-platform-reqs')) | |
| + ->setInstallExtensions($input->getOption('install-extensions')); | |
| ; | |
| if ($input->getOption('no-plugins')) { | |
| diff --git a/src/Composer/DependencyResolver/RuleSetGenerator.php b/src/Composer/DependencyResolver/RuleSetGenerator.php | |
| index 8ea24e7..4154476 100644 | |
| --- a/src/Composer/DependencyResolver/RuleSetGenerator.php | |
| +++ b/src/Composer/DependencyResolver/RuleSetGenerator.php | |
| @@ -179,7 +179,7 @@ class RuleSetGenerator | |
| } | |
| } | |
| - protected function addRulesForPackage(PackageInterface $package, $ignorePlatformReqs) | |
| + protected function addRulesForPackage(PackageInterface $package, $ignorePlatformReqs, $installExtensions = false) | |
| { | |
| $workQueue = new \SplQueue; | |
| $workQueue->enqueue($package); | |
| @@ -190,6 +190,10 @@ class RuleSetGenerator | |
| continue; | |
| } | |
| + if (!$installExtensions && $package->getType() == 'extension') { | |
| + continue; | |
| + } | |
| + | |
| $this->addedMap[$package->id] = true; | |
| foreach ($package->getRequires() as $link) { | |
| @@ -311,7 +315,7 @@ class RuleSetGenerator | |
| } | |
| } | |
| - public function getRulesFor($jobs, $installedMap, $ignorePlatformReqs = false) | |
| + public function getRulesFor($jobs, $installedMap, $ignorePlatformReqs = false, $installExtensions = false) | |
| { | |
| $this->jobs = $jobs; | |
| $this->rules = new RuleSet; | |
| @@ -327,7 +331,7 @@ class RuleSetGenerator | |
| $this->addedMap = array(); | |
| foreach ($this->installedMap as $package) { | |
| - $this->addRulesForPackage($package, $ignorePlatformReqs); | |
| + $this->addRulesForPackage($package, $ignorePlatformReqs, $installExtensions); | |
| } | |
| $this->addRulesForJobs($ignorePlatformReqs); | |
| diff --git a/src/Composer/DependencyResolver/Solver.php b/src/Composer/DependencyResolver/Solver.php | |
| index 77a945f..218fc8e 100644 | |
| --- a/src/Composer/DependencyResolver/Solver.php | |
| +++ b/src/Composer/DependencyResolver/Solver.php | |
| @@ -130,7 +130,7 @@ class Solver | |
| } | |
| } | |
| - protected function checkForRootRequireProblems($ignorePlatformReqs) | |
| + protected function checkForRootRequireProblems($ignorePlatformReqs, $installExtensions) | |
| { | |
| foreach ($this->jobs as $job) { | |
| switch ($job['cmd']) { | |
| @@ -164,13 +164,13 @@ class Solver | |
| } | |
| } | |
| - public function solve(Request $request, $ignorePlatformReqs = false) | |
| + public function solve(Request $request, $ignorePlatformReqs = false, $installExtensions = false) | |
| { | |
| $this->jobs = $request->getJobs(); | |
| $this->setupInstalledMap(); | |
| $this->rules = $this->ruleSetGenerator->getRulesFor($this->jobs, $this->installedMap, $ignorePlatformReqs); | |
| - $this->checkForRootRequireProblems($ignorePlatformReqs); | |
| + $this->checkForRootRequireProblems($ignorePlatformReqs, $installExtensions); | |
| $this->decisions = new Decisions($this->pool); | |
| $this->watchGraph = new RuleWatchGraph; | |
| diff --git a/src/Composer/Installer.php b/src/Composer/Installer.php | |
| index 89ecd06..92f9f0a 100644 | |
| --- a/src/Composer/Installer.php | |
| +++ b/src/Composer/Installer.php | |
| @@ -108,6 +108,7 @@ class Installer | |
| protected $dumpAutoloader = true; | |
| protected $runScripts = true; | |
| protected $ignorePlatformReqs = false; | |
| + protected $installExtensions = false; | |
| protected $preferStable = false; | |
| protected $preferLowest = false; | |
| /** | |
| @@ -500,7 +501,7 @@ class Installer | |
| $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::PRE_DEPENDENCIES_SOLVING, $this->devMode, $policy, $pool, $installedRepo, $request); | |
| $solver = new Solver($policy, $pool, $installedRepo); | |
| try { | |
| - $operations = $solver->solve($request, $this->ignorePlatformReqs); | |
| + $operations = $solver->solve($request, $this->ignorePlatformReqs, $this->installExtensions); | |
| $this->eventDispatcher->dispatchInstallerEvent(InstallerEvents::POST_DEPENDENCIES_SOLVING, $this->devMode, $policy, $pool, $installedRepo, $request, $operations); | |
| } catch (SolverProblemsException $e) { | |
| $this->io->writeError('<error>Your requirements could not be resolved to an installable set of packages.</error>'); | |
| @@ -1254,6 +1255,19 @@ class Installer | |
| } | |
| /** | |
| + * set install Extensions flag | |
| + * | |
| + * @param boolean $installExtensions | |
| + * @return Installer | |
| + */ | |
| + public function setInstallExtensions($installExtensions = false) | |
| + { | |
| + $this->installExtensions = (boolean) $installExtensions; | |
| + | |
| + return $this; | |
| + } | |
| + | |
| + /** | |
| * restrict the update operation to a few packages, all other packages | |
| * that are already installed will be kept at their current version | |
| * | |
| diff --git a/src/Composer/Installer/ExtensionInstaller.php b/src/Composer/Installer/ExtensionInstaller.php | |
| index 60fad8e..150da06 100644 | |
| --- a/src/Composer/Installer/ExtensionInstaller.php | |
| +++ b/src/Composer/Installer/ExtensionInstaller.php | |
| @@ -71,7 +71,7 @@ class ExtensionInstaller implements InstallerInterface | |
| */ | |
| public function install(InstalledRepositoryInterface $repo, PackageInterface $package) | |
| { | |
| - | |
| + debug_print_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); | |
| $this->io->write("Pickle: fetching " . $package->getName()); | |
| $distUrl = $package->getDistURL(); | |
| diff --git a/src/Composer/Installer/InstallationManager.php b/src/Composer/Installer/InstallationManager.php | |
| index a43acbb..534812d 100644 | |
| --- a/src/Composer/Installer/InstallationManager.php | |
| +++ b/src/Composer/Installer/InstallationManager.php | |
| @@ -148,6 +148,11 @@ class InstallationManager | |
| public function install(RepositoryInterface $repo, InstallOperation $operation) | |
| { | |
| $package = $operation->getPackage(); | |
| + $type = $package->getType(); | |
| + if ($type == 'extension') { | |
| + print "run composer install --install-extension\n"; | |
| + return; | |
| + } | |
| $installer = $this->getInstaller($package->getType()); | |
| $installer->install($repo, $package); | |
| $this->markForNotification($package); | |
| diff --git a/src/bootstrap.php b/src/bootstrap.php | |
| index 338b3cc..7391f8e 100644 | |
| --- a/src/bootstrap.php | |
| +++ b/src/bootstrap.php | |
| @@ -21,5 +21,4 @@ if ((!$loader = includeIfExists(__DIR__.'/../vendor/autoload.php')) && (!$loader | |
| 'php composer.phar install'.PHP_EOL; | |
| exit(1); | |
| } | |
| - | |
| return $loader; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment