1
0
Fork 0

Merge pull request #3272 from bashofmann/master

Added cacheCredentials config flag for saved SVN credentials
pull/3294/merge
Nils Adermann 2014-09-24 15:38:16 +02:00
commit eba04dc211
4 changed files with 95 additions and 1 deletions

View File

@ -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 save 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
`"svn-cache-credentials"` option in your repository configuration:
```json
{
"repositories": [
{
"type": "vcs",
"url": "http://svn.example.org/projectA/",
"svn-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.

View File

@ -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('svn-cache-credentials', $this->repoConfig)) {
$this->cacheCredentials = (bool) $this->repoConfig['svn-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 {

View File

@ -147,6 +147,14 @@ class Svn
);
}
/**
* @param boolean $cacheCredentials
*/
public function setCacheCredentials($cacheCredentials)
{
$this->cacheCredentials = $cacheCredentials;
}
/**
* Repositories requests credentials, let's put them in.
*

View File

@ -72,6 +72,52 @@ class SvnTest extends \PHPUnit_Framework_TestCase
$this->assertEquals($this->getCmd(" --username 'foo' --password 'bar' "), $reflMethod->invoke($svn));
}
public function testCredentialsFromConfigWithCacheCredentialsTrue()
{
$url = 'http://svn.apache.org';
$config = new Config();
$config->merge(
array(
'config' => array(
'http-basic' => array(
'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);
$this->assertEquals($this->getCmd(" --username 'foo' --password 'bar' "), $reflMethod->invoke($svn));
}
public function testCredentialsFromConfigWithCacheCredentialsFalse()
{
$url = 'http://svn.apache.org';
$config = new Config();
$config->merge(
array(
'config' => array(
'http-basic' => array(
'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);
$this->assertEquals($this->getCmd(" --no-auth-cache --username 'foo' --password 'bar' "), $reflMethod->invoke($svn));
}
private function getCmd($cmd)
{
if (defined('PHP_WINDOWS_VERSION_BUILD')) {