Index: devel_generate.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/devel_generate.inc,v
retrieving revision 1.6
diff -u -u -p -r1.6 devel_generate.inc
--- devel_generate.inc	19 Jul 2007 16:56:51 -0000	1.6
+++ devel_generate.inc	23 Sep 2007 23:13:07 -0000
@@ -30,55 +30,79 @@ function devel_create_users($num, $kill)
   drupal_set_message(t('!num_users created.', array('!num_users' => format_plural($num, '1 user', '@count users'))));
 }
 
+/**
+ * Provide backward compatible API function to generate content
+ */
 function devel_generate_content($num_nodes, $num_comments, $title_length, $kill) {
+  $results = array();
+
+  // Kill existing content.
   if ($kill) {
-    db_query("DELETE FROM {comments}");
-    db_query("DELETE FROM {node}");
-    db_query("DELETE FROM {node_revisions}");
-    db_query("DELETE FROM {node_comment_statistics}");
-    if (db_table_exists('term_node')) {
-      db_query("DELETE FROM {term_node}");
-    }
-    if (db_table_exists('forum')) {
-      db_query("DELETE FROM {forum}");
-    }
-    db_query("DELETE FROM {url_alias}");
-    switch ($GLOBALS['db_type']) {
-      case 'mysql':
-      case 'mysqli':
-        db_query("ALTER TABLE {node} AUTO_INCREMENT = 1");
-        db_query("ALTER TABLE {comments} AUTO_INCREMENT = 1");
-        break;
-      case 'pgsql':
-        db_query("SELECT setval('{node}_nid_seq', 1, false)");
-        db_query("SELECT setval('{comments}_cid_seq', 1, false)");
-        break;
-    }
-    drupal_set_message(t('Content deleted.'));
+    devel_generate_content_kill($results);
   }
 
-  // Get user id.
-  $users = devel_get_users();
-
-  $terms = devel_get_terms();
-
-  // Create $num_nodes pseudo-random nodes.
-  $nids = devel_create_nodes($num_nodes, $users, $title_length);
-  if (!empty($nids)) {
-    drupal_set_message(t('%num nodes created.', array('%num' => count($nids))));
+  // Generate nodes.
+  devel_generate_content_pre_node($results);
+  for ($num = 1; $num <= $num_nodes; $num ++) {
+    devel_generate_content_add_node($results);
+  }
 
-    $nodes = devel_get_nodes($nids[0]);
+  // Generate comments.
+  devel_generate_content_pre_comment($results);
+  for ($num = 1; $num <= $num_comment; $num ++) {
+    devel_generate_content_add_comment($results);
+  }
+}
 
-    devel_add_terms($nodes, $terms);
+function devel_generate_content_kill(&$results) {
+  db_query("DELETE FROM {comments}");
+  db_query("DELETE FROM {node}");
+  db_query("DELETE FROM {node_revisions}");
+  db_query("DELETE FROM {node_comment_statistics}");
+  if (db_table_exists('term_node')) {
+    db_query("DELETE FROM {term_node}");
+  }
+  if (db_table_exists('forum')) {
+    db_query("DELETE FROM {forum}");
+  }
+  db_query("DELETE FROM {url_alias}");
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      db_query("ALTER TABLE {node} AUTO_INCREMENT = 1");
+      db_query("ALTER TABLE {comments} AUTO_INCREMENT = 1");
+      break;
+    case 'pgsql':
+      db_query("SELECT setval('{node}_nid_seq', 1, false)");
+      db_query("SELECT setval('{comments}_cid_seq', 1, false)");
+      break;
+  }
+}
 
-    $comments = devel_get_comments();
+function devel_generate_content_pre_node(&$results) {
+  $results['users'] = devel_get_users();
+  $results['terms'] = devel_get_terms();
+}
 
-    $cids = devel_create_comments($num_comments, $users, $nodes, $comments);
-    if (!empty($cids)) {
-      drupal_set_message(t('%num comments created.', array('%num' => $num_comments)));
+function devel_generate_content_add_node(&$results) {
+  // Create 1 pseudo-random nodes.
+  $nids = devel_create_nodes(1, $results['users'], $results['title_length']);
+  if (!empty($nids)) {
+    if (!isset($results['last_nid'])) {
+      $results['last_nid'] = $nids[0];
     }
+    devel_add_terms(devel_get_nodes($nids[0]), $results['terms']);
   }
 }
+  
+function devel_generate_content_pre_comment(&$results) {
+  $results['comments'] = devel_get_comments();
+  $results['nodes'] = devel_get_nodes($results['last_nid']);
+}
+
+function devel_generate_content_add_comment(&$results) {
+  devel_create_comments(1, $results['users'], $results['nodes'], $results['comments']);
+}
 
 function devel_create_nodes($records, $users, $title_length = 8) {
 
Index: devel_generate.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/devel/devel_generate.module,v
retrieving revision 1.6
diff -u -u -p -r1.6 devel_generate.module
--- devel_generate.module	19 Jul 2007 16:56:51 -0000	1.6
+++ devel_generate.module	23 Sep 2007 23:13:07 -0000
@@ -1,6 +1,8 @@
 <?php
 // $Id: devel_generate.module,v 1.6 2007/07/19 16:56:51 thehunmonkgroup Exp $
 
+require_once('devel_generate_batch.inc');
+
 /**
  * Implementation of hook_menu().
  */
@@ -100,8 +102,7 @@ function devel_generate_content_form() {
 }
 
 function devel_generate_content_form_submit($form_id, &$form_state) {
-  require_once('devel_generate.inc');
-  devel_generate_content($form_state['values']['num_nodes'], $form_state['values']['num_comments'], $form_state['values']['title_length'], $form_state['values']['kill_content']);
+  devel_batch_generate_content($form_state['values']['num_nodes'], $form_state['values']['num_comments'], $form_state['values']['title_length'], $form_state['values']['kill_content']);
 }
 
 function devel_generate_taxonomy_form() {
Index: devel_generate_batch.inc
===================================================================
RCS file: devel_generate_batch.inc
diff -N devel_generate_batch.inc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ devel_generate_batch.inc	23 Sep 2007 23:13:07 -0000
@@ -0,0 +1,85 @@
+<?php
+// $Id$
+
+/**
+ * Devel Generate batch handling functions using the BatchAPI
+ * included by devel_generate.module
+ */
+
+/**
+ * Functions called from FAPI:
+ */
+
+function devel_batch_generate_content($num_nodes, $num_comments, $title_length, $kill_content) {
+  $operations = array();
+
+  // add the kill operation
+  if ($kill_content) {
+    $operations = array('devel_batch_generate_content_kill', array());
+  }
+
+  // add the operations to create the nodes
+  $vars = array('title_length' => $title_length);
+  $operations[] = array('devel_batch_generate_content_pre_node', array($vars));
+  for ($num = 0; $num < $num_nodes; $num ++) {
+    $operations[] = array('devel_batch_generate_content_add_node', array());
+  }
+
+  // add the operations to create the comments
+  $operations[] = array('devel_batch_generate_content_pre_comment', array());
+  for ($num = 0; $num < $num_comments; $num ++) {
+    $operations[] = array('devel_batch_generate_content_add_comment', array());
+  }
+
+  // start the batch
+  $batch = array(
+    'title' => t('Generating Content'),
+    'operations' => $operations,
+    'finished' => 'devel_generate_batch_finished',
+  );
+  batch_set($batch);
+}
+
+/**
+ * Create Content Batch Functions:
+ */
+
+function devel_batch_generate_content_kill(&$context) {
+  require_once('devel_generate.inc');
+  devel_generate_content_kill($context['results']);
+}
+
+function devel_batch_generate_content_pre_node($vars, &$context) {
+  $context['results'] = $vars;
+  $context['results']['num_nids'] = 0;
+  require_once('devel_generate.inc');
+  devel_generate_content_pre_node($context['results']);
+}
+
+function devel_batch_generate_content_add_node(&$context) {
+  require_once('devel_generate.inc');
+  devel_generate_content_add_node($context['results']);
+  $context['results']['num_nids'] ++;
+}
+
+function devel_batch_generate_content_pre_comment(&$context) {
+  $context['results']['num_cids'] = 0;
+  require_once('devel_generate.inc');
+  devel_generate_content_pre_comment($context['results']);
+}
+
+function devel_batch_generate_content_add_comment(&$context) {
+  require_once('devel_generate.inc');
+  devel_generate_content_add_comment($context['results']);
+  $context['results']['num_cids'] ++;
+}
+
+function devel_generate_batch_finished($success, $results, $operations) {
+  if ($success) {
+    $message = t('Finished @num_nids nodes and @num_cids comments created successfully.', array('@num_nids' => $results['num_nids'], '@num_cids' => $results['num_cids']));
+  }
+  else {
+    $message = t('Finished with an error.');
+  }
+  drupal_set_message($message);
+}
