Skip to content

Instantly share code, notes, and snippets.

@pierrejoye
Last active August 29, 2015 14:18
Show Gist options
  • Select an option

  • Save pierrejoye/44e8a641ae46b4826487 to your computer and use it in GitHub Desktop.

Select an option

Save pierrejoye/44e8a641ae46b4826487 to your computer and use it in GitHub Desktop.
start install-extension
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