Browse Source

Refactor wildcard matching to use manipulateVersionString

Sam Minnee 12 years ago
parent
commit
b25457a8c1
1 changed files with 16 additions and 25 deletions
  1. 16 25
      src/Composer/Package/Version/VersionParser.php

+ 16 - 25
src/Composer/Package/Version/VersionParser.php

@@ -317,33 +317,21 @@ class VersionParser
 
 
         // match wildcard constraints
         // match wildcard constraints
         if (preg_match('{^(\d+)(?:\.(\d+))?(?:\.(\d+))?\.[x*]$}', $constraint, $matches)) {
         if (preg_match('{^(\d+)(?:\.(\d+))?(?:\.(\d+))?\.[x*]$}', $constraint, $matches)) {
-            if (isset($matches[3])) {
-                $highVersion = $matches[1] . '.' . $matches[2] . '.' . $matches[3] . '.9999999';
-                if ($matches[3] === '0') {
-                    $lowVersion = $matches[1] . '.' . ($matches[2] - 1) . '.9999999.9999999';
-                } else {
-                    $lowVersion = $matches[1] . '.' . $matches[2] . '.' . ($matches[3] - 1). '.9999999';
-                }
-            } elseif (isset($matches[2])) {
-                $highVersion = $matches[1] . '.' . $matches[2] . '.9999999.9999999';
-                if ($matches[2] === '0') {
-                    $lowVersion = ($matches[1] - 1) . '.9999999.9999999.9999999';
-                } else {
-                    $lowVersion = $matches[1] . '.' . ($matches[2] - 1) . '.9999999.9999999';
-                }
+            if (isset($matches[3]) && '' !== $matches[3]) $position = 3;
+            else if (isset($matches[2]) && '' !== $matches[2]) $position = 2;
+            else $position = 1;
+
+            $highVersion = $this->manipulateVersionString($matches,$position,0,'9999999');
+            $lowVersion = $this->manipulateVersionString($matches,$position,-1,'9999999');
+
+            if($lowVersion === null) {
+                return array(new VersionConstraint('<', $highVersion));
             } else {
             } else {
-                $highVersion = $matches[1] . '.9999999.9999999.9999999';
-                if ($matches[1] === '0') {
-                    return array(new VersionConstraint('<', $highVersion));
-                } else {
-                    $lowVersion = ($matches[1] - 1) . '.9999999.9999999.9999999';
-                }
+                return array(
+                    new VersionConstraint('>', $lowVersion),
+                    new VersionConstraint('<', $highVersion),
+                );
             }
             }
-
-            return array(
-                new VersionConstraint('>', $lowVersion),
-                new VersionConstraint('<', $highVersion),
-            );
         }
         }
 
 
         // match operators constraints
         // match operators constraints
@@ -392,6 +380,9 @@ class VersionParser
                 if($matches[$i] < 0) {
                 if($matches[$i] < 0) {
                     $matches[$i] = $pad;
                     $matches[$i] = $pad;
                     $position--;
                     $position--;
+
+                    // Return null on a carry overflow
+                    if($i == 1) return null;
                 }
                 }
             }
             }
         }
         }