2022-04-01 15:13:22 +00:00
|
|
|
<?php declare(strict_types=1);
|
|
|
|
|
|
|
|
namespace Composer\Test\Repository\Vcs;
|
|
|
|
|
|
|
|
use Composer\Config;
|
|
|
|
use Composer\IO\IOInterface;
|
|
|
|
use Composer\Repository\Vcs\GitDriver;
|
|
|
|
use Composer\Test\TestCase;
|
|
|
|
use Composer\Util\Filesystem;
|
|
|
|
use Composer\Util\Platform;
|
|
|
|
|
|
|
|
class GitDriverTest extends TestCase
|
|
|
|
{
|
|
|
|
/** @var Config */
|
|
|
|
private $config;
|
|
|
|
/** @var string */
|
|
|
|
private $home;
|
|
|
|
/** @var false|string */
|
|
|
|
private $networkEnv;
|
|
|
|
|
|
|
|
public function setUp(): void
|
|
|
|
{
|
|
|
|
$this->home = self::getUniqueTmpDirectory();
|
|
|
|
$this->config = new Config();
|
|
|
|
$this->config->merge([
|
|
|
|
'config' => [
|
|
|
|
'home' => $this->home,
|
|
|
|
],
|
|
|
|
]);
|
|
|
|
$this->networkEnv = Platform::getEnv('COMPOSER_DISABLE_NETWORK');
|
|
|
|
}
|
|
|
|
|
|
|
|
protected function tearDown(): void
|
|
|
|
{
|
|
|
|
parent::tearDown();
|
|
|
|
$fs = new Filesystem;
|
|
|
|
$fs->removeDirectory($this->home);
|
|
|
|
if ($this->networkEnv === false) {
|
|
|
|
Platform::clearEnv('COMPOSER_DISABLE_NETWORK');
|
|
|
|
} else {
|
|
|
|
Platform::putEnv('COMPOSER_DISABLE_NETWORK', $this->networkEnv);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2022-04-13 10:11:25 +00:00
|
|
|
public function testGetRootIdentifierFromRemoteLocalRepository(): void
|
|
|
|
{
|
|
|
|
$process = $this->getProcessExecutorMock();
|
|
|
|
$io = $this->getMockBuilder(IOInterface::class)->getMock();
|
|
|
|
|
|
|
|
$driver = new GitDriver(['url' => $this->home], $io, $this->config, $this->getHttpDownloaderMock(), $process);
|
|
|
|
$this->setRepoDir($driver, $this->home);
|
|
|
|
|
|
|
|
$stdoutFailure = <<<GITFAILURE
|
|
|
|
fatal: could not read Username for 'https://example.org/acme.git': terminal prompts disabled
|
|
|
|
GITFAILURE;
|
|
|
|
|
|
|
|
$stdout = <<<GIT
|
|
|
|
* main
|
|
|
|
2.2
|
|
|
|
1.10
|
|
|
|
GIT;
|
|
|
|
|
|
|
|
$process
|
|
|
|
->expects([[
|
|
|
|
'cmd' => 'git remote show origin',
|
|
|
|
'stdout' => $stdoutFailure,
|
|
|
|
], [
|
|
|
|
'cmd' => 'git branch --no-color',
|
|
|
|
'stdout' => $stdout,
|
|
|
|
]]);
|
|
|
|
|
|
|
|
$this->assertSame('main', $driver->getRootIdentifier());
|
|
|
|
}
|
|
|
|
|
2022-04-01 15:13:22 +00:00
|
|
|
public function testGetRootIdentifierFromRemote(): void
|
|
|
|
{
|
|
|
|
$process = $this->getProcessExecutorMock();
|
|
|
|
$io = $this->getMockBuilder(IOInterface::class)->getMock();
|
|
|
|
|
|
|
|
$driver = new GitDriver(['url' => 'https://example.org/acme.git'], $io, $this->config, $this->getHttpDownloaderMock(), $process);
|
2022-04-13 10:11:25 +00:00
|
|
|
$this->setRepoDir($driver, $this->home);
|
2022-04-01 15:13:22 +00:00
|
|
|
|
|
|
|
$stdout = <<<GIT
|
|
|
|
* remote origin
|
|
|
|
Fetch URL: https://example.org/acme.git
|
|
|
|
Push URL: https://example.org/acme.git
|
|
|
|
HEAD branch: main
|
|
|
|
Remote branches:
|
|
|
|
1.10 tracked
|
|
|
|
2.2 tracked
|
|
|
|
main tracked
|
|
|
|
GIT;
|
|
|
|
|
|
|
|
$process
|
|
|
|
->expects([[
|
2022-04-13 10:11:25 +00:00
|
|
|
'cmd' => 'git remote -v',
|
|
|
|
'stdout' => '',
|
|
|
|
],[
|
|
|
|
'cmd' => "git remote set-url origin -- 'https://example.org/acme.git' && git remote show origin && git remote set-url origin -- 'https://example.org/acme.git'",
|
2022-04-01 15:13:22 +00:00
|
|
|
'stdout' => $stdout,
|
|
|
|
]]);
|
|
|
|
|
|
|
|
$this->assertSame('main', $driver->getRootIdentifier());
|
|
|
|
}
|
|
|
|
|
|
|
|
public function testGetRootIdentifierFromLocalWithNetworkDisabled(): void
|
|
|
|
{
|
|
|
|
Platform::putEnv('COMPOSER_DISABLE_NETWORK', '1');
|
|
|
|
|
|
|
|
$process = $this->getProcessExecutorMock();
|
|
|
|
$io = $this->getMockBuilder(IOInterface::class)->getMock();
|
|
|
|
|
|
|
|
$driver = new GitDriver(['url' => 'https://example.org/acme.git'], $io, $this->config, $this->getHttpDownloaderMock(), $process);
|
2022-04-13 10:11:25 +00:00
|
|
|
$this->setRepoDir($driver, $this->home);
|
2022-04-01 15:13:22 +00:00
|
|
|
|
|
|
|
$stdout = <<<GIT
|
|
|
|
* main
|
|
|
|
2.2
|
|
|
|
1.10
|
|
|
|
GIT;
|
|
|
|
|
|
|
|
$process
|
|
|
|
->expects([[
|
|
|
|
'cmd' => 'git branch --no-color',
|
|
|
|
'stdout' => $stdout,
|
|
|
|
]]);
|
|
|
|
|
|
|
|
$this->assertSame('main', $driver->getRootIdentifier());
|
|
|
|
}
|
2022-04-13 10:11:25 +00:00
|
|
|
|
|
|
|
private function setRepoDir(GitDriver $driver, string $path): void
|
|
|
|
{
|
|
|
|
$reflectionClass = new \ReflectionClass($driver);
|
|
|
|
$reflectionProperty = $reflectionClass->getProperty('repoDir');
|
|
|
|
$reflectionProperty->setAccessible(true);
|
|
|
|
$reflectionProperty->setValue($driver, $path);
|
|
|
|
}
|
2022-04-01 15:13:22 +00:00
|
|
|
}
|