? .git
? usage/includes/pages.inc.save
Index: release/project_release.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.install,v
retrieving revision 1.29
diff -u -p -w -r1.29 project_release.install
--- release/project_release.install	26 Nov 2009 22:41:06 -0000	1.29
+++ release/project_release.install	28 Jan 2010 21:33:57 -0000
@@ -110,6 +110,12 @@ function project_release_schema() {
         'not null' => TRUE,
         'default' => 0,
       ),
+      'version_extra_delta' => array(
+        'description' => 'The first span of digits found in version_extra. This is needed because we cannot natural sort natively without a stored procedure.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
       'version_api_tid' => array(
         'description' => 'The denormalized {term_node}.tid of the API compatibility term for this release, or 0 if the release has no such term.',
         'type' => 'int',
@@ -623,3 +629,52 @@ function project_release_update_6008() {
   return $ret;
 }
 
+/**
+ * Add the {project_release_nodes}.version_extra_delta field.
+ */
+function project_release_update_6009() {
+  $ret = array('#finished' => 0);
+  if (!isset($_SESSION['project_release_update_6009'])) {
+    $spec = array(
+      'type' => 'int',
+      'not null' => TRUE,
+      'default' => 0,
+    );
+
+    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.
+    db_query('UPDATE {project_release_nodes} SET version_extra_delta = -1 WHERE version_extra IS NOT NULL');
+
+    $_SESSION['project_release_update_6009'] = 0;
+    $_SESSION['project_release_update_6009_max'] = db_result(db_query("SELECT COUNT(*) FROM {project_release_nodes} WHERE version_extra IS NOT NULL"));
+  }
+
+  // Number of rows to convert per batch.
+  $limit = 20;
+  while ($limit-- && $item = db_fetch_array(db_query_range("SELECT nid, pid, version_major, version_api_tid, version_extra FROM {project_release_nodes} WHERE version_extra_delta = -1", 0, 1))) {
+    // Due to the new sorting method, the "recommended" and "latest" releases
+    // will change on any releases affected by http://drupal.org/node/649254.
+
+    // Determine the correct version_extra_delta and update it.
+    $match = array();
+    $nmatch = preg_match('/(\d+)/', $item['version_extra'], $match);
+    db_query('UPDATE {project_release_nodes} SET version_extra_delta = %d WHERE nid = %d', ($nmatch) ? $match[1] : 0, $item['nid']);
+
+    // Finally, recheck the branch.
+    project_release_check_supported_versions($item['pid'], $item['version_api_tid'], $item['version_major'], FALSE);
+
+    $_SESSION['project_release_update_6009']++;
+  }
+
+  if ($_SESSION['project_release_update_6009'] >= $_SESSION['project_release_update_6009_max']) {
+    // Done. Clean up.
+    unset($_SESSION['project_release_update_6009']);
+    unset($_SESSION['project_release_update_6009_max']);
+    $ret['#finished'] = 1;
+  }
+  else {
+    $ret['#finished'] = $_SESSION['project_release_update_6009'] / $_SESSION['project_release_update_6009_max'];
+  }
+  return $ret;
+}
\ No newline at end of file
Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.148
diff -u -p -w -r1.148 project_release.module
--- release/project_release.module	17 Jan 2010 01:03:58 -0000	1.148
+++ release/project_release.module	28 Jan 2010 21:33:58 -0000
@@ -1140,9 +1140,9 @@ function project_release_query_releases_
   $order_bys[] = 'r.version_patch DESC';
   // To reliably sort release with version_extra, use version_extra_weight.
   $order_bys[] = 'r.version_extra_weight DESC';
-  // Within releases of the same version_extra_weight (e.g. rc1 vs. rc2) just
-  // sort alphabetically, so that rc2 shows up first in the query.
-  $order_bys[] = 'r.version_extra DESC';
+  // 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';
   $order_by = 'ORDER BY '. implode(', ', $order_bys);
 
   $sql = "SELECT n.nid, n.title, n.created, r.* FROM {node} n ".
Index: release/includes/release_node_form.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/includes/release_node_form.inc,v
retrieving revision 1.10
diff -u -p -w -r1.10 release_node_form.inc
--- release/includes/release_node_form.inc	26 Nov 2009 02:34:13 -0000	1.10
+++ release/includes/release_node_form.inc	28 Jan 2010 21:33:59 -0000
@@ -496,6 +496,13 @@ function project_release_db_save($node, 
         break;
       }
     }
+    // If necessary, determine the version_extra_delta to use.
+    // This is used to ensure that alpha10 is considered "newer" than alpha9.
+    $match = array();
+    if (preg_match('/(\d+)/', $node->project_release['version_extra'], $match)) {
+      $types['version_extra_delta'] = "%d";
+      $values['version_extra_delta'] = $match[1];
+    }
   }
   // If there's no version_extra, but our mapping defines a weight for 'NULL',
   // specify save that weight into the version_extra_weight column.
@@ -569,4 +576,3 @@ function project_release_pick_project_fo
 function project_release_pick_project_form_submit($form, &$form_state) {
   $form_state['redirect'] = 'node/add/project-release/'. $form_state['values']['pid'];
 }
-
