aboutsummaryrefslogtreecommitdiffstats
path: root/sonar-batch/src/main/java/org
diff options
context:
space:
mode:
authorJulien HENRY <julien.henry@sonarsource.com>2013-06-10 18:37:09 +0200
committerJulien HENRY <julien.henry@sonarsource.com>2013-06-10 18:38:07 +0200
commit9e5fe807e20689fef2d8936c6aa2667b1732461a (patch)
tree622a220ca6e99ff6836b0c90739765a007f19b8f /sonar-batch/src/main/java/org
parent23713c7bbcf91e29b2ffa1bebcc5686652aebe3b (diff)
downloadsonarqube-9e5fe807e20689fef2d8936c6aa2667b1732461a.tar.gz
sonarqube-9e5fe807e20689fef2d8936c6aa2667b1732461a.zip
SONAR-4221 Fix regression with property loading and module exclusions
Diffstat (limited to 'sonar-batch/src/main/java/org')
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSettings.java12
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectExclusions.java9
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java105
-rw-r--r--sonar-batch/src/main/java/org/sonar/batch/scan/ProjectSettingsReady.java42
4 files changed, 114 insertions, 54 deletions
diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSettings.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSettings.java
index 2bed616e8f6..a50b3d40eb0 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSettings.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/BatchSettings.java
@@ -26,6 +26,7 @@ import org.json.simple.JSONValue;
import org.slf4j.LoggerFactory;
import org.sonar.api.CoreProperties;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
+import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.config.PropertyDefinitions;
import org.sonar.api.config.Settings;
@@ -54,13 +55,13 @@ public class BatchSettings extends Settings {
init(null);
}
- public void init(@Nullable ProjectDefinition rootProject) {
+ public void init(@Nullable ProjectReactor reactor) {
savedProperties = this.getProperties();
- if (rootProject != null) {
+ if (reactor != null) {
LoggerFactory.getLogger(BatchSettings.class).info("Load project settings");
String branch = bootstrapSettings.property(CoreProperties.PROJECT_BRANCH_PROPERTY);
- String projectKey = rootProject.getKey();
+ String projectKey = reactor.getRoot().getKey();
if (StringUtils.isNotBlank(branch)) {
projectKey = String.format("%s:%s", projectKey, branch);
}
@@ -71,9 +72,8 @@ public class BatchSettings extends Settings {
}
addProperties(bootstrapSettings.properties());
- // Reload reactor properties in case reactor has changed since bootstrap
- if (rootProject != null) {
- addProperties(rootProject.getProperties());
+ if (reactor != null) {
+ addProperties(reactor.getRoot().getProperties());
}
properties.putAll(System.getenv());
addProperties(System.getProperties());
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectExclusions.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectExclusions.java
index 468d2203a63..a408ec8d400 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectExclusions.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectExclusions.java
@@ -19,8 +19,6 @@
*/
package org.sonar.batch.scan;
-import org.sonar.api.task.TaskComponent;
-
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -30,6 +28,7 @@ import org.sonar.api.batch.bootstrap.ProjectBuilder;
import org.sonar.api.batch.bootstrap.ProjectDefinition;
import org.sonar.api.batch.bootstrap.ProjectReactor;
import org.sonar.api.config.Settings;
+import org.sonar.api.task.TaskComponent;
import javax.annotation.Nullable;
@@ -46,14 +45,16 @@ public class ProjectExclusions implements TaskComponent {
private ProjectReactor reactor;
public ProjectExclusions(Settings settings, ProjectReactor reactor,
+ // exclusions are applied when settings are loaded from Sonar DB
+ ProjectSettingsReady settingsReady,
// exclusions are applied when the project is completely defined by extensions
@Nullable ProjectBuilder[] projectBuilders) {
this.settings = settings;
this.reactor = reactor;
}
- public ProjectExclusions(Settings settings, ProjectReactor reactor) {
- this(settings, reactor, new ProjectBuilder[0]);
+ public ProjectExclusions(Settings settings, ProjectReactor reactor, ProjectSettingsReady settingsReady) {
+ this(settings, reactor, settingsReady, new ProjectBuilder[0]);
}
public void start() {
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
index 857ffb174ab..aaa1413b901 100644
--- a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectScanContainer.java
@@ -30,8 +30,25 @@ import org.sonar.batch.DefaultFileLinesContextFactory;
import org.sonar.batch.DefaultResourceCreationLock;
import org.sonar.batch.ProjectConfigurator;
import org.sonar.batch.ProjectTree;
-import org.sonar.batch.bootstrap.*;
-import org.sonar.batch.index.*;
+import org.sonar.batch.bootstrap.BatchSettings;
+import org.sonar.batch.bootstrap.ExtensionInstaller;
+import org.sonar.batch.bootstrap.ExtensionMatcher;
+import org.sonar.batch.bootstrap.ExtensionUtils;
+import org.sonar.batch.bootstrap.MetricProvider;
+import org.sonar.batch.index.Caches;
+import org.sonar.batch.index.ComponentDataCache;
+import org.sonar.batch.index.ComponentDataPersister;
+import org.sonar.batch.index.DefaultIndex;
+import org.sonar.batch.index.DefaultPersistenceManager;
+import org.sonar.batch.index.DefaultResourcePersister;
+import org.sonar.batch.index.DependencyPersister;
+import org.sonar.batch.index.EventPersister;
+import org.sonar.batch.index.LinkPersister;
+import org.sonar.batch.index.MeasurePersister;
+import org.sonar.batch.index.MemoryOptimizer;
+import org.sonar.batch.index.ResourceCache;
+import org.sonar.batch.index.SnapshotCache;
+import org.sonar.batch.index.SourcePersister;
import org.sonar.batch.issue.DeprecatedViolations;
import org.sonar.batch.issue.IssueCache;
import org.sonar.batch.issue.IssuePersister;
@@ -71,49 +88,51 @@ public class ProjectScanContainer extends ComponentContainer {
private void addBatchComponents() {
add(
- DefaultResourceCreationLock.class,
- DefaultPersistenceManager.class,
- DependencyPersister.class,
- EventPersister.class,
- LinkPersister.class,
- MeasurePersister.class,
- MemoryOptimizer.class,
- DefaultResourcePersister.class,
- SourcePersister.class,
- DefaultNotificationManager.class,
- MetricProvider.class,
- ProjectConfigurator.class,
- DefaultIndex.class,
- DefaultFileLinesContextFactory.class,
- ProjectLock.class,
- LastSnapshots.class,
- Caches.class,
- SnapshotCache.class,
- ResourceCache.class,
- ComponentDataCache.class,
- ComponentDataPersister.class,
+ DefaultResourceCreationLock.class,
+ DefaultPersistenceManager.class,
+ DependencyPersister.class,
+ EventPersister.class,
+ LinkPersister.class,
+ MeasurePersister.class,
+ MemoryOptimizer.class,
+ DefaultResourcePersister.class,
+ SourcePersister.class,
+ DefaultNotificationManager.class,
+ MetricProvider.class,
+ ProjectConfigurator.class,
+ DefaultIndex.class,
+ DefaultFileLinesContextFactory.class,
+ ProjectLock.class,
+ LastSnapshots.class,
+ Caches.class,
+ SnapshotCache.class,
+ ResourceCache.class,
+ ComponentDataCache.class,
+ ComponentDataPersister.class,
- // issues
- IssueUpdater.class,
- FunctionExecutor.class,
- IssueWorkflow.class,
- DeprecatedViolations.class,
- IssueCache.class,
- ScanIssueStorage.class,
- IssuePersister.class,
- IssueNotifications.class,
+ // issues
+ IssueUpdater.class,
+ FunctionExecutor.class,
+ IssueWorkflow.class,
+ DeprecatedViolations.class,
+ IssueCache.class,
+ ScanIssueStorage.class,
+ IssuePersister.class,
+ IssueNotifications.class,
- // tests
- TestPlanPerspectiveLoader.class,
- TestablePerspectiveLoader.class,
- TestPlanBuilder.class,
- TestableBuilder.class,
- ScanGraph.create(),
- GraphPersister.class,
+ // tests
+ TestPlanPerspectiveLoader.class,
+ TestablePerspectiveLoader.class,
+ TestPlanBuilder.class,
+ TestableBuilder.class,
+ ScanGraph.create(),
+ GraphPersister.class,
- // lang
- HighlightableBuilder.class,
- SymbolizableBuilder.class);
+ // lang
+ HighlightableBuilder.class,
+ SymbolizableBuilder.class,
+
+ ProjectSettingsReady.class);
}
private void fixMavenExecutor() {
@@ -129,8 +148,6 @@ public class ProjectScanContainer extends ComponentContainer {
@Override
protected void doAfterStart() {
ProjectTree tree = getComponentByType(ProjectTree.class);
- BatchSettings settings = getComponentByType(BatchSettings.class);
- settings.init(tree.getProjectDefinition(tree.getRootProject()));
scanRecursively(tree.getRootProject());
}
diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectSettingsReady.java b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectSettingsReady.java
new file mode 100644
index 00000000000..4a267d55196
--- /dev/null
+++ b/sonar-batch/src/main/java/org/sonar/batch/scan/ProjectSettingsReady.java
@@ -0,0 +1,42 @@
+/*
+ * SonarQube, open source software quality management tool.
+ * Copyright (C) 2008-2013 SonarSource
+ * mailto:contact AT sonarsource DOT com
+ *
+ * SonarQube is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * SonarQube is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+package org.sonar.batch.scan;
+
+import org.sonar.api.batch.bootstrap.ProjectReactor;
+import org.sonar.batch.bootstrap.BatchSettings;
+
+/**
+ * Barrier to control the project settings are loaded from Sonar DB before applying project exclusions
+ * </ul>
+ */
+public class ProjectSettingsReady {
+
+ private final ProjectReactor reactor;
+ private final BatchSettings settings;
+
+ public ProjectSettingsReady(ProjectReactor reactor, BatchSettings settings) {
+ this.reactor = reactor;
+ this.settings = settings;
+ }
+
+ public void start() {
+ settings.init(reactor);
+ }
+}