Commit e758e304 authored by webchick's avatar webchick
Browse files

#533584 by chx, dww, and Nick Lewis: Allow version-level dependency support to...

#533584 by chx, dww, and Nick Lewis: Allow version-level dependency support to work with beta, rc, etc.
parent 69169330
...@@ -102,7 +102,7 @@ function _module_build_dependencies($files) { ...@@ -102,7 +102,7 @@ function _module_build_dependencies($files) {
$p_core = '(?:' . preg_quote(DRUPAL_CORE_COMPATIBILITY) . '-)?'; $p_core = '(?:' . preg_quote(DRUPAL_CORE_COMPATIBILITY) . '-)?';
$p_major = '(?P<major>\d+)'; $p_major = '(?P<major>\d+)';
// By setting the minor version to x, branches can be matched. // By setting the minor version to x, branches can be matched.
$p_minor = '(?P<minor>\d+|x)'; $p_minor = '(?P<minor>(?:\d+|x)(?:-[A-Za-z]+\d+)?)';
foreach ($files as $filename => $file) { foreach ($files as $filename => $file) {
$graph[$file->name]['edges'] = array(); $graph[$file->name]['edges'] = array();
if (isset($file->info['dependencies']) && is_array($file->info['dependencies'])) { if (isset($file->info['dependencies']) && is_array($file->info['dependencies'])) {
...@@ -116,17 +116,14 @@ function _module_build_dependencies($files) { ...@@ -116,17 +116,14 @@ function _module_build_dependencies($files) {
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/", $version, $matches)) {
$op = !empty($matches['operation']) ? $matches['operation'] : '='; $op = !empty($matches['operation']) ? $matches['operation'] : '=';
if ($matches['minor'] == 'x') { if ($matches['minor'] == 'x') {
// If a module is newer than 2.x then it's at least 3.0. // Drupal considers "2.x" to mean any version that begins with
$matches['minor'] = 0; // "2" (e.g. 2.0, 2.9 are all "2.x"). PHP's version_compare(),
if ($op == '>') { // on the other hand, treats "x" as a string; so to
// version_compare(), "2.x" is considered less than 2.0. This
// means that >=2.x and <2.x are handled by version_compare()
// as we need, but > and <= are not.
if ($op == '>' || $op == '<=') {
$matches['major']++; $matches['major']++;
$op = '>=';
}
// If a module is older or equivalent than 2.x then it is older
// than 3.0.
if ($op == '<=') {
$matches['major']++;
$op = '<';
} }
// Equivalence is checked by preg. // Equivalence is checked by preg.
if ($op == '=' || $op == '==') { if ($op == '=' || $op == '==') {
......
...@@ -180,7 +180,7 @@ function system_test_system_info_alter(&$info, $file) { ...@@ -180,7 +180,7 @@ function system_test_system_info_alter(&$info, $file) {
} }
if ($file->name == 'common_test') { if ($file->name == 'common_test') {
$info['hidden'] = FALSE; $info['hidden'] = FALSE;
$info['version'] = '7.x-2.4'; $info['version'] = '7.x-2.4-beta3';
} }
} }
} }
......
...@@ -218,7 +218,7 @@ class ModuleVersionTestCase extends ModuleTestCase { ...@@ -218,7 +218,7 @@ class ModuleVersionTestCase extends ModuleTestCase {
*/ */
function testModuleVersions() { function testModuleVersions() {
$dependencies = array( $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. // The first is always a compatible.
'common_test', 'common_test',
// Branch incompatibility. // Branch incompatibility.
...@@ -236,11 +236,17 @@ class ModuleVersionTestCase extends ModuleTestCase { ...@@ -236,11 +236,17 @@ class ModuleVersionTestCase extends ModuleTestCase {
// Nonsense, misses a dash. Incompatible with everything. // Nonsense, misses a dash. Incompatible with everything.
'common_test (=7.x2.x, >=2.4)', 'common_test (=7.x2.x, >=2.4)',
// Core version is optional. Compatible. // 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. // Test !=, explicitly incompatible.
'common_test (=2.x, !=2.4)', 'common_test (=2.x, !=2.4-beta3)',
// Three operations. Compatible. // Three operations. Compatible.
'common_test (=2.x, !=2.3, <2.5)', '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); variable_set('dependencies', $dependencies);
$n = count($dependencies); $n = count($dependencies);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment