=== modified file 'includes/module.inc' --- includes/module.inc 2009-07-28 19:06:15 +0000 +++ includes/module.inc 2009-08-03 18:25:37 +0000 @@ -103,6 +103,7 @@ function _module_build_dependencies($fil $p_major = '(?P\d+)'; // By setting the minor version to x, branches can be matched. $p_minor = '(?P\d+|x)'; + $p_extra = '(?P-[A-Za-z]+\d+)?'; foreach ($files as $filename => $file) { $graph[$file->name]['edges'] = array(); if (isset($file->info['dependencies']) && is_array($file->info['dependencies'])) { @@ -113,17 +114,24 @@ function _module_build_dependencies($fil if (isset($parts[1])) { $value['original_version'] = ' (' . $parts[1]; foreach (explode(',', $parts[1]) as $version) { - if (preg_match("/^\s*$p_op\s*$p_core$p_major\.$p_minor/", $version, $matches)) { + if (preg_match("/^\s*$p_op\s*$p_core$p_major\.$p_minor$p_extra/", $version, $matches)) { + // Load defaults. + $matches += array('extra' => ''); $op = !empty($matches['operation']) ? $matches['operation'] : '='; if ($matches['minor'] == 'x') { - // If a module is newer than 2.x then it's at least 3.0. + // Change the version to a specific version which + // version_compare can work with. The first possible release in + // a branch is .0-unstable0. For example, if a module is > 2.x + // then it's at least 3.0-unstable0. So set the minor to 0, the + // extra to unstable0 and adjust the major version if necessary. $matches['minor'] = 0; + $matches['extra'] = 'unstable0'; if ($op == '>') { $matches['major']++; $op = '>='; } // If a module is older or equivalent than 2.x then it is older - // than 3.0. + // than 3.0-unstable0. if ($op == '<=') { $matches['major']++; $op = '<'; @@ -135,7 +143,7 @@ function _module_build_dependencies($fil } } if ($op) { - $value['versions'][] = array('op' => $op, 'version' => $matches['major'] . '.' . $matches['minor']); + $value['versions'][] = array('op' => $op, 'version' => $matches['major'] . '.' . $matches['minor'] . $matches['extra']); } } } === modified file 'modules/simpletest/tests/system_test.module' --- modules/simpletest/tests/system_test.module 2009-07-28 19:06:15 +0000 +++ modules/simpletest/tests/system_test.module 2009-08-03 18:18:42 +0000 @@ -180,7 +180,7 @@ function system_test_system_info_alter(& } if ($file->name == 'common_test') { $info['hidden'] = FALSE; - $info['version'] = '7.x-2.4'; + $info['version'] = '7.x-2.4-beta3'; } } } === modified file 'modules/system/system.test' --- modules/system/system.test 2009-07-31 11:20:42 +0000 +++ modules/system/system.test 2009-08-03 18:27:28 +0000 @@ -208,7 +208,7 @@ class ModuleVersionTestCase extends Modu 'group' => 'Module', ); } - + function setup() { parent::setUp('module_test'); } @@ -218,7 +218,7 @@ class ModuleVersionTestCase extends Modu */ function testModuleVersions() { $dependencies = array( - // Alternating between being compatible and incompatible with 7.x-2.4. + // Alternating between being compatible and incompatible with 7.x-2.4-beta3. // The first is always a compatible. 'common_test', // Branch incompatibility. @@ -236,11 +236,17 @@ class ModuleVersionTestCase extends Modu // Nonsense, misses a dash. Incompatible with everything. 'common_test (=7.x2.x, >=2.4)', // Core version is optional. Compatible. - 'common_test (=7.x-2.x, >=2.4)', + 'common_test (=7.x-2.x, >=2.4-alpha2)', // Test !=, explicitly incompatible. - 'common_test (=2.x, !=2.4)', + 'common_test (=2.x, !=2.4-beta3)', // Three operations. Compatible. 'common_test (=2.x, !=2.3, <2.5)', + // Testing extra version. Incompatible. + 'common_test (<=2.4-beta2)', + // Testing extra version. Compatible. + 'common_test (>2.4-beta2)', + // Testing extra version. Incompatible. + 'common_test (>2.4-rc0)', ); variable_set('dependencies', $dependencies); $n = count($dependencies);