Эх сурвалжийг харах

Ignore references when parsing dev versions

Jordi Boggiano 13 жил өмнө
parent
commit
c10eb66ac4

+ 6 - 0
src/Composer/Package/Version/VersionParser.php

@@ -33,6 +33,8 @@ class VersionParser
      */
      */
     static public function parseStability($version)
     static public function parseStability($version)
     {
     {
+        $version = preg_replace('{#[a-f0-9]+$}i', '', $version);
+
         if ('dev-' === substr($version, 0, 4) || '-dev' === substr($version, -4)) {
         if ('dev-' === substr($version, 0, 4) || '-dev' === substr($version, -4)) {
             return 'dev';
             return 'dev';
         }
         }
@@ -155,6 +157,10 @@ class VersionParser
             $constraints = empty($match[1]) ? '*' : $match[1];
             $constraints = empty($match[1]) ? '*' : $match[1];
         }
         }
 
 
+        if (preg_match('{^(dev-[^,\s@]+?|[^,\s@]+?\.x-dev)#[a-f0-9]+$}i', $constraints, $match)) {
+            $constraints = $match[1];
+        }
+
         $constraints = preg_split('{\s*,\s*}', trim($constraints));
         $constraints = preg_split('{\s*,\s*}', trim($constraints));
 
 
         if (count($constraints) > 1) {
         if (count($constraints) > 1) {

+ 16 - 0
tests/Composer/Test/Package/Version/VersionParserTest.php

@@ -112,6 +112,21 @@ class VersionParserTest extends \PHPUnit_Framework_TestCase
         $this->assertSame((string) new VersionConstraint('=', '1.0.0.0'), (string) $parser->parseConstraints('1.0@dev'));
         $this->assertSame((string) new VersionConstraint('=', '1.0.0.0'), (string) $parser->parseConstraints('1.0@dev'));
     }
     }
 
 
+    public function testParseConstraintsIgnoresReferenceOnDevVersion()
+    {
+        $parser = new VersionParser;
+        $this->assertSame((string) new VersionConstraint('=', '1.0.9999999.9999999-dev'), (string) $parser->parseConstraints('1.0.x-dev#abcd123'));
+    }
+
+    /**
+     * @expectedException UnexpectedValueException
+     */
+    public function testParseConstraintsFailsOnBadReference()
+    {
+        $parser = new VersionParser;
+        $this->assertSame((string) new VersionConstraint('=', '1.0.0.0'), (string) $parser->parseConstraints('1.0#abcd123'));
+    }
+
     /**
     /**
      * @dataProvider simpleConstraints
      * @dataProvider simpleConstraints
      */
      */
@@ -213,6 +228,7 @@ class VersionParserTest extends \PHPUnit_Framework_TestCase
         return array(
         return array(
             array('stable', '1.0'),
             array('stable', '1.0'),
             array('dev',    'v2.0.x-dev'),
             array('dev',    'v2.0.x-dev'),
+            array('dev',    'v2.0.x-dev#abc123'),
             array('RC',     '3.0-RC2'),
             array('RC',     '3.0-RC2'),
             array('dev',    'dev-master'),
             array('dev',    'dev-master'),
             array('dev',    '3.1.2-dev'),
             array('dev',    '3.1.2-dev'),