Get rid of default branch handling in version guesser as it is way too time intensive at every initialization

main
Jordi Boggiano 4 years ago
parent 05eec0b02f
commit 74d89d7110
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC

@ -110,11 +110,6 @@ class RootPackageLoader extends ArrayLoader
}
}
$defaultBranch = $this->versionGuesser->getDefaultBranchName($cwd ?: getcwd());
if ($defaultBranch && $config['version'] === 'dev-'.$defaultBranch) {
$config['default-branch'] = true;
}
$realPackage = $package = parent::load($config, $class);
if ($realPackage instanceof AliasPackage) {
$realPackage = $package->getAliasOf();

@ -111,43 +111,6 @@ class VersionGuesser
return $versionData;
}
/**
* Tries to find name of default branch from VCS info
*
* @param string $path Path to guess into
*/
public function getDefaultBranchName($path)
{
if (version_compare(GitUtil::getVersion($this->process), '2.3.0-rc0', '>=')) {
GitUtil::cleanEnv();
$oldVal = getenv('GIT_SSH_COMMAND');
putenv("GIT_SSH_COMMAND=ssh".(Platform::isWindows() ? '.exe' : '')." -o StrictHostKeyChecking=yes");
$hasGitRemote = 0 === $this->process->execute('git remote show origin', $output, $path);
if ($oldVal) {
putenv("GIT_SSH_COMMAND=$oldVal");
} else {
putenv("GIT_SSH_COMMAND");
}
if ($hasGitRemote && preg_match('{^ HEAD branch: (.+)$}m', $output, $match)) {
return trim($match[1]);
}
}
if (is_dir($path.'/.git')) {
return 'master';
}
if (is_dir($path.'/.hg')) {
return 'default';
}
if (is_dir($path.'/.svn')) {
return 'trunk';
}
return null;
}
private function guessGitVersion(array $packageConfig, $path)
{
GitUtil::cleanEnv();
@ -292,11 +255,9 @@ class VersionGuesser
return array('version' => $version, 'pretty_version' => $prettyVersion);
}
$defaultBranch = $this->getDefaultBranchName($path);
foreach ($branches as $candidate) {
// do not compare against itself or other feature branches
if ($candidate === $branch || !preg_match('{^(' . $nonFeatureBranches . ($defaultBranch ? '|'.preg_quote($defaultBranch) : '').'|master|main|latest|next|current|support|tip|trunk|default|develop|\d+\..+)$}', $candidate, $match)) {
if ($candidate === $branch || !preg_match('{^(' . $nonFeatureBranches . '|master|main|latest|next|current|support|tip|trunk|default|develop|\d+\..+)$}', $candidate, $match)) {
continue;
}

@ -24,10 +24,4 @@ class VersionGuesserMock extends VersionGuesser
{
return null;
}
public function getDefaultBranchName($path)
{
return null;
}
}

@ -105,8 +105,6 @@ class RootPackageLoaderTest extends TestCase
'pretty_version' => '3.0-dev',
'commit' => 'aabbccddee',
));
$versionGuesser->getDefaultBranchName(Argument::cetera())
->willReturn('main');
$config = new Config;
$config->merge(array('repositories' => array('packagist' => false)));
$loader = new RootPackageLoader($manager->reveal(), $config, null, $versionGuesser->reveal());
@ -115,28 +113,6 @@ class RootPackageLoaderTest extends TestCase
$this->assertEquals('3.0-dev', $package->getPrettyVersion());
}
public function testDefaultBranchIsSetForRootPackageInDefaultBranch()
{
// see #6845
$manager = $this->prophesize('\\Composer\\Repository\\RepositoryManager');
$versionGuesser = $this->prophesize('\\Composer\\Package\\Version\\VersionGuesser');
$versionGuesser->guessVersion(Argument::cetera())
->willReturn(array(
'name' => 'A',
'version' => 'dev-main',
'pretty_version' => 'dev-main',
'commit' => 'aabbccddee',
));
$versionGuesser->getDefaultBranchName(Argument::cetera())
->willReturn('main');
$config = new Config;
$config->merge(array('repositories' => array('packagist' => false)));
$loader = new RootPackageLoader($manager->reveal(), $config, null, $versionGuesser->reveal());
$package = $loader->load(array());
$this->assertTrue($package->isDefaultBranch());
}
public function testFeatureBranchPrettyVersion()
{
if (!function_exists('proc_open')) {
@ -171,17 +147,6 @@ class RootPackageLoaderTest extends TestCase
$executor
->expects($this->at(1))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git remote show origin', $command);
$output = " HEAD branch: master";
return 0;
})
;
$executor
->expects($this->at(2))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git rev-list master..latest-production', $command);
$output = "";
@ -195,8 +160,6 @@ class RootPackageLoaderTest extends TestCase
$loader = new RootPackageLoader($manager, $config, null, new VersionGuesser($config, $executor, new VersionParser()));
$package = $loader->load(array('require' => array('foo/bar' => 'self.version')));
$this->assertEquals("9999999-dev", $package->getPrettyVersion());
$package = $package->getAliasOf();
$this->assertEquals("dev-master", $package->getPrettyVersion());
}

@ -135,7 +135,7 @@ class VersionGuesserTest extends TestCase
$this->assertEquals($commitHash, $versionArray['commit']);
}
public function testGuessVersionReadsAndRespectsDefaultBranchAsNonFeatureBranch()
public function testGuessVersionDoesNotSeeCustomDefaultBranchAsNonFeatureBranch()
{
$commitHash = '03a15d220da53c52eddd5f32ffca64a7b3801bea';
$anotherCommitHash = '13a15d220da53c52eddd5f32ffca64a7b3801bea';
@ -149,6 +149,7 @@ class VersionGuesserTest extends TestCase
$self = $this;
// Assumption here is that arbitrary would be the default branch
$executor
->expects($this->at(0))
->method('execute')
@ -160,37 +161,13 @@ class VersionGuesserTest extends TestCase
})
;
$executor
->expects($this->at(1))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git remote show origin', $command);
$output = " HEAD branch: arbitrary\r\n";
return 0;
})
;
$executor
->expects($this->at(2))
->method('execute')
->willReturnCallback(function ($command, &$output, $path) use ($self, $anotherCommitHash) {
$self->assertEquals('git rev-list arbitrary..current', $command);
$output = "$anotherCommitHash\n";
return 0;
})
;
$config = new Config;
$config->merge(array('repositories' => array('packagist' => false)));
$guesser = new VersionGuesser($config, $executor, new VersionParser());
$versionArray = $guesser->guessVersion(array('version' => 'self.version'), 'dummy/path');
$this->assertEquals("dev-arbitrary", $versionArray['version']);
$this->assertEquals("dev-current", $versionArray['version']);
$this->assertEquals($anotherCommitHash, $versionArray['commit']);
$this->assertEquals("dev-current", $versionArray['feature_version']);
$this->assertEquals("dev-current", $versionArray['feature_pretty_version']);
}
public function testGuessVersionReadsAndRespectsNonFeatureBranchesConfigurationForArbitraryNaming()
@ -221,17 +198,6 @@ class VersionGuesserTest extends TestCase
$executor
->expects($this->at(1))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git remote show origin', $command);
$output = " HEAD branch: foo\r\n";
return 0;
})
;
$executor
->expects($this->at(2))
->method('execute')
->willReturnCallback(function ($command, &$output, $path) use ($self, $anotherCommitHash) {
$self->assertEquals('git rev-list arbitrary..current', $command);
$output = "$anotherCommitHash\n";
@ -278,16 +244,6 @@ class VersionGuesserTest extends TestCase
$executor
->expects($this->at(1))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git remote show origin', $command);
$output = " HEAD branch: foo\r\n";
return 0;
})
;
$executor
->expects($this->at(2))
->method('execute')
->willReturnCallback(function ($command, &$output, $path) use ($self, $anotherCommitHash) {
$self->assertEquals('git rev-list latest-testing..current', $command);
$output = "$anotherCommitHash\n";
@ -459,16 +415,6 @@ class VersionGuesserTest extends TestCase
$executor
->expects($this->at(1))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git remote show origin', $command);
$output = " HEAD branch: foo\r\n";
return 0;
})
;
$executor
->expects($this->at(2))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git describe --exact-match --tags', $command);
$output = "v2.0.5-alpha2";
@ -509,16 +455,6 @@ class VersionGuesserTest extends TestCase
$executor
->expects($this->at(1))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git remote show origin', $command);
$output = " HEAD branch: foo\r\n";
return 0;
})
;
$executor
->expects($this->at(2))
->method('execute')
->willReturnCallback(function ($command, &$output) use ($self) {
$self->assertEquals('git describe --exact-match --tags', $command);
$output = '1.0.0';

Loading…
Cancel
Save