diff --git a/src/Composer/Package/Loader/ValidatingArrayLoader.php b/src/Composer/Package/Loader/ValidatingArrayLoader.php index 13e0f7590..e60801d91 100644 --- a/src/Composer/Package/Loader/ValidatingArrayLoader.php +++ b/src/Composer/Package/Loader/ValidatingArrayLoader.php @@ -151,6 +151,7 @@ class ValidatingArrayLoader implements LoaderInterface } $unboundConstraint = new Constraint('=', $this->versionParser->normalize('dev-master')); + $stableConstraint = new Constraint('=', '1.0.0'); foreach (array_keys(BasePackage::$supportedLinkTypes) as $linkType) { if ($this->validateArray($linkType) && isset($this->config[$linkType])) { @@ -183,6 +184,7 @@ class ValidatingArrayLoader implements LoaderInterface ($this->flags & self::CHECK_STRICT_CONSTRAINTS) && 'require' === $linkType && substr($linkConstraint, 0, 1) === '=' + && $stableConstraint->versionCompare($stableConstraint, $linkConstraint, '<=') ) { $this->warnings[] = $linkType.'.'.$package.' : exact version constraints ('.$constraint.') should be avoided if the package follows semantic versioning'; } diff --git a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php index 4654fc4fc..5af956fe4 100644 --- a/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php +++ b/tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php @@ -326,6 +326,18 @@ class ValidatingArrayLoaderTest extends \PHPUnit_Framework_TestCase ), false, ), + array( + array( + 'name' => 'foo/bar', + 'require' => array( + 'bar/unstable' => '0.3.0', + ), + ), + array( + // using an exact version constraint for an unstable version should not trigger a warning + ), + false, + ), array( array( 'name' => 'foo/bar',