diff --git a/src/Composer/Util/Svn.php b/src/Composer/Util/Svn.php index 92694ea78..fcfac6d7e 100644 --- a/src/Composer/Util/Svn.php +++ b/src/Composer/Util/Svn.php @@ -20,6 +20,8 @@ use Composer\IO\IOInterface; */ class Svn { + const MAX_QTY_AUTH_TRIES = 5; + /** * @var array */ @@ -50,6 +52,11 @@ class Svn */ protected $process; + /** + * @var integer + */ + protected $qtyAuthTries = 0; + /** * @param string $url * @param \Composer\IO\IOInterface $io @@ -112,11 +119,8 @@ class Svn ); } - // TODO keep a count of user auth attempts and ask 5 times before - // failing hard (currently it fails hard directly if the URL has credentials) - - // try to authenticate - if (!$this->hasAuth()) { + // try to authenticate if maximum quantity of tries not reached + if ($this->qtyAuthTries++ < self::MAX_QTY_AUTH_TRIES || !$this->hasAuth()) { $this->doAuthDance(); // restart the process diff --git a/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php b/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php index 2a4ab00c3..d9bd53321 100644 --- a/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php +++ b/tests/Composer/Test/Repository/Vcs/SvnDriverTest.php @@ -23,7 +23,7 @@ class SvnDriverTest extends \PHPUnit_Framework_TestCase public function testWrongCredentialsInUrl() { $console = $this->getMock('Composer\IO\IOInterface'); - $console->expects($this->once()) + $console->expects($this->exactly(6)) ->method('isInteractive') ->will($this->returnValue(true)); @@ -35,7 +35,7 @@ class SvnDriverTest extends \PHPUnit_Framework_TestCase $process->expects($this->at(1)) ->method('execute') ->will($this->returnValue(1)); - $process->expects($this->once()) + $process->expects($this->exactly(7)) ->method('getErrorOutput') ->will($this->returnValue($output)); $process->expects($this->at(2))