1
0
Fork 0

Store default branch info inside metadata

pull/8993/head
Jordi Boggiano 2020-06-17 16:09:38 +02:00
parent da572f1fdc
commit 472a62152d
No known key found for this signature in database
GPG Key ID: 7BBD42C429EC80BC
6 changed files with 57 additions and 1 deletions

View File

@ -392,6 +392,11 @@ class AliasPackage extends BasePackage implements CompletePackageInterface
return $this->aliasOf->getArchiveExcludes(); return $this->aliasOf->getArchiveExcludes();
} }
public function isDefaultBranch()
{
return $this->aliasOf->isDefaultBranch();
}
public function isAbandoned() public function isAbandoned()
{ {
return $this->aliasOf->isAbandoned(); return $this->aliasOf->isAbandoned();

View File

@ -92,6 +92,10 @@ class ArrayDumper
$data['time'] = $package->getReleaseDate()->format(DATE_RFC3339); $data['time'] = $package->getReleaseDate()->format(DATE_RFC3339);
} }
if ($package->isDefaultBranch()) {
$data['default_branch'] = true;
}
$data = $this->dumpValues($package, $keys, $data); $data = $this->dumpValues($package, $keys, $data);
if ($package instanceof CompletePackageInterface) { if ($package instanceof CompletePackageInterface) {

View File

@ -53,6 +53,9 @@ class ArrayLoader implements LoaderInterface
} else { } else {
$version = $this->versionParser->normalize($config['version']); $version = $this->versionParser->normalize($config['version']);
} }
if (isset($config['default_branch']) && $config['default_branch'] === true) {
$version = '9999999-dev';
}
$package = new $class($config['name'], $version, $config['version']); $package = new $class($config['name'], $version, $config['version']);
$package->setType(isset($config['type']) ? strtolower($config['type']) : 'library'); $package->setType(isset($config['type']) ? strtolower($config['type']) : 'library');
@ -75,6 +78,10 @@ class ArrayLoader implements LoaderInterface
$package->setInstallationSource($config['installation-source']); $package->setInstallationSource($config['installation-source']);
} }
if (isset($config['default_branch']) && $config['default_branch'] === true) {
$package->setIsDefaultBranch(true);
}
if (isset($config['source'])) { if (isset($config['source'])) {
if (!isset($config['source']['type']) || !isset($config['source']['url']) || !isset($config['source']['reference'])) { if (!isset($config['source']['type']) || !isset($config['source']['url']) || !isset($config['source']['reference'])) {
throw new \UnexpectedValueException(sprintf( throw new \UnexpectedValueException(sprintf(

View File

@ -58,6 +58,7 @@ class Package extends BasePackage
protected $devAutoload = array(); protected $devAutoload = array();
protected $includePaths = array(); protected $includePaths = array();
protected $archiveExcludes = array(); protected $archiveExcludes = array();
protected $isDefaultBranch = false;
/** /**
* Creates a new in memory package. * Creates a new in memory package.
@ -569,6 +570,22 @@ class Package extends BasePackage
return $this->archiveExcludes; return $this->archiveExcludes;
} }
/**
* @param bool $defaultBranch
*/
public function setIsDefaultBranch($defaultBranch)
{
$this->isDefaultBranch = $defaultBranch;
}
/**
* {@inheritDoc}
*/
public function isDefaultBranch()
{
return $this->isDefaultBranch;
}
/** /**
* Replaces current version and pretty version with passed values. * Replaces current version and pretty version with passed values.
* It also sets stability. * It also sets stability.

View File

@ -352,6 +352,11 @@ interface PackageInterface
*/ */
public function getArchiveExcludes(); public function getArchiveExcludes();
/**
* @return bool
*/
public function isDefaultBranch();
/** /**
* Returns a list of options to download package dist files * Returns a list of options to download package dist files
* *

View File

@ -149,8 +149,10 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
$this->loader = new ArrayLoader($this->versionParser); $this->loader = new ArrayLoader($this->versionParser);
} }
$hasRootIdentifierComposerJson = false;
try { try {
if ($driver->hasComposerFile($driver->getRootIdentifier())) { $hasRootIdentifierComposerJson = $driver->hasComposerFile($driver->getRootIdentifier());
if ($hasRootIdentifierComposerJson) {
$data = $driver->getComposerInformation($driver->getRootIdentifier()); $data = $driver->getComposerInformation($driver->getRootIdentifier());
$this->packageName = !empty($data['name']) ? $data['name'] : null; $this->packageName = !empty($data['name']) ? $data['name'] : null;
} }
@ -211,6 +213,9 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
$data['version'] = preg_replace('{[.-]?dev$}i', '', $data['version']); $data['version'] = preg_replace('{[.-]?dev$}i', '', $data['version']);
$data['version_normalized'] = preg_replace('{(^dev-|[.-]?dev$)}i', '', $data['version_normalized']); $data['version_normalized'] = preg_replace('{(^dev-|[.-]?dev$)}i', '', $data['version_normalized']);
// make sure tag do not contain the default_branch marker
unset($data['default_branch']);
// broken package, version doesn't match tag // broken package, version doesn't match tag
if ($data['version_normalized'] !== $parsedTag) { if ($data['version_normalized'] !== $parsedTag) {
if ($isVeryVerbose) { if ($isVeryVerbose) {
@ -251,6 +256,11 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
} }
$branches = $driver->getBranches(); $branches = $driver->getBranches();
// make sure the root identifier branch gets loaded first
if ($hasRootIdentifierComposerJson && isset($branches[$driver->getRootIdentifier()])) {
$branches = array($driver->getRootIdentifier() => $branches[$driver->getRootIdentifier()]) + $branches;
}
foreach ($branches as $branch => $identifier) { foreach ($branches as $branch => $identifier) {
$msg = 'Reading composer.json of <info>' . ($this->packageName ?: $this->url) . '</info> (<comment>' . $branch . '</comment>)'; $msg = 'Reading composer.json of <info>' . ($this->packageName ?: $this->url) . '</info> (<comment>' . $branch . '</comment>)';
if ($isVeryVerbose) { if ($isVeryVerbose) {
@ -280,6 +290,9 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
$prefix = substr($branch, 0, 1) === 'v' ? 'v' : ''; $prefix = substr($branch, 0, 1) === 'v' ? 'v' : '';
$version = $prefix . preg_replace('{(\.9{7})+}', '.x', $parsedBranch); $version = $prefix . preg_replace('{(\.9{7})+}', '.x', $parsedBranch);
} }
if ($driver->getRootIdentifier() === $branch) {
$parsedBranch = '9999999-dev';
}
$cachedPackage = $this->getCachedPackageVersion($version, $identifier, $isVerbose, $isVeryVerbose); $cachedPackage = $this->getCachedPackageVersion($version, $identifier, $isVerbose, $isVeryVerbose);
if ($cachedPackage) { if ($cachedPackage) {
@ -305,6 +318,11 @@ class VcsRepository extends ArrayRepository implements ConfigurableRepositoryInt
$data['version'] = $version; $data['version'] = $version;
$data['version_normalized'] = $parsedBranch; $data['version_normalized'] = $parsedBranch;
unset($data['default_branch']);
if ($driver->getRootIdentifier() === $branch) {
$data['default_branch'] = true;
}
if ($isVeryVerbose) { if ($isVeryVerbose) {
$this->io->writeError('Importing branch '.$branch.' ('.$data['version'].')'); $this->io->writeError('Importing branch '.$branch.' ('.$data['version'].')');
} }