From 204fc207faa0fddf9e69a6e958242a266d02540b Mon Sep 17 00:00:00 2001 From: Bastian Hofmann Date: Tue, 16 Sep 2014 15:16:55 +0200 Subject: [PATCH] Moved config option to not save subversion credentials to repository configuration, added documentation. --- doc/05-repositories.md | 33 ++++++++++++++++++++++- src/Composer/Repository/Vcs/SvnDriver.php | 9 +++++++ src/Composer/Util/Svn.php | 12 ++++++--- tests/Composer/Test/Util/SvnTest.php | 6 +++-- 4 files changed, 53 insertions(+), 7 deletions(-) diff --git a/doc/05-repositories.md b/doc/05-repositories.md index 049a05170..1e6128f0e 100644 --- a/doc/05-repositories.md +++ b/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 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 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 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. There are a few tools that can help you create a `composer` repository. diff --git a/src/Composer/Repository/Vcs/SvnDriver.php b/src/Composer/Repository/Vcs/SvnDriver.php index 2bddbe15d..f2a9e1de0 100644 --- a/src/Composer/Repository/Vcs/SvnDriver.php +++ b/src/Composer/Repository/Vcs/SvnDriver.php @@ -27,6 +27,10 @@ use Composer\Downloader\TransportException; */ class SvnDriver extends VcsDriver { + + /** + * @var Cache + */ protected $cache; protected $baseUrl; protected $tags; @@ -38,6 +42,7 @@ class SvnDriver extends VcsDriver protected $branchesPath = 'branches'; protected $tagsPath = 'tags'; protected $packagePath = ''; + protected $cacheCredentials = true; /** * @var \Composer\Util\Svn @@ -62,6 +67,9 @@ class SvnDriver extends VcsDriver if (isset($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'])) { $this->packagePath = '/' . trim($this->repoConfig['package-path'], '/'); } @@ -307,6 +315,7 @@ class SvnDriver extends VcsDriver { if (null === $this->util) { $this->util = new SvnUtil($this->baseUrl, $this->io, $this->config, $this->process); + $this->util->setCacheCredentials($this->cacheCredentials); } try { diff --git a/src/Composer/Util/Svn.php b/src/Composer/Util/Svn.php index 69aa23ebe..6d659a7f1 100644 --- a/src/Composer/Util/Svn.php +++ b/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. * @@ -295,10 +303,6 @@ class Svn $this->credentials['username'] = $authConfig[$host]['username']; $this->credentials['password'] = $authConfig[$host]['password']; - if (array_key_exists('cacheCredentials', $authConfig[$host])) { - $this->cacheCredentials = (bool) $authConfig[$host]['cacheCredentials']; - } - return $this->hasAuth = true; } diff --git a/tests/Composer/Test/Util/SvnTest.php b/tests/Composer/Test/Util/SvnTest.php index 9ee5d1271..b1f19ca1a 100644 --- a/tests/Composer/Test/Util/SvnTest.php +++ b/tests/Composer/Test/Util/SvnTest.php @@ -81,13 +81,14 @@ class SvnTest extends \PHPUnit_Framework_TestCase array( 'config' => 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->setCacheCredentials(true); $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString'); $reflMethod->setAccessible(true); @@ -103,13 +104,14 @@ class SvnTest extends \PHPUnit_Framework_TestCase array( 'config' => 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->setCacheCredentials(false); $reflMethod = new \ReflectionMethod('Composer\\Util\\Svn', 'getCredentialString'); $reflMethod->setAccessible(true);