? node_collisions.patch
Index: project.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/project.inc,v
retrieving revision 1.118
diff -u -F^f -r1.118 project.inc
--- project.inc	14 Oct 2007 18:34:50 -0000	1.118
+++ project.inc	20 Oct 2007 04:15:29 -0000
@@ -95,7 +95,9 @@ function project_project_form($node) {
   $form['project']['uri'] = array(
     '#type' => 'textfield',
     '#title' => t('Short project name'),
-    '#default_value' => isset($node->uri) ? $node->uri : NULL,
+// MUNGE: $node->uri
+// MUNGE: $node->uri
+    '#default_value' => isset($node->project['uri']) ? $node->project['uri'] : NULL,
     '#size' => 40,
     '#maxlength' => 50,
     '#description' => t('This will be used to generate a /project/&lt;shortname&gt;/ URL for your project.'),
@@ -110,7 +112,9 @@ function project_project_form($node) {
   $form['project']['mail'] = array(
     '#type' => 'textfield',
     '#title' => t('Project e-mail'),
-    '#default_value' => isset($node->mail) ? $node->mail : $user->mail,
+// MUNGE: $node->mail
+// MUNGE: $node->mail
+    '#default_value' => isset($node->project['mail']) ? $node->project['mail'] : $user->mail,
     '#size' => 40,
     '#maxlength' => 255,
     '#description' => $description,
@@ -119,7 +123,9 @@ function project_project_form($node) {
   $form['project']['homepage'] = array(
     '#type' => 'textfield',
     '#title' => t('Homepage'),
-    '#default_value' => isset($node->homepage) ? $node->homepage : NULL,
+// MUNGE: $node->homepage
+// MUNGE: $node->homepage
+    '#default_value' => isset($node->project['homepage']) ? $node->project['homepage'] : NULL,
     '#size' => 40,
     '#maxlength' => 255,
     '#description' => t('Link to project homepage.'),
@@ -127,7 +133,9 @@ function project_project_form($node) {
   $form['project']['documentation'] = array(
     '#type' => 'textfield',
     '#title' => t('Documentation'),
-    '#default_value' => isset($node->documentation) ? $node->documentation : NULL,
+// MUNGE: $node->documentation
+// MUNGE: $node->documentation
+    '#default_value' => isset($node->project['documentation']) ? $node->project['documentation'] : NULL,
     '#size' => 40,
     '#maxlength' => 255,
     '#description' => t('Link to project documentation.'),
@@ -135,7 +143,9 @@ function project_project_form($node) {
   $form['project']['license'] = array(
     '#type' => 'textfield',
     '#title' => t('License'),
-    '#default_value' => isset($node->license) ? $node->license : NULL,
+// MUNGE: $node->license
+// MUNGE: $node->license
+    '#default_value' => isset($node->project['license']) ? $node->project['license'] : NULL,
     '#size' => 40,
     '#maxlength' => 255,
     '#description' => t('Link to project license.'),
@@ -143,7 +153,9 @@ function project_project_form($node) {
   $form['project']['screenshots'] = array(
     '#type' => 'textfield',
     '#title' => t('Screenshots'),
-    '#default_value' => isset($node->screenshots) ? $node->screenshots : NULL,
+// MUNGE: $node->screenshots
+// MUNGE: $node->screenshots
+    '#default_value' => isset($node->project['screenshots']) ? $node->project['screenshots'] : NULL,
     '#size' => 40,
     '#maxlength' => 255,
     '#description' => t('Link to project screenshots.'),
@@ -151,7 +163,9 @@ function project_project_form($node) {
   $form['project']['changelog'] = array(
     '#type' => 'textfield',
     '#title' => t('Changelog'),
-    '#default_value' => isset($node->changelog) ? $node->changelog : NULL,
+// MUNGE: $node->changelog
+// MUNGE: $node->changelog
+    '#default_value' => isset($node->project['changelog']) ? $node->project['changelog'] : NULL,
      '#size' => 40,
     '#maxlength' => 255,
     '#description' => t('Link to changelog.'),
@@ -159,7 +173,9 @@ function project_project_form($node) {
   $form['project']['cvs'] = array(
     '#type' => 'textfield',
     '#title' => t('CVS tree'),
-    '#default_value' => isset($node->cvs) ? $node->cvs : NULL,
+// MUNGE: $node->cvs
+// MUNGE: $node->cvs
+    '#default_value' => isset($node->project['cvs']) ? $node->project['cvs'] : NULL,
     '#size' => 40,
     '#maxlength' => 255,
     '#description' => t('Link to webcvs/viewcvs.'),
@@ -167,7 +183,9 @@ function project_project_form($node) {
   $form['project']['demo'] = array(
     '#type' => 'textfield',
     '#title' => t('Demo site'),
-    '#default_value' => isset($node->demo) ? $node->demo : NULL,
+// MUNGE: $node->demo
+// MUNGE: $node->demo
+    '#default_value' => isset($node->project['demo']) ? $node->project['demo'] : NULL,
     '#size' => 40,
     '#maxlength' => 255,
     '#description' => t('Link to a live demo.'),
@@ -193,12 +211,14 @@ function project_project_validate(&$node
   }
 
   // Validate uri.
-  if (empty($node->uri)) {
+// MUNGE: $node->uri
+  if (empty($node->project['uri'])) {
     form_set_error('uri', t('A short project name is required.'));
   }
   else {
     // Make sure uri only includes valid characters
-    if (!preg_match('/^[a-zA-Z0-9_-]+$/', $node->uri)) {
+// MUNGE: $node->uri
+    if (!preg_match('/^[a-zA-Z0-9_-]+$/', $node->project['uri'])) {
       form_set_error('uri', t('Please only use alphanumerical characters for the project name.'));
     }
 
@@ -213,7 +233,9 @@ function project_project_validate(&$node
         }
       }
     }
-    if (in_array(strtolower($node->uri), $reserved_names) || db_num_rows(db_query("SELECT nid FROM {project_projects} WHERE uri = '%s' AND nid <> %d", $node->uri, $node->nid))) {
+// MUNGE: $node->uri
+// MUNGE: $node->uri
+    if (in_array(strtolower($node->project['uri']), $reserved_names) || db_num_rows(db_query("SELECT nid FROM {project_projects} WHERE uri = '%s' AND nid <> %d", $node->project['uri'], $node->nid))) {
       form_set_error('uri', t('This project name is already in use.'));
     }
   }
@@ -224,27 +246,41 @@ function project_project_validate(&$node
   }
 
   // Validate emails
-  if (empty($node->mail)) {
+// MUNGE: $node->mail
+  if (empty($node->project['mail'])) {
     form_set_error('mail', t('You must specify a project e-mail.'));
   }
-  elseif ($data = user_validate_mail($node->mail)) {
+// MUNGE: $node->mail
+  elseif ($data = user_validate_mail($node->project['mail'])) {
     form_set_error('mail', $data);
   }
 
-  if (!empty($node->mail_digest) && ($data = user_validate_mail($node->mail_digest))) {
+// MUNGE: $node->mail
+// MUNGE: $node->mail
+  if (!empty($node->project['mail']) && ($data = user_validate_mail($node->project['mail']))) {
     form_set_error('mail_digest', $data);
   }
 
-  if (!empty($node->mail_copy) && ($data = user_validate_mail($node->mail_copy))) {
+// MUNGE: $node->mail
+// MUNGE: $node->mail
+  if (!empty($node->project['mail']) && ($data = user_validate_mail($node->project['mail']))) {
     form_set_error('mail_copy', $data);
   }
 
-  if (isset($node->mail_copy_filter) && is_array($node->mail_copy_filter)) {
-    $node->mail_copy_filter = array_filter($node->mail_copy_filter, 'project_project_cleanup');
+// MUNGE: $node->mail
+// MUNGE: $node->mail
+  if (isset($node->project['mail']) && is_array($node->project['mail'])) {
+// MUNGE: $node->mail
+// MUNGE: $node->mail
+    $node->project['mail'] = array_filter($node->project['mail'], 'project_project_cleanup');
   }
 
-  if (isset($node->mail_copy_filter_state) && is_array($node->mail_copy_filter_state)) {
-    $node->mail_copy_filter_state = array_filter($node->mail_copy_filter_state, 'project_project_cleanup');
+// MUNGE: $node->mail
+// MUNGE: $node->mail
+  if (isset($node->project['mail']) && is_array($node->project['mail'])) {
+// MUNGE: $node->mail
+// MUNGE: $node->mail
+    $node->project['mail'] = array_filter($node->project['mail'], 'project_project_cleanup');
   }
 
   // Make sure all URL fields actually contain URLs.
@@ -350,18 +386,26 @@ function project_project_view($node, $te
     // Support section.
     $links = array();
     if ($view_issues) {
-      $links[] = l(t('View all support requests'), 'project/issues/'. $node->uri, null, 'categories=support&states=all', null);
-      $links[] = l(t('View pending support requests'), 'project/issues/'. $node->uri, null, 'categories=support', null);
-      $links[] = l(t('View pending bug reports'), 'project/issues/'. $node->uri, null, 'categories=bug', null);
-      $links[] = l(t('View pending feature requests'), 'project/issues/'. $node->uri, null, 'categories=feature', null);
+// MUNGE: $node->uri
+      $links[] = l(t('View all support requests'), 'project/issues/'. $node->project['uri'], null, 'categories=support&states=all', null);
+// MUNGE: $node->uri
+      $links[] = l(t('View pending support requests'), 'project/issues/'. $node->project['uri'], null, 'categories=support', null);
+// MUNGE: $node->uri
+      $links[] = l(t('View pending bug reports'), 'project/issues/'. $node->project['uri'], null, 'categories=bug', null);
+// MUNGE: $node->uri
+      $links[] = l(t('View pending feature requests'), 'project/issues/'. $node->project['uri'], null, 'categories=feature', null);
     }
     if ($make_issues) {
-      $links[] = l(t('Request support'), 'node/add/project_issue/'. $node->uri .'/support');
-      $links[] = l(t('Report new bug'), 'node/add/project_issue/'. $node->uri .'/bug');
-      $links[] = l(t('Request new feature'), 'node/add/project_issue/'. $node->uri .'/feature');
+// MUNGE: $node->uri
+      $links[] = l(t('Request support'), 'node/add/project_issue/'. $node->project['uri'] .'/support');
+// MUNGE: $node->uri
+      $links[] = l(t('Report new bug'), 'node/add/project_issue/'. $node->project['uri'] .'/bug');
+// MUNGE: $node->uri
+      $links[] = l(t('Request new feature'), 'node/add/project_issue/'. $node->project['uri'] .'/feature');
     }
     else {
-      $links[] = theme('project_issue_create_forbidden', $node->uri);
+// MUNGE: $node->uri
+      $links[] = theme('project_issue_create_forbidden', $node->project['uri']);
     }
 
     if ($links) {
@@ -374,13 +418,18 @@ function project_project_view($node, $te
     // Developer section
     $links = array();
     if ($view_issues) {
-      $links[] = l(t('View pending patches'), 'project/issues/'. $node->uri, null, 'states=8,13,14', null);
-      $links[] = l(t('View available tasks'), 'project/issues/'. $node->uri, null, 'categories=task', null);
-      $links[] = l(t('View all pending issues'), 'project/issues/'. $node->uri);
+// MUNGE: $node->uri
+      $links[] = l(t('View pending patches'), 'project/issues/'. $node->project['uri'], null, 'states=8,13,14', null);
+// MUNGE: $node->uri
+      $links[] = l(t('View available tasks'), 'project/issues/'. $node->project['uri'], null, 'categories=task', null);
+// MUNGE: $node->uri
+      $links[] = l(t('View all pending issues'), 'project/issues/'. $node->project['uri']);
     }
 
-    if ($node->cvs) {
-      $links[] = l(t('Browse the CVS repository'), $node->cvs);
+// MUNGE: $node->cvs
+    if ($node->project['cvs']) {
+// MUNGE: $node->cvs
+      $links[] = l(t('Browse the CVS repository'), $node->project['cvs']);
     }
 
     if (project_use_cvs($node)) {
@@ -413,7 +462,8 @@ function project_project_nodeapi(&$node,
     case 'insert':
       _project_save_taxonomy($node);
       if (module_exists('path')) {
-        path_set_alias("node/$node->nid", "project/$node->uri");
+// MUNGE: $node->uri
+        path_set_alias("node/$node->nid", "project/$node->project['uri']");
       }
       break;
 
@@ -421,20 +471,43 @@ function project_project_nodeapi(&$node,
       _project_save_taxonomy($node);
       if (module_exists('path')) {
         path_set_alias("node/$node->nid");  // Clear existing alias.
-        path_set_alias("node/$node->nid", "project/$node->uri");
+// MUNGE: $node->uri
+        path_set_alias("node/$node->nid", "project/$node->project['uri']");
       }
       break;
   }
 }
 
 function project_project_insert($node) {
-  db_query("INSERT INTO {project_projects} (nid, uri, homepage, changelog, cvs, demo, release_directory, mail, version, screenshots, documentation, license) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s')", $node->nid, $node->uri, $node->homepage, $node->changelog, $node->cvs, $node->demo, $node->release_directory, $node->mail, $node->version, $node->screenshots, $node->documentation, $node->license);
-//  project_release_scan_directory($node->uri);
+// MUNGE: $node->license
+// MUNGE: $node->documentation
+// MUNGE: $node->screenshots
+// MUNGE: $node->version
+// MUNGE: $node->mail
+// MUNGE: $node->release_directory
+// MUNGE: $node->demo
+// MUNGE: $node->cvs
+// MUNGE: $node->changelog
+// MUNGE: $node->homepage
+// MUNGE: $node->uri
+  db_query("INSERT INTO {project_projects} (nid, uri, homepage, changelog, cvs, demo, release_directory, mail, version, screenshots, documentation, license) VALUES (%d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, '%s', '%s', '%s')", $node->nid, $node->project['uri'], $node->project['homepage'], $node->project['changelog'], $node->project['cvs'], $node->project['demo'], $node->project['release_directory'], $node->project['mail'], $node->project['version'], $node->project['screenshots'], $node->project['documentation'], $node->project['license']);
+  //  project_release_scan_directory($node->uri);
 }
 
 function project_project_update($node) {
-  db_query("UPDATE {project_projects} SET uri = '%s', homepage = '%s', changelog = '%s', cvs = '%s', demo = '%s', release_directory = '%s', mail = '%s', version = %d, screenshots = '%s', documentation = '%s', license = '%s' WHERE nid = %d", $node->uri, $node->homepage, $node->changelog, $node->cvs, $node->demo, $node->release_directory, $node->mail, $node->version, $node->screenshots, $node->documentation, $node->license, $node->nid);
-//  project_release_scan_directory($node->uri);
+// MUNGE: $node->license
+// MUNGE: $node->documentation
+// MUNGE: $node->screenshots
+// MUNGE: $node->version
+// MUNGE: $node->mail
+// MUNGE: $node->release_directory
+// MUNGE: $node->demo
+// MUNGE: $node->cvs
+// MUNGE: $node->changelog
+// MUNGE: $node->homepage
+// MUNGE: $node->uri
+  db_query("UPDATE {project_projects} SET uri = '%s', homepage = '%s', changelog = '%s', cvs = '%s', demo = '%s', release_directory = '%s', mail = '%s', version = %d, screenshots = '%s', documentation = '%s', license = '%s' WHERE nid = %d", $node->project['uri'], $node->project['homepage'], $node->project['changelog'], $node->project['cvs'], $node->project['demo'], $node->project['release_directory'], $node->project['mail'], $node->project['version'], $node->project['screenshots'], $node->project['documentation'], $node->project['license'], $node->nid);
+  //  project_release_scan_directory($node->uri);
 }
 
 function project_project_delete($node) {
Index: release/project_release.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release.module,v
retrieving revision 1.53
diff -u -F^f -r1.53 project_release.module
--- release/project_release.module	14 Oct 2007 19:53:07 -0000	1.53
+++ release/project_release.module	20 Oct 2007 04:15:31 -0000
@@ -184,7 +184,8 @@ function project_release_access($op, $no
       // We can't just use project_project_access() here, since we
       // need to check access to the project itself, not the release
       // node, so we use the helper method and pass the project id.
-      return project_check_admin_access($node->pid);
+// MUNGE: $node->pid
+      return project_check_admin_access($node->project_release['pid']);
     case 'delete':
       // No one should ever delete a release node, only unpublish it.
       return FALSE;
@@ -530,7 +531,8 @@ function project_release_load($node) {
 function project_release_insert($node) {
   project_release_db_save($node, true);
   if (project_use_cvs($node->project)) {
-    if ($node->rebuild) {
+// MUNGE: $node->rebuild
+    if ($node->project_release['rebuild']) {
       $msg = variable_get('cvs_message_new_release_branch', '');
     }
     else {
@@ -569,8 +571,11 @@ function project_release_db_save($node, 
 
   // If the patch field is set to a non-numeric value, we just want to
   // keep it as a NULL in the DB, instead of casting it to a 0.
-  if (isset($node->version_patch) && !is_numeric($node->version_patch)) {
-    unset($node->version_patch);
+// MUNGE: $node->version
+// MUNGE: $node->version
+  if (isset($node->project_release['version']) && !is_numeric($node->project_release['version'])) {
+// MUNGE: $node->version
+    unset($node->project_release['version']);
   }
 
   // Handle file upload data.
@@ -583,10 +588,18 @@ function project_release_db_save($node, 
     'file_path' => "'%s'", 'file_date' => "%d", 'file_hash' => "'%s'",
     'rebuild' => "%d",
   );
-  $values = array( 'pid' => $node->pid, 'version' => $node->version,
-    'tag' => $node->tag, 'file_path' => $node->file_path ? $node->file_path : $file_data->filepath,
-    'file_date' => $node->file_date, 'file_hash' => $node->file_hash,
-    'rebuild' => $node->rebuild,
+// MUNGE: $node->version
+// MUNGE: $node->pid
+  $values = array( 'pid' => $node->project_release['pid'], 'version' => $node->project_release['version'],
+// MUNGE: $node->file_path
+// MUNGE: $node->file_path
+// MUNGE: $node->tag
+    'tag' => $node->project_release['tag'], 'file_path' => $node->project_release['file_path'] ? $node->project_release['file_path'] : $file_data->filepath,
+// MUNGE: $node->file_hash
+// MUNGE: $node->file_date
+    'file_date' => $node->project_release['file_date'], 'file_hash' => $node->project_release['file_hash'],
+// MUNGE: $node->rebuild
+    'rebuild' => $node->project_release['rebuild'],
   );
   $fields = array('version_major', 'version_minor', 'version_patch');
   foreach ($fields as $field) {
@@ -595,9 +608,11 @@ function project_release_db_save($node, 
       $values[$field] = $node->$field;
     }
   }
-  if (!empty($node->version_extra)) {
+// MUNGE: $node->version
+  if (!empty($node->project_release['version'])) {
     $types['version_extra'] = "'%s'";
-    $values['version_extra'] = $node->version_extra;
+// MUNGE: $node->version
+    $values['version_extra'] = $node->project_release['version'];
   }
 
   if ($is_new) {
@@ -620,13 +635,15 @@ function project_release_db_save($node, 
     $vid = _project_release_get_api_vid();
     if (isset($node->taxonomy[$vid])) {
       $tid = $node->taxonomy[$vid];
-      project_release_check_default_version($node->pid, $tid);
+// MUNGE: $node->pid
+      project_release_check_default_version($node->project_release['pid'], $tid);
     }
   }
 
   // Finally, clear the cache for the release table whenever a release node is
   // added or updated, since what we want to display might have changed, too.
-  $cid = 'table:'. $node->pid .':';
+// MUNGE: $node->pid
+  $cid = 'table:'. $node->project_release['pid'] .':';
   cache_clear_all($cid, 'cache_project_release', TRUE);
 }
 
@@ -665,17 +682,22 @@ function project_release_check_default_v
  * @ingroup project_release_node
  */
 function project_release_delete($node) {
-  if ($node->file_path) {
-    file_delete(file_create_path($node->file_path));
+// MUNGE: $node->file_path
+  if ($node->project_release['file_path']) {
+// MUNGE: $node->file_path
+    file_delete(file_create_path($node->project_release['file_path']));
   }
   db_query("DELETE FROM {project_release_nodes} WHERE nid = %d", $node->nid);
 
   // Make sure that the default release version information is up to date.
-  project_release_check_default_version($node->pid, $node->version_api_tid);
+// MUNGE: $node->version
+// MUNGE: $node->pid
+  project_release_check_default_version($node->project_release['pid'], $node->project_release['version']);
 
   // Finally, clear the cache for the release table whenever a release node is
   // deleted, since what we want to display might have changed, too.
-  $cid = 'table:'. $node->pid .':';
+// MUNGE: $node->pid
+  $cid = 'table:'. $node->project_release['pid'] .':';
   cache_clear_all($cid, 'cache_project_release', TRUE);
 }
 
@@ -768,7 +790,8 @@ function project_release_get_version($re
  */
 function project_release_view($node, $teaser = FALSE, $page = FALSE) {
   $node = node_prepare($node, $teaser);
-  $project = node_load($node->pid);
+// MUNGE: $node->pid
+  $project = node_load($node->project_release['pid']);
 
   if ($page) {
     // Breadcrumb navigation
@@ -778,25 +801,36 @@ function project_release_view($node, $te
   }
 
   $output = '';
-  if (project_use_cvs($project) && isset($node->tag)) {
-    if ($node->rebuild) {
-      $output .= t('Nightly development snapshot from CVS branch: @tag', array('@tag' => $node->tag)) .'<br />';
+// MUNGE: $node->tag
+  if (project_use_cvs($project) && isset($node->project_release['tag'])) {
+// MUNGE: $node->rebuild
+    if ($node->project_release['rebuild']) {
+// MUNGE: $node->tag
+      $output .= t('Nightly development snapshot from CVS branch: @tag', array('@tag' => $node->project_release['tag'])) .'<br />';
     }
     else {
-      $output .= t('Official release from CVS tag: @tag', array('@tag' => $node->tag)) .'<br />';
+// MUNGE: $node->tag
+      $output .= t('Official release from CVS tag: @tag', array('@tag' => $node->project_release['tag'])) .'<br />';
     }
   }
 
-  if ($node->file_path) {
-    $output .= '<small>'. t('Download: !file', array('!file' => theme('project_release_download_link', $node->file_path))) .'</small><br />';
-    $output .= '<small>'. t('Size: !size', array('!size' => format_size(filesize(file_create_path($node->file_path))))) .'</small><br />';
-    $output .= '<small>'. t('md5_file hash: !file_hash', array('!file_hash' => $node->file_hash)) .'</small><br />';
+// MUNGE: $node->file_path
+  if ($node->project_release['file_path']) {
+// MUNGE: $node->file_path
+    $output .= '<small>'. t('Download: !file', array('!file' => theme('project_release_download_link', $node->project_release['file_path']))) .'</small><br />';
+// MUNGE: $node->file_path
+    $output .= '<small>'. t('Size: !size', array('!size' => format_size(filesize(file_create_path($node->project_release['file_path']))))) .'</small><br />';
+// MUNGE: $node->file_hash
+    $output .= '<small>'. t('md5_file hash: !file_hash', array('!file_hash' => $node->project_release['file_hash'])) .'</small><br />';
   }
   if ($node->created) {
     $output .= '<small>'. t('First released: !created', array('!created' => format_date($node->created))) .'</small><br />';
   }
-  if ($node->file_date  && ($node->file_date != $node->created)) {
-    $output .= '<small>'. t('Last updated: !changed', array('!changed' => format_date($node->file_date))) .'</small><br />';
+// MUNGE: $node->file_date
+// MUNGE: $node->file_date
+  if ($node->project_release['file_date']  && ($node->project_release['file_date'] != $node->created)) {
+// MUNGE: $node->file_date
+    $output .= '<small>'. t('Last updated: !changed', array('!changed' => format_date($node->project_release['file_date']))) .'</small><br />';
   }
   $node->content['release_info'] = array(
     '#value' => '<div class="project-release">'. $output .'</div>',
@@ -804,7 +838,8 @@ function project_release_view($node, $te
   );
 
   // Display packaging errors to admins.
-  if (project_check_admin_access($node->pid)) {
+// MUNGE: $node->pid
+  if (project_check_admin_access($node->project_release['pid'])) {
     $rows = array();
     $result = db_query('SELECT * FROM {project_release_package_errors} WHERE nid = %d', $node->nid);
     $error = db_fetch_object($result);
@@ -1094,7 +1129,8 @@ function project_release_project_edit_fo
       $form['advanced']['version_format'] = array(
         '#type' => 'textfield',
         '#title' => t('Version format string'),
-        '#default_value' => $node->version_format,
+// MUNGE: $node->version
+        '#default_value' => $node->project_release['version'],
         '#size' => 50,
         '#maxlength' => 255,
         '#description' => t('Customize the format of the version strings for releases of this project.') .' '. PROJECT_RELEASE_VERSION_FORMAT_HELP .' '. t('If blank, this project will use the site-wide default (currently set to: %default)', array('%default' => variable_get('project_release_default_version_format', PROJECT_RELEASE_DEFAULT_VERSION_FORMAT))),
@@ -1203,15 +1239,18 @@ function project_release_project_edit_fo
 function project_release_alter_release_form(&$form) {
   global $user;
   $node = $form['#node'];
-  $tid = $node->version_api_tid;
+// MUNGE: $node->version
+  $tid = $node->project_release['version'];
   $vid = _project_release_get_api_vid();
   if (!project_release_get_api_taxonomy() && isset($form['taxonomy'][$vid])) {
     unset($form['taxonomy'][$vid]);
   }
   else {
 /*
-    if (isset($node->pid)) {
-      $project->nid = $node->pid;
+// MUNGE: $node->pid
+    if (isset($node->project_release['pid'])) {
+// MUNGE: $node->pid
+      $project->nid = $node->project_release['pid'];
     }
     elseif (arg(1) == 'add' && is_numeric(arg(3))) {
       $project->nid = arg(3);
@@ -1679,4 +1718,4 @@ function project_release_file_download($
  */
 function project_release_devel_caches() {
   return array('cache_project_release');
-}
\ No newline at end of file
+}
Index: release/project_release_update.php
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/project/release/project_release_update.php,v
retrieving revision 1.7
diff -u -F^f -r1.7 project_release_update.php
--- release/project_release_update.php	22 Aug 2007 16:30:52 -0000	1.7
+++ release/project_release_update.php	20 Oct 2007 04:15:31 -0000
@@ -14,13 +14,19 @@
  */
 function generate_core_tag($node) {
   $tag = 'DRUPAL-';
-  $tag .= $node->version_major . '-';
-  if (isset($node->version_minor)) {
-    $tag .= $node->version_minor . '-';
-  }
-  $tag .= $node->version_patch;
-  if (!empty($node->version_extra)) {
-    $tag .= '-' . strtoupper(preg_replace('/(.+)(\d+)/', '\1-\2', $node->version_extra));
+// MUNGE: $node->version
+  $tag .= $node->project_release['version'] . '-';
+// MUNGE: $node->version
+  if (isset($node->project_release['version'])) {
+// MUNGE: $node->version
+    $tag .= $node->project_release['version'] . '-';
+  }
+// MUNGE: $node->version
+  $tag .= $node->project_release['version'];
+// MUNGE: $node->version
+  if (!empty($node->project_release['version'])) {
+// MUNGE: $node->version
+    $tag .= '-' . strtoupper(preg_replace('/(.+)(\d+)/', '\1-\2', $node->project_release['version']));
   }
   return $tag;
 }
@@ -155,39 +161,59 @@ function convert_release($old_release) {
   $node->comment = 0;
 
   // Things that go in {project_release_nodes} (that don't depend on version)
-  $node->pid = $old_release->nid;
-  $node->file_path = $old_release->path;
-  $node->file_date = $old_release->changed;
-  $node->file_hash = $old_release->hash;
+// MUNGE: $node->pid
+  $node->project_release['pid'] = $old_release->nid;
+// MUNGE: $node->file_path
+  $node->project_release['file_path'] = $old_release->path;
+// MUNGE: $node->file_date
+  $node->project_release['file_date'] = $old_release->changed;
+// MUNGE: $node->file_hash
+  $node->project_release['file_hash'] = $old_release->hash;
 
   // Now, depending on the project and version, fill in the rest.
   if ($old_release->nid == 3060) {
     if ($old_release->version == 'cvs') {
       // TODO: maybe we should just leave this "release" alone,
-      $node->version_major = 5;
-      $node->version_patch = 'x';
-      $node->version_extra = 'dev';
-      $node->rebuild = 1;
-      $node->tag = 'HEAD';
+// MUNGE: $node->version
+      $node->project_release['version'] = 5;
+// MUNGE: $node->version
+      $node->project_release['version'] = 'x';
+// MUNGE: $node->version
+      $node->project_release['version'] = 'dev';
+// MUNGE: $node->rebuild
+      $node->project_release['rebuild'] = 1;
+// MUNGE: $node->tag
+      $node->project_release['tag'] = 'HEAD';
       $target_api = '5.x';
     }
     elseif (preg_match('/^(\d+)\.(\d+)(-.+)?$/', $old_release->version, $matches)) {
       // Handle "5.x" style releases
-      $node->version_major = $matches[1];
-      $node->version_patch = $matches[2];
-      $node->version_extra = preg_replace('/^-(.+)$/', '\1', $matches[3]);
-      $node->tag = generate_core_tag($node);
-      $node->rebuild = 0;
+// MUNGE: $node->version
+      $node->project_release['version'] = $matches[1];
+// MUNGE: $node->version
+      $node->project_release['version'] = $matches[2];
+// MUNGE: $node->version
+      $node->project_release['version'] = preg_replace('/^-(.+)$/', '\1', $matches[3]);
+// MUNGE: $node->tag
+      $node->project_release['tag'] = generate_core_tag($node);
+// MUNGE: $node->rebuild
+      $node->project_release['rebuild'] = 0;
       $target_api = "$matches[1].x";
     }
     elseif (preg_match('/^(\d+)\.(\d+)\.(\d+)(-.+)?$/', $old_release->version, $matches)) {
       // Handle "4.7.x" style releases
-      $node->version_major = $matches[1];
-      $node->version_minor = $matches[2];
-      $node->version_patch = $matches[3];
-      $node->version_extra = preg_replace('/^-(.+)$/', '\1', $matches[4]);
-      $node->tag = generate_core_tag($node);
-      $node->rebuild = 0;
+// MUNGE: $node->version
+      $node->project_release['version'] = $matches[1];
+// MUNGE: $node->version
+      $node->project_release['version'] = $matches[2];
+// MUNGE: $node->version
+      $node->project_release['version'] = $matches[3];
+// MUNGE: $node->version
+      $node->project_release['version'] = preg_replace('/^-(.+)$/', '\1', $matches[4]);
+// MUNGE: $node->tag
+      $node->project_release['tag'] = generate_core_tag($node);
+// MUNGE: $node->rebuild
+      $node->project_release['rebuild'] = 0;
       $target_api = "$matches[1].$matches[2].x";
     }
     else {
@@ -197,9 +223,12 @@ function convert_release($old_release) {
   }
   elseif ($old_release->version == 'cvs') {
     // The "cvs" version is a nightly tarball from the trunk
-    $node->version_extra = 'dev';
-    $node->tag = 'HEAD';
-    $node->rebuild = 1;
+// MUNGE: $node->version
+    $node->project_release['version'] = 'dev';
+// MUNGE: $node->tag
+    $node->project_release['tag'] = 'HEAD';
+// MUNGE: $node->rebuild
+    $node->project_release['rebuild'] = 1;
   }
   else {
     // Nightly tarball from a specific branch.
@@ -208,18 +237,24 @@ function convert_release($old_release) {
       print t('<b>WARNING:</b> release %old_release_rid of %old_release_project_title has unexpected patch-level version (%matches)', array('%old_release_rid' => $old_release->rid, '%old_release_project_title' => $old_release->project_title, '%matches' => $matches[3])) .'<br />';
     }
     $target_api = "$matches[1].$matches[2].x";
-    $node->version_major = 1;
-    $node->version_patch = 'x';
-    $node->version_extra = 'dev';
-    $node->tag = 'DRUPAL-' . $matches[1] . '-' . $matches[2];
-    $node->rebuild = 1;
+// MUNGE: $node->version
+    $node->project_release['version'] = 1;
+// MUNGE: $node->version
+    $node->project_release['version'] = 'x';
+// MUNGE: $node->version
+    $node->project_release['version'] = 'dev';
+// MUNGE: $node->tag
+    $node->project_release['tag'] = 'DRUPAL-' . $matches[1] . '-' . $matches[2];
+// MUNGE: $node->rebuild
+    $node->project_release['rebuild'] = 1;
   }
 
   if (isset($target_api)) {
     foreach ($api_taxonomy as $i => $term) {
       if ($term->name == $target_api) {
         $node->taxonomy[$term->tid] = $term->tid;
-        $node->version_api_tid = $term->tid;
+// MUNGE: $node->version
+        $node->project_release['version'] = $term->tid;
         break;
       }
     }
@@ -227,7 +262,8 @@ function convert_release($old_release) {
 
   // Now, set the right kind of title.
   $version = '';
-  if ($node->tag == 'HEAD') {
+// MUNGE: $node->tag
+  if ($node->project_release['tag'] == 'HEAD') {
     if ($old_release->nid == 3060) {
       $verson = '5.x-dev';
     }
@@ -239,7 +275,8 @@ function convert_release($old_release) {
     $version = project_release_get_version($node);
   }
   $node->title = t('%project %version', array('%project' => $old_release->project_title, '%version' => $version));
-  $node->version = $version;
+// MUNGE: $node->version
+  $node->project_release['version'] = $version;
 
   list($usec, $sec) = explode(' ', microtime());
   $pre_save = (float)$usec + (float)$sec;
