Always make sure we are on the right branch
parent
110044c3ea
commit
f752b29fc6
|
@ -174,14 +174,17 @@ class GitDownloader extends VcsDownloader
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// checkout branch by name if the current reference matches the tip of the branch
|
// try to checkout branch by name and then reset it so it's on the proper branch name
|
||||||
if (preg_match('{^[a-f0-9]{40}$}', $reference)
|
if (preg_match('{^[a-f0-9]{40}$}', $reference)) {
|
||||||
&& 0 === $this->process->execute('git log '.escapeshellarg($branch).' -1 --format=format:%H', $output, $path)
|
$command = sprintf('git checkout %s', escapeshellarg($branch));
|
||||||
&& $reference === trim($output)
|
$fallbackCommand = sprintf('git checkout -B %s %s', escapeshellarg($branch), escapeshellarg('composer/'.$branch));
|
||||||
) {
|
if (0 === $this->process->execute($command, $output, $path)
|
||||||
$command = sprintf('git checkout -B %s %s && git reset --hard %2$s', escapeshellarg($branch), escapeshellarg('composer/'.$branch));
|
|| 0 === $this->process->execute($fallbackCommand, $output, $path)
|
||||||
if (0 === $this->process->execute($command, $output, $path)) {
|
) {
|
||||||
return;
|
$command = sprintf('git reset --hard %s', escapeshellarg($reference));
|
||||||
|
if (0 === $this->process->execute($command, $output, $path)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -68,12 +68,12 @@ 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 log 'master' -1 --format=format:%H")), $this->equalTo(null), $this->equalTo('composerPath'))
|
->with($this->equalTo($this->getCmd("git checkout 'master'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$processExecutor->expects($this->at(2))
|
$processExecutor->expects($this->at(2))
|
||||||
->method('execute')
|
->method('execute')
|
||||||
->with($this->equalTo($this->getCmd("git checkout '1234567890123456789012345678901234567890' && git reset --hard '1234567890123456789012345678901234567890'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
->with($this->equalTo($this->getCmd("git reset --hard '1234567890123456789012345678901234567890'")), $this->equalTo(null), $this->equalTo('composerPath'))
|
||||||
->will($this->returnValue(0));
|
->will($this->returnValue(0));
|
||||||
|
|
||||||
$downloader = $this->getDownloaderMock(null, null, $processExecutor);
|
$downloader = $this->getDownloaderMock(null, null, $processExecutor);
|
||||||
|
|
Loading…
Reference in New Issue