Browse Source

composer config repositories.packagist false

closes #3728, closes #3713, closes #3290, not sure about #3025
Rob Bast 10 years ago
parent
commit
ef92a06205

+ 48 - 42
src/Composer/Command/ConfigCommand.php

@@ -237,48 +237,6 @@ EOT
 
         $values = $input->getArgument('setting-value'); // what the user is trying to add/change
 
-        // handle repositories
-        if (preg_match('/^repos?(?:itories)?\.(.+)/', $settingKey, $matches)) {
-            if ($input->getOption('unset')) {
-                return $this->configSource->removeRepository($matches[1]);
-            }
-
-            if (2 !== count($values)) {
-                throw new \RuntimeException('You must pass the type and a url. Example: php composer.phar config repositories.foo vcs http://bar.com');
-            }
-
-            return $this->configSource->addRepository($matches[1], array(
-                'type' => $values[0],
-                'url'  => $values[1],
-            ));
-        }
-
-        // handle github-oauth
-        if (preg_match('/^(github-oauth|http-basic)\.(.+)/', $settingKey, $matches)) {
-            if ($input->getOption('unset')) {
-                $this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]);
-                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
-
-                return;
-            }
-
-            if ($matches[1] === 'github-oauth') {
-                if (1 !== count($values)) {
-                    throw new \RuntimeException('Too many arguments, expected only one token');
-                }
-                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
-                $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], $values[0]);
-            } elseif ($matches[1] === 'http-basic') {
-                if (2 !== count($values)) {
-                    throw new \RuntimeException('Expected two arguments (username, password), got '.count($values));
-                }
-                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
-                $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'password' => $values[1]));
-            }
-
-            return;
-        }
-
         $booleanValidator = function ($val) { return in_array($val, array('true', 'false', '1', '0'), true); };
         $booleanNormalizer = function ($val) { return $val !== 'false' && (bool) $val; };
 
@@ -402,6 +360,54 @@ EOT
             }
         }
 
+        // handle repositories
+        if (preg_match('/^repos?(?:itories)?\.(.+)/', $settingKey, $matches)) {
+            if ($input->getOption('unset')) {
+                return $this->configSource->removeRepository($matches[1]);
+            }
+
+            if (2 === count($values)) {
+                return $this->configSource->addRepository($matches[1], array(
+                    'type' => $values[0],
+                    'url'  => $values[1],
+                ));
+            }
+
+            if (1 === count($values) && $booleanValidator($values[0])) {
+                if (false === $booleanNormalizer($values[0])) {
+                    return $this->configSource->addRepository($matches[1], false);
+                }
+            }
+
+            throw new \RuntimeException('You must pass the type and a url. Example: php composer.phar config repositories.foo vcs http://bar.com');
+        }
+
+        // handle github-oauth
+        if (preg_match('/^(github-oauth|http-basic)\.(.+)/', $settingKey, $matches)) {
+            if ($input->getOption('unset')) {
+                $this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]);
+                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
+
+                return;
+            }
+
+            if ($matches[1] === 'github-oauth') {
+                if (1 !== count($values)) {
+                    throw new \RuntimeException('Too many arguments, expected only one token');
+                }
+                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
+                $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], $values[0]);
+            } elseif ($matches[1] === 'http-basic') {
+                if (2 !== count($values)) {
+                    throw new \RuntimeException('Expected two arguments (username, password), got '.count($values));
+                }
+                $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
+                $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'password' => $values[1]));
+            }
+
+            return;
+        }
+
         throw new \InvalidArgumentException('Setting '.$settingKey.' does not exist or is not supported by this command');
     }
 

+ 6 - 0
tests/Composer/Test/Config/Fixtures/composer-repositories.json

@@ -0,0 +1,6 @@
+{
+    "name": "my-vend/my-app",
+    "license": "MIT",
+    "repositories": {
+    }
+}

+ 10 - 0
tests/Composer/Test/Config/Fixtures/config/config-with-exampletld-repository.json

@@ -0,0 +1,10 @@
+{
+    "name": "my-vend/my-app",
+    "license": "MIT",
+    "repositories": {
+        "example_tld": {
+            "type": "git",
+            "url": "example.tld"
+        }
+    }
+}

+ 7 - 0
tests/Composer/Test/Config/Fixtures/config/config-with-packagist-false.json

@@ -0,0 +1,7 @@
+{
+    "name": "my-vend/my-app",
+    "license": "MIT",
+    "repositories": {
+        "packagist": false
+    }
+}

+ 86 - 43
tests/Composer/Test/Config/JsonConfigSourceTest.php

@@ -18,6 +18,9 @@ use Composer\Util\Filesystem;
 
 class JsonConfigSourceTest extends \PHPUnit_Framework_TestCase
 {
+    /** @var Filesystem */
+    private $fs;
+    /** @var string */
     private $workingDir;
 
     protected function fixturePath($name)
@@ -39,6 +42,89 @@ class JsonConfigSourceTest extends \PHPUnit_Framework_TestCase
         }
     }
 
+    public function testAddRepository()
+    {
+        $config = $this->workingDir.'/composer.json';
+        copy($this->fixturePath('composer-repositories.json'), $config);
+        $jsonConfigSource = new JsonConfigSource(new JsonFile($config));
+        $jsonConfigSource->addRepository('example_tld', array('type' => 'git', 'url' => 'example.tld'));
+
+        $this->assertFileEquals($this->fixturePath('config/config-with-exampletld-repository.json'), $config);
+    }
+
+    public function testRemoveRepository()
+    {
+        $config = $this->workingDir.'/composer.json';
+        copy($this->fixturePath('config/config-with-exampletld-repository.json'), $config);
+        $jsonConfigSource = new JsonConfigSource(new JsonFile($config));
+        $jsonConfigSource->removeRepository('example_tld');
+
+        $this->assertFileEquals($this->fixturePath('composer-repositories.json'), $config);
+    }
+
+    public function testAddPackagistRepositoryWithFalseValue()
+    {
+        $config = $this->workingDir.'/composer.json';
+        copy($this->fixturePath('composer-repositories.json'), $config);
+        $jsonConfigSource = new JsonConfigSource(new JsonFile($config));
+        $jsonConfigSource->addRepository('packagist', false);
+
+        $this->assertFileEquals($this->fixturePath('config/config-with-packagist-false.json'), $config);
+    }
+
+    public function testRemovePackagist()
+    {
+        $config = $this->workingDir.'/composer.json';
+        copy($this->fixturePath('config/config-with-packagist-false.json'), $config);
+        $jsonConfigSource = new JsonConfigSource(new JsonFile($config));
+        $jsonConfigSource->removeRepository('packagist');
+
+        $this->assertFileEquals($this->fixturePath('composer-repositories.json'), $config);
+    }
+
+    /**
+     * Test addLink()
+     *
+     * @param string $sourceFile     Source file
+     * @param string $type           Type (require, require-dev, provide, suggest, replace, conflict)
+     * @param string $name           Name
+     * @param string $value          Value
+     * @param string $compareAgainst File to compare against after making changes
+     *
+     * @dataProvider provideAddLinkData
+     */
+    public function testAddLink($sourceFile, $type, $name, $value, $compareAgainst)
+    {
+        $composerJson = $this->workingDir.'/composer.json';
+        copy($sourceFile, $composerJson);
+        $jsonConfigSource = new JsonConfigSource(new JsonFile($composerJson));
+
+        $jsonConfigSource->addLink($type, $name, $value);
+
+        $this->assertFileEquals($compareAgainst, $composerJson);
+    }
+
+    /**
+     * Test removeLink()
+     *
+     * @param string $sourceFile     Source file
+     * @param string $type           Type (require, require-dev, provide, suggest, replace, conflict)
+     * @param string $name           Name
+     * @param string $compareAgainst File to compare against after making changes
+     *
+     * @dataProvider provideRemoveLinkData
+     */
+    public function testRemoveLink($sourceFile, $type, $name, $compareAgainst)
+    {
+        $composerJson = $this->workingDir.'/composer.json';
+        copy($sourceFile, $composerJson);
+        $jsonConfigSource = new JsonConfigSource(new JsonFile($composerJson));
+
+        $jsonConfigSource->removeLink($type, $name);
+
+        $this->assertFileEquals($compareAgainst, $composerJson);
+    }
+
     protected function addLinkDataArguments($type, $name, $value, $fixtureBasename, $before)
     {
         return array(
@@ -88,28 +174,6 @@ class JsonConfigSourceTest extends \PHPUnit_Framework_TestCase
         );
     }
 
-    /**
-     * Test addLink()
-     *
-     * @param string $sourceFile     Source file
-     * @param string $type           Type (require, require-dev, provide, suggest, replace, conflict)
-     * @param string $name           Name
-     * @param string $value          Value
-     * @param string $compareAgainst File to compare against after making changes
-     *
-     * @dataProvider provideAddLinkData
-     */
-    public function testAddLink($sourceFile, $type, $name, $value, $compareAgainst)
-    {
-        $composerJson = $this->workingDir.'/composer.json';
-        copy($sourceFile, $composerJson);
-        $jsonConfigSource = new JsonConfigSource(new JsonFile($composerJson));
-
-        $jsonConfigSource->addLink($type, $name, $value);
-
-        $this->assertFileEquals($compareAgainst, $composerJson);
-    }
-
     protected function removeLinkDataArguments($type, $name, $fixtureBasename, $after = null)
     {
         return array(
@@ -156,25 +220,4 @@ class JsonConfigSourceTest extends \PHPUnit_Framework_TestCase
             $this->removeLinkDataArguments('conflict', 'my-vend/my-old-app', 'conflict-to-twoOfEverything', $twoOfEverything),
         );
     }
-
-    /**
-     * Test removeLink()
-     *
-     * @param string $sourceFile     Source file
-     * @param string $type           Type (require, require-dev, provide, suggest, replace, conflict)
-     * @param string $name           Name
-     * @param string $compareAgainst File to compare against after making changes
-     *
-     * @dataProvider provideRemoveLinkData
-     */
-    public function testRemoveLink($sourceFile, $type, $name, $compareAgainst)
-    {
-        $composerJson = $this->workingDir.'/composer.json';
-        copy($sourceFile, $composerJson);
-        $jsonConfigSource = new JsonConfigSource(new JsonFile($composerJson));
-
-        $jsonConfigSource->removeLink($type, $name);
-
-        $this->assertFileEquals($compareAgainst, $composerJson);
-    }
 }