Browse Source

Moved config option to not save subversion credentials to repository configuration, added documentation.

Bastian Hofmann 10 years ago
parent
commit
204fc207fa

+ 32 - 1
doc/05-repositories.md

@@ -345,6 +345,37 @@ If the package is in a sub-directory, e.g. `/trunk/foo/bar/composer.json` and
 setting the `"package-path"` option to the sub-directory, in this example it
 setting the `"package-path"` option to the sub-directory, in this example it
 would be `"package-path": "foo/bar/"`.
 would be `"package-path": "foo/bar/"`.
 
 
+If you have a private Subversion repository you can safe credentials in the
+http-basic section of your config (See [Schema](04-schema.md)):
+
+```json
+{
+    "http-basic": {
+        "svn.example.org": {
+            "username": "username",
+            "password": "password"
+        }
+    }
+}
+```
+
+If your Subversion client is configured to store credentials by default these
+credentials will be saved for the current user and existing saved credentials
+for this server will be overwritten. To change this behavior by setting the
+`"cache-credentials"` option in your repository configuration:
+
+```json
+{
+    "repositories": [
+        {
+            "type": "vcs",
+            "url": "http://svn.example.org/projectA/",
+            "cache-credentials": false
+        }
+    ]
+}
+```
+
 ### PEAR
 ### PEAR
 
 
 It is possible to install packages from any PEAR channel by using the `pear`
 It is possible to install packages from any PEAR channel by using the `pear`
@@ -494,7 +525,7 @@ there are some use cases for hosting your own repository.
   might want to keep them separate to packagist. An example of this would be
   might want to keep them separate to packagist. An example of this would be
   wordpress plugins.
   wordpress plugins.
 
 
-For hosting your own packages, a native `composer` type of repository is 
+For hosting your own packages, a native `composer` type of repository is
 recommended, which provides the best performance.
 recommended, which provides the best performance.
 
 
 There are a few tools that can help you create a `composer` repository.
 There are a few tools that can help you create a `composer` repository.

+ 9 - 0
src/Composer/Repository/Vcs/SvnDriver.php

@@ -27,6 +27,10 @@ use Composer\Downloader\TransportException;
  */
  */
 class SvnDriver extends VcsDriver
 class SvnDriver extends VcsDriver
 {
 {
+
+    /**
+     * @var Cache
+     */
     protected $cache;
     protected $cache;
     protected $baseUrl;
     protected $baseUrl;
     protected $tags;
     protected $tags;
@@ -38,6 +42,7 @@ class SvnDriver extends VcsDriver
     protected $branchesPath = 'branches';
     protected $branchesPath = 'branches';
     protected $tagsPath     = 'tags';
     protected $tagsPath     = 'tags';
     protected $packagePath   = '';
     protected $packagePath   = '';
+    protected $cacheCredentials = true;
 
 
     /**
     /**
      * @var \Composer\Util\Svn
      * @var \Composer\Util\Svn
@@ -62,6 +67,9 @@ class SvnDriver extends VcsDriver
         if (isset($this->repoConfig['tags-path'])) {
         if (isset($this->repoConfig['tags-path'])) {
             $this->tagsPath = $this->repoConfig['tags-path'];
             $this->tagsPath = $this->repoConfig['tags-path'];
         }
         }
+        if (array_key_exists('cache-credentials', $this->repoConfig)) {
+            $this->cacheCredentials = (bool) $this->repoConfig['cache-credentials'];
+        }
         if (isset($this->repoConfig['package-path'])) {
         if (isset($this->repoConfig['package-path'])) {
             $this->packagePath = '/' . trim($this->repoConfig['package-path'], '/');
             $this->packagePath = '/' . trim($this->repoConfig['package-path'], '/');
         }
         }
@@ -307,6 +315,7 @@ class SvnDriver extends VcsDriver
     {
     {
         if (null === $this->util) {
         if (null === $this->util) {
             $this->util = new SvnUtil($this->baseUrl, $this->io, $this->config, $this->process);
             $this->util = new SvnUtil($this->baseUrl, $this->io, $this->config, $this->process);
+            $this->util->setCacheCredentials($this->cacheCredentials);
         }
         }
 
 
         try {
         try {

+ 8 - 4
src/Composer/Util/Svn.php

@@ -147,6 +147,14 @@ class Svn
         );
         );
     }
     }
 
 
+    /**
+     * @param boolean $cacheCredentials
+     */
+    public function setCacheCredentials($cacheCredentials)
+    {
+        $this->cacheCredentials = $cacheCredentials;
+    }
+
     /**
     /**
      * Repositories requests credentials, let's put them in.
      * Repositories requests credentials, let's put them in.
      *
      *
@@ -295,10 +303,6 @@ class Svn
             $this->credentials['username'] = $authConfig[$host]['username'];
             $this->credentials['username'] = $authConfig[$host]['username'];
             $this->credentials['password'] = $authConfig[$host]['password'];
             $this->credentials['password'] = $authConfig[$host]['password'];
 
 
-            if (array_key_exists('cacheCredentials', $authConfig[$host])) {
-                $this->cacheCredentials = (bool) $authConfig[$host]['cacheCredentials'];
-            }
-
             return $this->hasAuth = true;
             return $this->hasAuth = true;
         }
         }
 
 

+ 4 - 2
tests/Composer/Test/Util/SvnTest.php

@@ -81,13 +81,14 @@ class SvnTest extends \PHPUnit_Framework_TestCase
             array(
             array(
                 'config' => array(
                 'config' => array(
                     'http-basic' => array(
                     'http-basic' => array(
-                        'svn.apache.org' => array('username' => 'foo', 'password' => 'bar', 'cacheCredentials' => true)
+                        'svn.apache.org' => array('username' => 'foo', 'password' => 'bar')
                     )
                     )
                 )
                 )
             )
             )
         );
         );
 
 
         $svn = new Svn($url, new NullIO, $config);
         $svn = new Svn($url, new NullIO, $config);
+        $svn->setCacheCredentials(true);
         $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString');
         $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString');
         $reflMethod->setAccessible(true);
         $reflMethod->setAccessible(true);
 
 
@@ -103,13 +104,14 @@ class SvnTest extends \PHPUnit_Framework_TestCase
             array(
             array(
                 'config' => array(
                 'config' => array(
                     'http-basic' => array(
                     'http-basic' => array(
-                        'svn.apache.org' => array('username' => 'foo', 'password' => 'bar', 'cacheCredentials' => false)
+                        'svn.apache.org' => array('username' => 'foo', 'password' => 'bar')
                     )
                     )
                 )
                 )
             )
             )
         );
         );
 
 
         $svn = new Svn($url, new NullIO, $config);
         $svn = new Svn($url, new NullIO, $config);
+        $svn->setCacheCredentials(false);
         $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString');
         $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString');
         $reflMethod->setAccessible(true);
         $reflMethod->setAccessible(true);