Skip to content

Commit

Permalink
Handle composer versions without composer/semver enabled
Browse files Browse the repository at this point in the history
  • Loading branch information
soullivaneuh committed Oct 6, 2015
1 parent 0193a87 commit d0a0c39
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 4 deletions.
13 changes: 11 additions & 2 deletions .travis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@ matrix:
include:
- php: 5.3
env: COMPOSER_FLAGS="--prefer-lowest"
# Special case for https://github.com/Soullivaneuh/composer-versions-check/issues/8
- php: 5.6
env: WITHOUT_SEMVER=1
allow_failures:
- php: nightly
- php: hhvm
Expand All @@ -29,14 +32,20 @@ cache:
directories:
- $HOME/.composer/cache/files

before_script:
before_install:
- composer selfupdate
- composer config -g github-oauth.github.com $GITHUB_OAUTH_TOKEN
- composer global require phpunit/phpunit:^4.8 --no-update
- composer global update --prefer-dist --no-interaction
- if [ "$PHP_CS_FIXER_VERSION" != "" ]; then composer require "fabpot/php-cs-fixer:${PHP_CS_FIXER_VERSION}" --no-update; fi;
- if [ "$WITHOUT_SEMVER" = 1 ]; then composer require "composer/composer:dev-master#013a748" --no-update; fi;

install:
- composer global update --prefer-dist --no-interaction
- composer update --prefer-dist --no-interaction $COMPOSER_FLAGS

before_script:
- if [ "$WITHOUT_SEMVER" = 1 ]; then rm -rf vendor/composer/semver; fi;

script: make test

after_script:
Expand Down
36 changes: 34 additions & 2 deletions src/VersionsCheck.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

namespace SLLH\ComposerVersionsCheck;

use Composer\Package\LinkConstraint\VersionConstraint;
use Composer\Package\PackageInterface;
use Composer\Package\RootPackageInterface;
use Composer\Repository\ArrayRepository;
Expand All @@ -19,6 +20,11 @@ final class VersionsCheck
*/
private $outdatedPackages = array();

/**
* @var VersionConstraint|null
*/
private $oldComparator = null;

/**
* @param ArrayRepository $distRepository
* @param WritableRepositoryInterface $localRepository
Expand All @@ -30,8 +36,14 @@ public function checkPackages(ArrayRepository $distRepository, WritableRepositor
/** @var PackageInterface[] $packages */
$packages = $localRepository->getPackages();
foreach ($packages as $package) {
// Old composer versions BC
$versionConstraint = class_exists('Composer\Semver\Constraint\Constraint')
? new Constraint('>', $package->getVersion())
: new VersionConstraint('>', $package->getVersion())
;

/** @var PackageInterface[] $higherPackages */
$higherPackages = $distRepository->findPackages($package->getName(), new Constraint('>', $package->getVersion()));
$higherPackages = $distRepository->findPackages($package->getName(), $versionConstraint);
// Remove not stable packages if unwanted
if (true === $rootPackage->getPreferStable()) {
$higherPackages = array_filter($higherPackages, function (PackageInterface $package) {
Expand All @@ -41,7 +53,7 @@ public function checkPackages(ArrayRepository $distRepository, WritableRepositor
if (count($higherPackages) > 0) {
// Sort packages by highest version to lowest
usort($higherPackages, function (PackageInterface $p1, PackageInterface $p2) {
return Comparator::lessThan($p1->getVersion(), $p2->getVersion());
return $this->versionCompare($p1->getVersion(), '<', $p2->getVersion());
});
// Push actual and last package on outdated array
array_push($this->outdatedPackages, new OutdatedPackage($package, $higherPackages[0]));
Expand Down Expand Up @@ -81,4 +93,24 @@ private function createNotUpToDateOutput(array &$output)

$output[] = '';
}

/**
* Version comparator bridge to handle BC with old composer versions.
*
* @param string $version1
* @param string $operator
* @param string $version2
*
* @return bool
*/
private function versionCompare($version1, $operator, $version2)
{
if (!class_exists('Composer\Semver\Comparator')) {
$this->oldComparator = $this->oldComparator ?: new VersionConstraint('==', '1.0');

return $this->oldComparator->versionCompare($version1, $version2, $operator);
}

return Comparator::compare($version1, $operator, $version2);
}
}

0 comments on commit d0a0c39

Please sign in to comment.