Index: cvs.module
===================================================================
RCS file: /Users/wright/drupal/local_repo/contributions/modules/cvslog/cvs.module,v
retrieving revision 1.237
diff -u -p -r1.237 cvs.module
--- cvs.module	8 Jan 2011 12:35:11 -0000	1.237
+++ cvs.module	10 Jan 2011 19:22:00 -0000
@@ -882,11 +882,19 @@ function cvs_alter_project_release_form(
         }
       }
 
-      if (function_exists('cvs_local_version_is_valid')) {
-        $vers_is_valid = cvs_local_version_is_valid($version, $tag, $project);
-      }
-      else {
-        $vers_is_valid = isset($version);
+      $vers_is_valid = FALSE;
+      if (!empty($version)) {
+        // We need to include the project node ID in the release information so
+        // that we can correctly validate if an existing release already has
+        // the same version.
+        $version->pid = $project->nid;
+        if (function_exists('cvs_local_version_is_valid')) {
+          $vers_is_valid = cvs_local_version_is_valid($version, $tag, $project);
+        }
+        else {
+          // We have no good way to validate this...
+          $vers_is_valid = TRUE;
+        }
       }
       if ($vers_is_valid) {
         $version_str = project_release_get_version($version, $project);
@@ -971,6 +979,10 @@ function cvs_alter_project_release_form(
       $form_state['storage']['project_release']['version'] = $version_str;
     }
     if (isset($version)) {
+      // We need to include the project node ID in the release information so
+      // that we can correctly validate if an existing release already has the
+      // same version.
+      $form_state['storage']['project_release']['pid'] = $project->nid;
       foreach (array_merge($fields, array('version_extra')) as $field) {
         if (isset($version->$field)) {
           $form_state['storage']['project_release'][$field] = $version->$field;
@@ -993,7 +1005,6 @@ function cvs_alter_project_release_form(
       }
       $form['project_release']['#access'] = FALSE;
       $form['rel_id']['#access'] = FALSE;
-//      $form['#pre_render'][] = 'cvs_project_release_form_pre_render';
       // Add a submit handler to copy the version values from
       // $form_state['storage'] to $form_state['values']
       $form['#submit'][] = 'cvs_release_node_form_submit';
@@ -1006,7 +1017,6 @@ function cvs_alter_project_release_form(
     // CVS tag is not yet selected.
     // Rip out everything else that might be in this form...
     _cvs_alter_project_release_form_unset_all($form);
-    unset($form['validate_version']);
 
     // ... so we can add a tag selector.
     $tags = array();
Index: cvs_local.example.inc
===================================================================
RCS file: /Users/wright/drupal/local_repo/contributions/modules/cvslog/cvs_local.example.inc,v
retrieving revision 1.12
diff -u -p -r1.12 cvs_local.example.inc
--- cvs_local.example.inc	25 Nov 2009 08:14:25 -0000	1.12
+++ cvs_local.example.inc	10 Jan 2011 19:22:54 -0000
@@ -201,12 +201,12 @@ function cvs_local_version_is_valid($ver
   }
   if ($is_valid) {
     $version->pid = $project->nid;
-    if (project_release_exists($version)) {
+    $existing_nid = project_release_exists($version);
+    if (!empty($existing_nid)) {
       // TODO: is there a better form element to mark with this error?
-      form_set_error('version_patch', t('This version already exists for this project.'));
+      form_set_error('version_patch', t('This version <a href="@release_url">already exists</a> for this project.', array('@release_url' => url('node/' . $existing_nid))));
       $is_valid = FALSE;
     }
   }
   return $is_valid;
 }
-
