소스 검색

Merge pull request #5343 from localheinz/fix/unstable

Fix: Do not suggest to avoid exact version constraints for unstable package
Jordi Boggiano 9 년 전
부모
커밋
32c3429c30
2개의 변경된 파일14개의 추가작업 그리고 0개의 파일을 삭제
  1. 2 0
      src/Composer/Package/Loader/ValidatingArrayLoader.php
  2. 12 0
      tests/Composer/Test/Package/Loader/ValidatingArrayLoaderTest.php

+ 2 - 0
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';
                         }

+ 12 - 0
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',