Skip to main content
Drupal API
User account menu
  • Log in

Breadcrumb

  1. Drupal Core 11.1.x
  2. Constraint.php

function Constraint::matchSpecific

Parameters

Constraint $provider:

bool $compareBranches:

Return value

bool

1 call to Constraint::matchSpecific()
Constraint::matches in vendor/composer/semver/src/Constraint/Constraint.php

File

vendor/composer/semver/src/Constraint/Constraint.php, line 314

Class

Constraint
Defines a constraint.

Namespace

Composer\Semver\Constraint

Code

public function matchSpecific(Constraint $provider, $compareBranches = false) {
    $noEqualOp = str_replace('=', '', self::$transOpInt[$this->operator]);
    $providerNoEqualOp = str_replace('=', '', self::$transOpInt[$provider->operator]);
    $isEqualOp = self::OP_EQ === $this->operator;
    $isNonEqualOp = self::OP_NE === $this->operator;
    $isProviderEqualOp = self::OP_EQ === $provider->operator;
    $isProviderNonEqualOp = self::OP_NE === $provider->operator;
    // '!=' operator is match when other operator is not '==' operator or version is not match
    // these kinds of comparisons always have a solution
    if ($isNonEqualOp || $isProviderNonEqualOp) {
        if ($isNonEqualOp && !$isProviderNonEqualOp && !$isProviderEqualOp && strpos($provider->version, 'dev-') === 0) {
            return false;
        }
        if ($isProviderNonEqualOp && !$isNonEqualOp && !$isEqualOp && strpos($this->version, 'dev-') === 0) {
            return false;
        }
        if (!$isEqualOp && !$isProviderEqualOp) {
            return true;
        }
        return $this->versionCompare($provider->version, $this->version, '!=', $compareBranches);
    }
    // an example for the condition is <= 2.0 & < 1.0
    // these kinds of comparisons always have a solution
    if ($this->operator !== self::OP_EQ && $noEqualOp === $providerNoEqualOp) {
        return !(strpos($this->version, 'dev-') === 0 || strpos($provider->version, 'dev-') === 0);
    }
    $version1 = $isEqualOp ? $this->version : $provider->version;
    $version2 = $isEqualOp ? $provider->version : $this->version;
    $operator = $isEqualOp ? $provider->operator : $this->operator;
    if ($this->versionCompare($version1, $version2, self::$transOpInt[$operator], $compareBranches)) {
        // special case, e.g. require >= 1.0 and provide < 1.0
        // 1.0 >= 1.0 but 1.0 is outside of the provided interval
        return !(self::$transOpInt[$provider->operator] === $providerNoEqualOp && self::$transOpInt[$this->operator] !== $noEqualOp && \version_compare($provider->version, $this->version, '=='));
    }
    return false;
}

API Navigation

  • Drupal Core 11.1.x
  • Topics
  • Classes
  • Functions
  • Constants
  • Globals
  • Files
  • Namespaces
  • Deprecated
  • Services
RSS feed
Powered by Drupal