Index: filefield.module =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filefield/filefield.module,v retrieving revision 1.166 diff -u -r1.166 filefield.module --- filefield.module 2 Mar 2009 07:27:18 -0000 1.166 +++ filefield.module 9 Mar 2009 21:47:56 -0000 @@ -578,7 +549,7 @@ function filefield_file_references($file) { $references = 0; foreach(content_fields() as $field) { - if ($field['type'] != 'file') { + if ($field['type'] != 'filefield') { continue; } $references += field_file_references($file, $field); Index: filefield_field.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filefield/filefield_field.inc,v retrieving revision 1.14 diff -u -r1.14 filefield_field.inc --- filefield_field.inc 2 Mar 2009 07:09:32 -0000 1.14 +++ filefield_field.inc 9 Mar 2009 21:47:56 -0000 @@ -122,12 +122,14 @@ return; } - // Try to delete items from original node. + // Delete items from original node if no new revision was created. $orig = node_load($node->nid); // If there are, figure out which ones must go. - if (!empty($orig->$field['field_name'])) { + if ($node->revision == 0 && !empty($orig->$field['field_name'])) { foreach ($orig->$field['field_name'] as $oitem) { - if (!in_array($oitem['fid'], $curfids)) { + if (!in_array($oitem['fid'], $curfids)) { + // For hook_file_references, remember that this is being deleted. + $oitem['field_name'] = $field['field_name']; field_file_delete($oitem); } } Index: field_file.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/filefield/field_file.inc,v retrieving revision 1.23 diff -u -r1.23 field_file.inc --- field_file.inc 4 Feb 2009 00:42:50 -0000 1.23 +++ field_file.inc 9 Mar 2009 21:47:56 -0000 @@ -367,13 +367,16 @@ function field_file_references($file, $field) { $db_info = content_database_info($field); - $references += db_result(db_query( + $references = db_result(db_query( 'SELECT count('. $db_info['columns']['fid']['column'] .') FROM {'. $db_info['table'] .'} WHERE '. $db_info['columns']['fid']['column'] .' = %d', $file->fid )); + + // If a field_name is present in the file object, the file is being deleted + // from this field, decrement the number of total references by one. if (isset($file->field_name) && $field['field_name'] == $file->field_name) { - --$references; // doesn't count as it's being deleted + --$references; } return $references; }