mirror of
https://github.com/composer/composer
synced 2025-05-10 17:12:51 +00:00
This commit is contained in:
parent
04ab74bbef
commit
50d738eeee
26 changed files with 292 additions and 113 deletions
|
@ -12,11 +12,11 @@
|
|||
|
||||
namespace Composer\DependencyResolver;
|
||||
|
||||
use Composer\Package\Link;
|
||||
use Composer\Package\BasePackage;
|
||||
use Composer\Package\AliasPackage;
|
||||
use Composer\Repository\RepositorySet;
|
||||
use Composer\Package\BasePackage;
|
||||
use Composer\Package\Link;
|
||||
use Composer\Repository\PlatformRepository;
|
||||
use Composer\Repository\RepositorySet;
|
||||
use Composer\Package\Version\VersionParser;
|
||||
use Composer\Semver\Constraint\Constraint;
|
||||
use Composer\Semver\Constraint\ConstraintInterface;
|
||||
|
@ -54,8 +54,8 @@ abstract class Rule
|
|||
protected $reasonData;
|
||||
|
||||
/**
|
||||
* @param self::RULE_* $reason A RULE_* constant describing the reason for generating this rule
|
||||
* @param Link|BasePackage|ConstraintInterface|string $reasonData
|
||||
* @param self::RULE_* $reason A RULE_* constant describing the reason for generating this rule
|
||||
* @param mixed $reasonData
|
||||
*
|
||||
* @phpstan-param ReasonData $reasonData
|
||||
*/
|
||||
|
@ -68,26 +68,42 @@ abstract class Rule
|
|||
(255 << self::BITFIELD_TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int[]
|
||||
*/
|
||||
abstract public function getLiterals();
|
||||
|
||||
/**
|
||||
* @return int|string
|
||||
*/
|
||||
abstract public function getHash();
|
||||
|
||||
abstract public function __toString();
|
||||
|
||||
/**
|
||||
* @param Rule $rule
|
||||
* @return bool
|
||||
*/
|
||||
abstract public function equals(Rule $rule);
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getReason()
|
||||
{
|
||||
return ($this->bitfield & (255 << self::BITFIELD_REASON)) >> self::BITFIELD_REASON;
|
||||
}
|
||||
|
||||
/**
|
||||
* @phpstan-return ReasonData
|
||||
*/
|
||||
public function getReasonData()
|
||||
{
|
||||
return $this->reasonData;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return ?string
|
||||
* @return string|null
|
||||
*/
|
||||
public function getRequiredPackage()
|
||||
{
|
||||
|
@ -108,38 +124,63 @@ abstract class Rule
|
|||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param 255|RuleSet::TYPE_* $type
|
||||
* @return void
|
||||
*/
|
||||
public function setType($type)
|
||||
{
|
||||
$this->bitfield = ($this->bitfield & ~(255 << self::BITFIELD_TYPE)) | ((255 & $type) << self::BITFIELD_TYPE);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getType()
|
||||
{
|
||||
return ($this->bitfield & (255 << self::BITFIELD_TYPE)) >> self::BITFIELD_TYPE;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function disable()
|
||||
{
|
||||
$this->bitfield = ($this->bitfield & ~(255 << self::BITFIELD_DISABLED)) | (1 << self::BITFIELD_DISABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return void
|
||||
*/
|
||||
public function enable()
|
||||
{
|
||||
$this->bitfield &= ~(255 << self::BITFIELD_DISABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isDisabled()
|
||||
{
|
||||
return (bool) (($this->bitfield & (255 << self::BITFIELD_DISABLED)) >> self::BITFIELD_DISABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isEnabled()
|
||||
{
|
||||
return !(($this->bitfield & (255 << self::BITFIELD_DISABLED)) >> self::BITFIELD_DISABLED);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
abstract public function isAssertion();
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isCausedByLock(RepositorySet $repositorySet, Request $request, Pool $pool)
|
||||
{
|
||||
if ($this->getReason() === self::RULE_PACKAGE_REQUIRES) {
|
||||
|
@ -187,6 +228,12 @@ abstract class Rule
|
|||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $isVerbose
|
||||
* @param BasePackage[] $installedMap
|
||||
* @param array<Rule[]> $learnedPool
|
||||
* @return string
|
||||
*/
|
||||
public function getPrettyString(RepositorySet $repositorySet, Request $request, Pool $pool, $isVerbose, array $installedMap = array(), array $learnedPool = array())
|
||||
{
|
||||
$literals = $this->getLiterals();
|
||||
|
@ -396,12 +443,11 @@ abstract class Rule
|
|||
}
|
||||
|
||||
/**
|
||||
* @param Pool $pool
|
||||
* @param array $packages
|
||||
*
|
||||
* @param array<int|BasePackage> $packages An array containing packages or literals
|
||||
* @param bool $isVerbose
|
||||
* @return string
|
||||
*/
|
||||
protected function formatPackagesUnique($pool, array $packages, $isVerbose)
|
||||
protected function formatPackagesUnique(Pool $pool, array $packages, $isVerbose)
|
||||
{
|
||||
foreach ($packages as $index => $package) {
|
||||
if (!\is_object($package)) {
|
||||
|
@ -412,6 +458,9 @@ abstract class Rule
|
|||
return Problem::getPackageList($packages, $isVerbose);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return BasePackage
|
||||
*/
|
||||
private function deduplicateDefaultBranchAlias(BasePackage $package)
|
||||
{
|
||||
if ($package instanceof AliasPackage && $package->getPrettyVersion() === VersionParser::DEFAULT_BRANCH_ALIAS) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue