/** * Matches actual version with preset version. * * @param string $actual * @param array $preset * * @return bool */ private function matchVersion($actual, array $preset) { if (!$actual || !array_key_exists('version', $preset)) { return false; } return Semver::satisfies($actual, $preset['version']); }
/** * Return all versions that satisfy given constraints. * * @param array $versions * @param string $constraints * * @return array */ public static function satisfiedBy(array $versions, $constraints) { $versions = array_filter($versions, function ($version) use($constraints) { return Semver::satisfies($version, $constraints); }); return array_values($versions); }
private function matchAllVersionsViaSemver($composerVersion) { $matches = []; foreach ($this->tagsReleasesBranches as $ref) { $matching = $this->semver->satisfies($ref, $composerVersion); if ($matching) { $matches[] = $ref; break; } } return !empty($matches) ? $matches : false; }
public function testCheckRequire() { $rootJson = $this->getJsonFromFile($this->rootComposerJson); $rootRequires = array_merge($rootJson['require'], $rootJson['require-dev'], $rootJson['replace']); foreach (array_merge($this->jsonFiles) as $jsonFile) { $subJson = $this->getJsonFromFile($jsonFile); if (isset($subJson['require'])) { foreach ($subJson['require'] as $subRequireName => $subRequireVersion) { static::assertArrayHasKey($subRequireName, $rootRequires); // root require contains all of sub require package if ($rootRequires[$subRequireName] === 'self.version') { static::assertTrue(Semver::satisfies(Application::VERSION, $subRequireVersion)); // self.version version check } else { static::assertEquals($rootRequires[$subRequireName], $subRequireVersion); } } } } }
/** * Compare two version strings to get the named semantic version. * * @access public * * @param string $new_version * @param string $original_version * @return string $name 'major', 'minor', 'patch' */ function get_named_sem_ver($new_version, $original_version) { if (!Comparator::greaterThan($new_version, $original_version)) { return ''; } $parts = explode('-', $original_version); list($major, $minor, $patch) = explode('.', $parts[0]); if (Semver::satisfies($new_version, "{$major}.{$minor}.x")) { return 'patch'; } else { if (Semver::satisfies($new_version, "{$major}.x.x")) { return 'minor'; } else { return 'major'; } } }
/** * @return array */ public static function getCoverageFileProvider() { $version = 'CodeCoverage >4.0'; $filenames = array('coverage-tests/runner_test.cov', 'coverage-tests/result_printer_test.cov'); $coverageClass = 'SebastianBergmann\\CodeCoverage\\CodeCoverage'; if (class_exists('PHP_CodeCoverage')) { $version = 'Legacy CodeCoverage'; $filenames = array('coverage-tests/runner_test.cov4', 'coverage-tests/result_printer_test.cov4'); $coverageClass = 'PHP_CodeCoverage'; if (Semver::satisfies(static::getPhpUnitVersion(), '3.7.*')) { $version = 'PHPUnit 3.7'; $filenames = array('coverage-tests/runner_test.cov3', 'coverage-tests/result_printer_test.cov3'); } } return array($version => array('filenames' => $filenames, 'expected coverage class' => $coverageClass)); }
public function processNotifications($notifications) { // Sort by date usort($notifications, function ($a, $b) { return strcmp($a->date, $b->date); }); $notifications = array_reverse($notifications); // Make adminNicetimeFilter available require_once __DIR__ . '/../twig/AdminTwigExtension.php'; $adminTwigExtension = new AdminTwigExtension(); $filename = $this->grav['locator']->findResource('user://data/notifications/' . $this->grav['user']->username . YAML_EXT, true, true); $read_notifications = CompiledYamlFile::instance($filename)->content(); $notifications_processed = []; foreach ($notifications as $key => $notification) { $is_valid = true; if (in_array($notification->id, $read_notifications)) { $notification->read = true; } if ($is_valid && isset($notification->permissions) && !$this->authorize($notification->permissions)) { $is_valid = false; } if ($is_valid && isset($notification->dependencies)) { foreach ($notification->dependencies as $dependency => $constraints) { if ($dependency == 'grav') { if (!Semver::satisfies(GRAV_VERSION, $constraints)) { $is_valid = false; } } else { $packages = array_merge($this->plugins()->toArray(), $this->themes()->toArray()); if (!isset($packages[$dependency])) { $is_valid = false; } else { $version = $packages[$dependency]['version']; if (!Semver::satisfies($version, $constraints)) { $is_valid = false; } } } if (!$is_valid) { break; } } } if ($is_valid) { $notifications_processed[] = $notification; } } // Process notifications $notifications_processed = array_map(function ($notification) use($adminTwigExtension) { $notification->date = $adminTwigExtension->adminNicetimeFilter($notification->date); return $notification; }, $notifications_processed); return $notifications_processed; }
protected function getVersionStyle(PackageInterface $latestPackage, PackageInterface $package) { if ($latestPackage->getFullPrettyVersion() === $package->getFullPrettyVersion()) { // print green as it's up to date return 'info'; } $constraint = $package->getVersion(); if (0 !== strpos($constraint, 'dev-')) { $constraint = '^' . $constraint; } if ($latestPackage->getVersion() && Semver::satisfies($latestPackage->getVersion(), $constraint)) { // print red as it needs an immediate semver-compliant upgrade return 'highlight'; } // print yellow as it needs an upgrade but has potential BC breaks so is not urgent return 'comment'; }
/** * Compare two version strings to get the named semantic version. * * @access public * * @param string $new_version * @param string $original_version * @return string $name 'major', 'minor', 'patch' */ function get_named_sem_ver($new_version, $original_version) { if (!Comparator::greaterThan($new_version, $original_version)) { return ''; } $parts = explode('-', $original_version); $bits = explode('.', $parts[0]); $major = $bits[0]; if (isset($bits[1])) { $minor = $bits[1]; } if (isset($bits[2])) { $patch = $bits[2]; } if (!is_null($minor) && Semver::satisfies($new_version, "{$major}.{$minor}.x")) { return 'patch'; } else { if (Semver::satisfies($new_version, "{$major}.x.x")) { return 'minor'; } else { return 'major'; } } }
/** * Check if the extension is valid for loading, i.e has a class and is withing version constraints. * * @param Composer $composer * @param string|null $class * @param string|null $constraint * * @return bool */ private static function parseValid(Composer $composer, $class, $constraint) { if ($constraint === null) { return false; } $provides = $composer->getPackage()->getProvides(); $boltVersion = isset($provides['bolt/bolt']) ? $provides['bolt/bolt'] : new Link('__root__', 'bolt/bolt', new Constraint('=', '0.0.0')); return $class && Semver::satisfies($boltVersion->getPrettyConstraint(), $constraint); }
* you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ require_once __DIR__ . '/vendor/autoload.php'; use Composer\Semver\Semver; // Available versions in the order we want to check. $available_versions = [getenv('PHP70_VERSION'), getenv('PHP56_VERSION')]; if (count($argv) < 2) { die("Usage:\n" . $argv[0] . " filename\n"); } $composer = json_decode(file_get_contents($argv[1]), true); $php_version = ''; if (is_array($composer) && array_key_exists('require', $composer) && array_key_exists('php', $composer['require'])) { $constraints = $composer['require']['php']; foreach ($available_versions as $version) { if (Semver::satisfies($version, $constraints)) { // The first match wins, picking the highest version possible. $php_version = substr($version, 0, strrpos($version, '.')); break; } } } echo $php_version;
/** * @return array */ public static function getReporterProvider() { $version = 'CodeCoverage >4.0'; $filenames = array('coverage-tests/runner_test.cov', 'coverage-tests/result_printer_test.cov'); $reporterClass = 'ParaTest\\Coverage\\CoverageReporter'; if (class_exists('\\PHP_CodeCoverage')) { $version = 'Legacy CodeCoverage'; $filenames = array('coverage-tests/runner_test.cov4', 'coverage-tests/result_printer_test.cov4'); $reporterClass = 'ParaTest\\Coverage\\CoverageReporterLegacy'; if (Semver::satisfies(static::getPhpUnitVersion(), '3.7.*')) { $version = 'PHPUnit 3.7'; $filenames = array('coverage-tests/runner_test.cov3', 'coverage-tests/result_printer_test.cov3'); } } return array($version => array('filenames' => $filenames, 'expected reporter class' => $reporterClass)); }