]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-3308 Fail batch if trying to delete released version
authorFabrice Bellingard <bellingard@gmail.com>
Thu, 24 May 2012 16:42:13 +0000 (18:42 +0200)
committerFabrice Bellingard <bellingard@gmail.com>
Thu, 24 May 2012 16:52:38 +0000 (18:52 +0200)
=> Message given to the user: "A Sonar analysis can't delete a
   released version that already exists in the project history
   (version XXX). Please change the version of the project or
   clean its history first."

plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/sensors/VersionEventsSensor.java
plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/sensors/VersionEventsSensorTest.java

index b1fab18025828497c5fb019f554db67fb54b84fb..39bb7264db3752d09461020f96928007e8cb09b9 100644 (file)
@@ -19,8 +19,6 @@
  */
 package org.sonar.plugins.core.sensors;
 
-import java.util.Iterator;
-
 import org.apache.commons.lang.StringUtils;
 import org.sonar.api.batch.Event;
 import org.sonar.api.batch.Sensor;
@@ -28,6 +26,8 @@ import org.sonar.api.batch.SensorContext;
 import org.sonar.api.resources.Project;
 import org.sonar.core.NotDryRun;
 
+import java.util.Iterator;
+
 @NotDryRun
 public class VersionEventsSensor implements Sensor {
 
@@ -47,12 +47,19 @@ public class VersionEventsSensor implements Sensor {
 
   private void deleteDeprecatedEvents(Project project, SensorContext context) {
     String version = project.getAnalysisVersion();
-    String snapshotVersionToDelete = (version.endsWith(SNAPSHOT_SUFFIX) ? "" : version + SNAPSHOT_SUFFIX);
+    boolean isReleaseVersion = !version.endsWith(SNAPSHOT_SUFFIX);
+    String snapshotVersionToDelete = isReleaseVersion ? version + SNAPSHOT_SUFFIX : "";
     for (Iterator<Event> it = context.getEvents(project).iterator(); it.hasNext();) {
       Event event = it.next();
-      if (event.isVersionCategory() && (version.equals(event.getName()) || snapshotVersionToDelete.equals(event.getName()))) {
-        it.remove();
-        context.deleteEvent(event);
+      if (event.isVersionCategory()) {
+        if (snapshotVersionToDelete.equals(event.getName()) || (version.equals(event.getName()) && !isReleaseVersion)) {
+          it.remove();
+          context.deleteEvent(event);
+        } else if (version.equals(event.getName()) && isReleaseVersion) {
+          // we try to delete a released version that already exists in the project history => this shouldn't happen
+          throw new IllegalStateException("A Sonar analysis can't delete a released version that already exists in the project history (version "
+            + version + "). Please change the version of the project or clean its history first.");
+        }
       }
     }
   }
index 65af02fcab27d9a7d2903f3cb8a88f933c3f9ab9..b92dbf587cfee3b90385f8f47585111d08a677f2 100644 (file)
@@ -20,7 +20,9 @@
 package org.sonar.plugins.core.sensors;
 
 import com.google.common.collect.Lists;
+import org.junit.Rule;
 import org.junit.Test;
+import org.junit.rules.ExpectedException;
 import org.sonar.api.batch.Event;
 import org.sonar.api.batch.SensorContext;
 import org.sonar.api.resources.Project;
@@ -39,6 +41,9 @@ import static org.mockito.Mockito.when;
 
 public class VersionEventsSensorTest {
 
+  @Rule
+  public ExpectedException thrown = ExpectedException.none();
+
   @Test
   public void shouldDoNothingIfNoVersion() {
     VersionEventsSensor sensor = new VersionEventsSensor();
@@ -102,6 +107,31 @@ public class VersionEventsSensorTest {
     verify(context).createEvent(eq(project), eq("1.5"), (String) isNull(), eq(Event.CATEGORY_VERSION), (Date) isNull());
   }
 
+  @Test
+  public void shouldFailIfTryingToDeleteReleasedVersion() {
+    // Given
+    Event snapshotEvent1 = mockVersionEvent("1.5-SNAPSHOT");
+    Event releaseEvent2 = mockVersionEvent("1.4");
+    Event snapshotEvent2 = mockVersionEvent("1.3-SNAPSHOT");
+
+    VersionEventsSensor sensor = new VersionEventsSensor();
+    SensorContext context = mock(SensorContext.class);
+
+    Project project = mock(Project.class);
+    when(project.getAnalysisVersion()).thenReturn("1.4");
+
+    when(context.getEvents(project)).thenReturn(Lists.newArrayList(snapshotEvent1, releaseEvent2, snapshotEvent2));
+
+    // Expect
+    thrown.expect(IllegalStateException.class);
+    thrown.expectMessage("A Sonar analysis can't delete a released version that already exists in the project history (version 1.4). " +
+      "Please change the version of the project or clean its history first.");
+
+    // When
+    sensor.analyse(project, context);
+
+  }
+
   private Event mockVersionEvent(String version) {
     Event event = mock(Event.class);
     when(event.isVersionCategory()).thenReturn(true);