Index: pifr.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project_issue_file_review/pifr.install,v
retrieving revision 1.26
diff -u -r1.26 pifr.install
--- pifr.install	23 Apr 2009 00:30:06 -0000	1.26
+++ pifr.install	23 Jul 2009 06:35:42 -0000
@@ -15,10 +15,28 @@
   variable_del('pifr_debug');
 }
 
+/*
+ * Assumptions made for PIFR 1.x to 2.x upgrade.
+ *   1) pifr_file has been renamed to pifr_file_old.
+ *   2) pifr_result has been renamed to pifr_result_old.
+ *   3) pifr_server has been enabled.
+ *   4) pifr_log has been renamed to pifr_log_old.
+ *
+ * The table renames can be achomplished by executing the following SQL.
+ *   RENAME TABLE pifr_file TO pifr_file_old;
+ *   RENAME TABLE pifr_result TO pifr_result_old;
+ *   RENAME TABLE pifr_log TO pifr_log_old;
+ *
+ * Afterwards enable pifr_server to ensure that the new schema is installed
+ * properly and does not conflict with the old schema.
+ */
+
 /**
  * Remove old variables.
  */
 function pifr_update_6200() {
+  $ret = array();
+
   // List of old variables.
   $vars = array(
     'pifr_review_key',
@@ -44,6 +62,8 @@
   foreach ($vars as $var) {
     variable_del($var);
   }
+
+  return $ret;
 }
 
 /**
@@ -65,57 +85,75 @@
  *   2) pifr_result has been renamed to pifr_result_old.
  *   3) pifr_server has been enabled.
  */
-function pifr_update_6202() {
-  $result = db_query('SELECT *
-                      FROM {pifr_file_old}');
-  while ($file = db_fetch_array($result)) {
+function pifr_update_6202(&$sandbox = NULL) {
+  $ret = array();
+
+  if (!isset($sandbox['progress'])) {
+    $sandbox['progress'] = 0;
+    $sandbox['current_file_id'] = 0;
+    $sandbox['max'] = db_result(db_query('SELECT COUNT(file_id) FROM {pifr_file_old}'));
+  }
+
+  $result = db_query_range('SELECT *
+                            FROM {pifr_file_old}
+                            WHERE file_id > %d
+                            ORDER BY file_id ASC', $sandbox['current_file_id'], 0, 75);
+  while ($file_old = db_fetch_array($result)) {
     // Insert file record and create test record.
     $file = pifr_server_file_save(array(
       'branch_id' => 1,
-      'issue_nid' => $file['nid'],
-      'issue_cid' => $file['cid'],
-      'file_url' => '/files/issues/' . $file['filename'],
-      'file_name' => $file['filename'],
-    ));
+      'issue_nid' => $file_old['nid'],
+      'issue_cid' => $file_old['cid'],
+      'file_url' => 'http://drupal.org/files/issues/' . $file_old['filename'],
+      'file_name' => $file_old['filename'],
+    ), FALSE);
 
     // Update test record with current state.
     $test = pifr_server_test_get($file['test_id']);
     pifr_server_test_save($test + array(
-      'status' => pifr_update_6202_status($file['status']),
+      'status' => pifr_update_6202_status($file_old['status']),
       'client_id' => 0, // Client will be re-created.
-      'last_recieved' => $file['received'],
-      'last_requested' => $file['sent'],
-      'last_tested' => $file['last_tested'],
-      'test_count' => $file['test_count'],
+      'last_recieved' => $file_old['received'],
+      'last_requested' => $file_old['sent'],
+      'last_tested' => $file_old['last_tested'],
+      'test_count' => $file_old['test_count'],
     ));
 
     // Insert test result and details.
-    $result = array(
+    $test_result = array(
       'test_id' => $test['test_id'],
       'type' => 1, // PIFR_SERVER_CLIENT_ENVIRONMENT_MYSQL_5_0_ISAM
-      'code' => $code = pifr_update_6202_code($file),
-      'details' => serialize(pifr_update_6202_details($code, $file['message'])),
-      'pass' => $file['pass'],
-      'fail' => $file['fail'],
-      'exception' => $file['exception'],
+      'code' => $code = pifr_update_6202_code($file_old),
+      'details' => serialize(pifr_update_6202_details($code, $file_old['message'])),
+      'pass' => $file_old['pass'],
+      'fail' => $file_old['fail'],
+      'exception' => $file_old['exception'],
       'result_details' => array(),
     );
 
     $file_result_details = db_query('SELECT *
                                      FROM {pifr_result_old}
-                                     WHERE file_id = %d', $file['file_id']);
+                                     WHERE file_id = %d', $file_old['file_id']);
     while ($file_result_detail = db_fetch_array($file_result_details)) {
       $result_detail = array(
         'test_name' => $file_result_detail['test_class'],
         'pass' => $file_result_detail['pass'],
         'fail' => $file_result_detail['fail'],
         'exception' => $file_result_detail['exception'],
+        'assertions' => array(), // Assertion data is not collected in 1.x.
       );
-      $result['result_details'][] = $result_detail;
+      $test_result['result_details'][] = $result_detail;
     }
 
-    pifr_server_result_save($result);
+    pifr_server_result_save($test_result);
+
+    $sandbox['progress']++;
+    $sandbox['current_file_id'] = $file_old['file_id'];
   }
+
+  $ret['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['progress'] / $sandbox['max']);
+
+  return $ret;
 }
 
 /**
@@ -195,6 +233,8 @@
  * Assumes pifr_server enabled.
  */
 function pifr_update_6203() {
+  $ret = array();
+
   pifr_server_client_save(array(
     'client_key' => md5(uniqid()),
     'type' => 1, // PIFR_SERVER_CLIENT_TYPE_PROJECT
@@ -218,6 +258,8 @@
     'core_branch_id' => 0,
     'identifier' => 'HEAD',
   ));
+
+  return $ret;
 }
 
 /**
@@ -225,13 +267,30 @@
  *
  * Assumes pifr_log has been renamed to pifr_log_old.
  */
-function pifr_update_6204() {
-  $result = db_query('SELECT *
-                      FROM {pifr_log_old}');
+function pifr_update_6204(&$sandbox = NULL) {
+  $ret = array();
+
+  if (!isset($sandbox['progress'])) {
+    $sandbox['progress'] = 0;
+    $sandbox['current_log_id'] = 0;
+    $sandbox['max'] = db_result(db_query('SELECT COUNT(log_id) FROM {pifr_log_old}'));
+  }
+
+  $result = db_query_range('SELECT *
+                            FROM {pifr_log_old}
+                            WHERE log_id > %d
+                            ORDER BY log_id ASC', $sandbox['current_log_id'], 0, 10000);
   while ($log = db_fetch_array($result)) {
     db_query("INSERT INTO {pifr_log} (test_id, timestamp, message)
               VALUES (%d, %d, '%s')", $log['file_id'], $log['timestamp'], pifr_update_6204_message($log['message']));
+
+    $sandbox['progress']++;
+    $sandbox['current_log_id'] = $log['log_id'];
   }
+
+  $ret['#finished'] = empty($sandbox['max']) ? 1 : ($sandbox['progress'] / $sandbox['max']);
+
+  return $ret;
 }
 
 /**
