]> source.dussan.org Git - sonarqube.git/commitdiff
SONAR-4334 Add date of the latest snapshot in the error message displayed to user
authorJulien Lancelot <julien.lancelot@gmail.com>
Thu, 30 May 2013 09:06:08 +0000 (11:06 +0200)
committerJulien Lancelot <julien.lancelot@gmail.com>
Thu, 30 May 2013 09:06:08 +0000 (11:06 +0200)
sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java
sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java

index d5caa5bde1989475eb0ce97c36c9dcb979db635a..40d12a7fd281f4b03b355c7e3e91550a89eecaad 100644 (file)
@@ -30,6 +30,7 @@ import org.sonar.api.database.DatabaseSession;
 import org.sonar.api.database.model.ResourceModel;
 import org.sonar.api.database.model.Snapshot;
 import org.sonar.api.resources.Project;
+import org.sonar.api.utils.DateUtils;
 import org.sonar.api.utils.SonarException;
 
 import java.util.Date;
@@ -67,7 +68,7 @@ public class ProjectConfigurator implements BatchComponent {
 
   public ProjectConfigurator configure(Project project) {
     Date analysisDate = loadAnalysisDate();
-    checkCurrentAnalyisIsTheLatestOne(project, analysisDate);
+    checkCurrentAnalyisIsTheLatestOne(project.getKey(), analysisDate);
 
     project
       .setConfiguration(new PropertiesConfiguration()) // will be populated by ProjectSettings
@@ -77,22 +78,19 @@ public class ProjectConfigurator implements BatchComponent {
     return this;
   }
 
-  private void checkCurrentAnalyisIsTheLatestOne(Project project, Date analysisDate) {
-    if (!isLatestAnalysis(project.getKey(), analysisDate)) {
-      throw new IllegalArgumentException(
-        "The value '" + settings.getString(CoreProperties.PROJECT_DATE_PROPERTY) + "' of the sonar.projectDate property " +
-          "can't be older than the date of last known quality snapshot " +
-          "on this project. This property must only be used to rebuild the past in a chronological order.");
-    }
-  }
-
-  boolean isLatestAnalysis(String projectKey, Date analysisDate) {
+  private void checkCurrentAnalyisIsTheLatestOne(String projectKey, Date analysisDate) {
     ResourceModel persistedProject = databaseSession.getSingleResult(ResourceModel.class, "key", projectKey, "enabled", true);
     if (persistedProject != null) {
       Snapshot lastSnapshot = databaseSession.getSingleResult(Snapshot.class, "resourceId", persistedProject.getId(), "last", true);
-      return lastSnapshot == null || lastSnapshot.getCreatedAt().before(analysisDate);
+      Date lastSnapshotCreationDate = lastSnapshot.getCreatedAt();
+      if (lastSnapshot != null && !lastSnapshotCreationDate.before(analysisDate)) {
+        throw new IllegalArgumentException(
+          "'sonar.projectDate' property cannot be older than the date of the last known quality snapshot on this project. Value: '"+ settings.getString(CoreProperties.PROJECT_DATE_PROPERTY) + "'. " +
+            "Latest quality snapshot: '"+ DateUtils.formatDate(lastSnapshotCreationDate) +"'. This property may only be used to rebuild the past in a chronological order."
+        );
+      }
     }
-    return true;
+
   }
 
   Date loadAnalysisDate() {
index ce13c0b71775ee0e10940c8b3ff15efcdb764476..9ac9408c8bd94fb704b9ab35340c95e7a213815d 100644 (file)
@@ -154,8 +154,8 @@ public class ProjectConfiguratorTest extends AbstractDbUnitTestCase {
       new ProjectConfigurator(getSession(), configuration).configure(project);
       fail();
     } catch (Exception e) {
-      assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("The value '2005-12-25' of the sonar.projectDate property can't be older than the date " +
-        "of last known quality snapshot on this project. This property must only be used to rebuild the past in a chronological order.");
+      assertThat(e).isInstanceOf(IllegalArgumentException.class).hasMessage("'sonar.projectDate' property cannot be older than the date of the last known quality snapshot on this project. " +
+        "Value: '2005-12-25'. Latest quality snapshot: '2010-12-02'. This property may only be used to rebuild the past in a chronological order.");
     }
   }