Fix git checkouts of custom branches, fixes #889
parent
f12818233d
commit
354b82bb8c
|
@ -67,7 +67,16 @@ class GitDownloader extends VcsDownloader
|
||||||
{
|
{
|
||||||
$template = 'git checkout %s && git reset --hard %1$s';
|
$template = 'git checkout %s && git reset --hard %1$s';
|
||||||
|
|
||||||
$command = sprintf($template, escapeshellarg($reference));
|
// check whether non-commitish are branches or tags, and fetch branches with the remote name
|
||||||
|
$gitRef = $reference;
|
||||||
|
if (!preg_match('{^[a-f0-9]{40}$}', $reference)
|
||||||
|
&& 0 === $this->process->execute('git branch -r', $output, $path)
|
||||||
|
&& preg_match('{^\s+composer/'.preg_quote($reference).'$}m', $output)
|
||||||
|
) {
|
||||||
|
$gitRef = 'composer/'.$reference;
|
||||||
|
}
|
||||||
|
|
||||||
|
$command = sprintf($template, escapeshellarg($gitRef));
|
||||||
if (0 === $this->process->execute($command, $output, $path)) {
|
if (0 === $this->process->execute($command, $output, $path)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -104,7 +113,7 @@ class GitDownloader extends VcsDownloader
|
||||||
}
|
}
|
||||||
|
|
||||||
// checkout the new recovered ref
|
// checkout the new recovered ref
|
||||||
$command = sprintf($template, escapeshellarg($newReference));
|
$command = sprintf($template, escapeshellarg($reference));
|
||||||
if (0 === $this->process->execute($command, $output, $path)) {
|
if (0 === $this->process->execute($command, $output, $path)) {
|
||||||
$this->io->write(' '.$reference.' is gone (history was rewritten?), recovered by checking out '.$newReference);
|
$this->io->write(' '.$reference.' is gone (history was rewritten?), recovered by checking out '.$newReference);
|
||||||
|
|
||||||
|
|
|
@ -44,10 +44,13 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
$packageMock = $this->getMock('Composer\Package\PackageInterface');
|
$packageMock = $this->getMock('Composer\Package\PackageInterface');
|
||||||
$packageMock->expects($this->any())
|
$packageMock->expects($this->any())
|
||||||
->method('getSourceReference')
|
->method('getSourceReference')
|
||||||
->will($this->returnValue('ref'));
|
->will($this->returnValue('1234567890123456789012345678901234567890'));
|
||||||
$packageMock->expects($this->any())
|
$packageMock->expects($this->any())
|
||||||
->method('getSourceUrl')
|
->method('getSourceUrl')
|
||||||
->will($this->returnValue('https://example.com/composer/composer'));
|
->will($this->returnValue('https://example.com/composer/composer'));
|
||||||
|
$packageMock->expects($this->any())
|
||||||
|
->method('getPrettyVersion')
|
||||||
|
->will($this->returnValue('dev-master'));
|
||||||
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
||||||
|
|
||||||
$expectedGitCommand = $this->getCmd("git clone 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://example.com/composer/composer' && git fetch composer");
|
$expectedGitCommand = $this->getCmd("git clone 'https://example.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'https://example.com/composer/composer' && git fetch composer");
|
||||||
|
@ -58,7 +61,7 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
$processExecutor->expects($this->at(1))
|
$processExecutor->expects($this->at(1))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($this->getCmd("git checkout 'ref' && git reset --hard 'ref'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
->with($this->equalTo($this->getCmd("git checkout '1234567890123456789012345678901234567890' && git reset --hard '1234567890123456789012345678901234567890'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$downloader = $this->getDownloaderMock(null, $processExecutor);
|
$downloader = $this->getDownloaderMock(null, $processExecutor);
|
||||||
|
@ -74,6 +77,9 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
$packageMock->expects($this->any())
|
$packageMock->expects($this->any())
|
||||||
->method('getSourceUrl')
|
->method('getSourceUrl')
|
||||||
->will($this->returnValue('https://github.com/composer/composer'));
|
->will($this->returnValue('https://github.com/composer/composer'));
|
||||||
|
$packageMock->expects($this->any())
|
||||||
|
->method('getPrettyVersion')
|
||||||
|
->will($this->returnValue('1.0.0'));
|
||||||
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
||||||
|
|
||||||
$expectedGitCommand = $this->getCmd("git clone 'git://github.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'git://github.com/composer/composer' && git fetch composer");
|
$expectedGitCommand = $this->getCmd("git clone 'git://github.com/composer/composer' 'composerPath' && cd 'composerPath' && git remote add composer 'git://github.com/composer/composer' && git fetch composer");
|
||||||
|
@ -101,6 +107,11 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$processExecutor->expects($this->at(6))
|
$processExecutor->expects($this->at(6))
|
||||||
|
->method('execute')
|
||||||
|
->with($this->equalTo('git branch -r'))
|
||||||
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
|
$processExecutor->expects($this->at(7))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($this->getCmd("git checkout 'ref' && git reset --hard 'ref'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
->with($this->equalTo($this->getCmd("git checkout 'ref' && git reset --hard 'ref'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
@ -159,6 +170,9 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
$packageMock->expects($this->any())
|
$packageMock->expects($this->any())
|
||||||
->method('getSourceUrl')
|
->method('getSourceUrl')
|
||||||
->will($this->returnValue('https://github.com/composer/composer'));
|
->will($this->returnValue('https://github.com/composer/composer'));
|
||||||
|
$packageMock->expects($this->any())
|
||||||
|
->method('getPrettyVersion')
|
||||||
|
->will($this->returnValue('1.0.0'));
|
||||||
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
$processExecutor = $this->getMock('Composer\Util\ProcessExecutor');
|
||||||
$processExecutor->expects($this->at(0))
|
$processExecutor->expects($this->at(0))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
|
@ -173,6 +187,10 @@ class GitDownloaderTest extends \PHPUnit_Framework_TestCase
|
||||||
->with($this->equalTo($expectedGitUpdateCommand))
|
->with($this->equalTo($expectedGitUpdateCommand))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
$processExecutor->expects($this->at(3))
|
$processExecutor->expects($this->at(3))
|
||||||
|
->method('execute')
|
||||||
|
->with($this->equalTo('git branch -r'))
|
||||||
|
->will($this->returnValue(0));
|
||||||
|
$processExecutor->expects($this->at(4))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($this->getCmd("git checkout 'ref' && git reset --hard 'ref'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
->with($this->equalTo($this->getCmd("git checkout 'ref' && git reset --hard 'ref'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
Loading…
Reference in New Issue