diff -u release/project_release.install release/project_release.install --- release/project_release.install 28 Jan 2010 21:33:57 -0000 +++ release/project_release.install 30 Jan 2010 00:20:04 -0000 @@ -631,6 +631,10 @@ /** * Add the {project_release_nodes}.version_extra_delta field. + * + * Also recompute the latest and recommended releases on each branch, and + * therefore the update_status field, since version_extra_delta is needed + * to properly order alpha10 vs. alpha9, etc. */ function project_release_update_6009() { $ret = array('#finished' => 0); @@ -639,11 +643,12 @@ 'type' => 'int', 'not null' => TRUE, 'default' => 0, + 'description' => 'The first span of digits found in version_extra. This is needed because we cannot natural sort natively without a stored procedure.', ); db_add_field($ret, 'project_release_nodes', 'version_extra_delta', $spec); - // Initialize version_extra_delta to -1 to identify the rows we need to process. + // Initialize version_extra_delta to -1 to identify the rows to process. db_query('UPDATE {project_release_nodes} SET version_extra_delta = -1 WHERE version_extra IS NOT NULL'); $_SESSION['project_release_update_6009'] = 0; @@ -662,6 +667,11 @@ db_query('UPDATE {project_release_nodes} SET version_extra_delta = %d WHERE nid = %d', ($nmatch) ? $match[1] : 0, $item['nid']); // Finally, recheck the branch. + // Note: this is ineffecient: we only really need to call this + // once per unique branch we're touching, not for every single + // release, but optimizing this isn't worth the effort, and would + // potentially require an enormous array in $_SESSION that could + // cause its own problems. project_release_check_supported_versions($item['pid'], $item['version_api_tid'], $item['version_major'], FALSE); $_SESSION['project_release_update_6009']++; @@ -680 +690 @@ -} \ No newline at end of file +} diff -u release/project_release.module release/project_release.module --- release/project_release.module 28 Jan 2010 21:33:58 -0000 +++ release/project_release.module 30 Jan 2010 00:20:05 -0000 @@ -1143,6 +1143,12 @@ // Within releases of the same version_extra_weight (e.g. rc1 vs. rc2), // sort by version_extra_delta. $order_bys[] = 'r.version_extra_delta DESC'; + // Within releases of the same version_extra_weight and version_extra_delta, + // sort alphabetically. This shouldn't normally happen, but just in case you + // have multiple releases with the same delta (e.g. "alpha-one", "alpha-two" + // etc), at least you'll get deterministic results. + $order_bys[] = 'r.version_extra DESC'; + $order_by = 'ORDER BY '. implode(', ', $order_bys); $sql = "SELECT n.nid, n.title, n.created, r.* FROM {node} n ". diff -u release/includes/release_node_form.inc release/includes/release_node_form.inc --- release/includes/release_node_form.inc 28 Jan 2010 21:33:59 -0000 +++ release/includes/release_node_form.inc 30 Jan 2010 00:20:05 -0000 @@ -496,7 +496,7 @@ break; } } - // If necessary, determine the version_extra_delta to use. + // If version_extra contains any digits, save them as version_extra_delta. // This is used to ensure that alpha10 is considered "newer" than alpha9. $match = array(); if (preg_match('/(\d+)/', $node->project_release['version_extra'], $match)) {