diff options
author | Julien HENRY <julien.henry@sonarsource.com> | 2013-06-10 18:37:09 +0200 |
---|---|---|
committer | Julien HENRY <julien.henry@sonarsource.com> | 2013-06-10 18:38:07 +0200 |
commit | 9e5fe807e20689fef2d8936c6aa2667b1732461a (patch) | |
tree | 622a220ca6e99ff6836b0c90739765a007f19b8f /sonar-batch/src/main/java/org | |
parent | 23713c7bbcf91e29b2ffa1bebcc5686652aebe3b (diff) | |
download | sonarqube-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')
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); + } +} |