From: simonbrandhof Date: Fri, 11 Nov 2011 14:20:42 +0000 (+0100) Subject: Fix loading of file exclusions - do not cache exclusions in Project X-Git-Tag: 2.12~15 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=d13d88263cb63e09c6e471b64c7c5f87116292a6;p=sonarqube.git Fix loading of file exclusions - do not cache exclusions in Project --- diff --git a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java index f7bc914d5fe..4326b2169df 100644 --- a/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java +++ b/plugins/sonar-core-plugin/src/main/java/org/sonar/plugins/core/batch/ExcludedResourceFilter.java @@ -19,9 +19,8 @@ */ package org.sonar.plugins.core.batch; -import org.apache.commons.configuration.Configuration; -import org.sonar.api.CoreProperties; import org.sonar.api.batch.ResourceFilter; +import org.sonar.api.resources.Project; import org.sonar.api.resources.Resource; import org.sonar.api.resources.ResourceUtils; @@ -30,10 +29,10 @@ import org.sonar.api.resources.ResourceUtils; */ public class ExcludedResourceFilter implements ResourceFilter { - private Configuration conf; + private Project project; - public ExcludedResourceFilter(Configuration conf) { - this.conf = conf; + public ExcludedResourceFilter(Project project) { + this.project = project; } public boolean isIgnored(Resource resource) { @@ -42,7 +41,7 @@ public class ExcludedResourceFilter implements ResourceFilter { return false; } - String[] patterns = getExclusionPatterns(); + String[] patterns = project.getExclusionPatterns(); if (patterns != null) { for (String pattern : patterns) { if (resource.matchFilePattern(pattern)) { @@ -52,8 +51,4 @@ public class ExcludedResourceFilter implements ResourceFilter { } return false; } - - String[] getExclusionPatterns() { - return conf.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY); - } } \ No newline at end of file diff --git a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java index dbbe8fd9e13..952b32c7641 100644 --- a/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java +++ b/plugins/sonar-core-plugin/src/test/java/org/sonar/plugins/core/batch/ExcludedResourceFilterTest.java @@ -22,6 +22,7 @@ package org.sonar.plugins.core.batch; import org.apache.commons.configuration.PropertiesConfiguration; import org.junit.Test; import org.sonar.api.CoreProperties; +import org.sonar.api.resources.Project; import org.sonar.api.resources.Qualifiers; import org.sonar.api.resources.Resource; @@ -35,7 +36,8 @@ public class ExcludedResourceFilterTest { @Test public void doNotFailIfNoPatterns() { PropertiesConfiguration conf = new PropertiesConfiguration(); - ExcludedResourceFilter filter = new ExcludedResourceFilter(conf); + Project project = new Project("foo").setConfiguration(conf); + ExcludedResourceFilter filter = new ExcludedResourceFilter(project); assertThat(filter.isIgnored(mock(Resource.class)), is(false)); } @@ -43,7 +45,8 @@ public class ExcludedResourceFilterTest { public void noPatternsMatch() { PropertiesConfiguration conf = new PropertiesConfiguration(); conf.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, new String[]{"**/foo/*.java", "**/bar/*"}); - ExcludedResourceFilter filter = new ExcludedResourceFilter(conf); + Project project = new Project("foo").setConfiguration(conf); + ExcludedResourceFilter filter = new ExcludedResourceFilter(project); assertThat(filter.isIgnored(mock(Resource.class)), is(false)); } @@ -54,7 +57,8 @@ public class ExcludedResourceFilterTest { public void ignoreResourceIfMatchesPattern() { PropertiesConfiguration conf = new PropertiesConfiguration(); conf.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, new String[]{"**/foo/*.java", "**/bar/*"}); - ExcludedResourceFilter filter = new ExcludedResourceFilter(conf); + Project project = new Project("foo").setConfiguration(conf); + ExcludedResourceFilter filter = new ExcludedResourceFilter(project); Resource resource = mock(Resource.class); when(resource.matchFilePattern("**/bar/*")).thenReturn(true); @@ -66,7 +70,8 @@ public class ExcludedResourceFilterTest { public void doNotExcludeUnitTestFiles() { PropertiesConfiguration conf = new PropertiesConfiguration(); conf.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, new String[]{"**/foo/*.java", "**/bar/*"}); - ExcludedResourceFilter filter = new ExcludedResourceFilter(conf); + Project project = new Project("foo").setConfiguration(conf); + ExcludedResourceFilter filter = new ExcludedResourceFilter(project); Resource unitTest = mock(Resource.class); when(unitTest.getQualifier()).thenReturn(Qualifiers.UNIT_TEST_FILE); diff --git a/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java b/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java index 06ce83b81de..43ca03aa5c0 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java +++ b/sonar-batch/src/main/java/org/sonar/batch/ProjectConfigurator.java @@ -70,7 +70,6 @@ public class ProjectConfigurator implements BatchComponent { Date analysisDate = loadAnalysisDate(); project .setConfiguration(new PropertiesConfiguration()) // will be populated by ProjectSettings - .setExclusionPatterns(loadExclusionPatterns()) .setAnalysisDate(analysisDate) .setLatestAnalysis(isLatestAnalysis(project.getKey(), analysisDate)) .setAnalysisVersion(loadAnalysisVersion()) @@ -79,14 +78,6 @@ public class ProjectConfigurator implements BatchComponent { return this; } - String[] loadExclusionPatterns() { - String[] exclusionPatterns = settings.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY); - for (int i = 0; i < exclusionPatterns.length; i++) { - exclusionPatterns[i] = StringUtils.trim(exclusionPatterns[i]); - } - return exclusionPatterns; - } - boolean isLatestAnalysis(String projectKey, Date analysisDate) { ResourceModel persistedProject = databaseSession.getSingleResult(ResourceModel.class, "key", projectKey, "enabled", true); if (persistedProject != null) { diff --git a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java index 73997640662..134c0b0f6d9 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java +++ b/sonar-batch/src/main/java/org/sonar/batch/bootstrap/ProjectModule.java @@ -33,7 +33,6 @@ import org.sonar.api.utils.IocContainer; import org.sonar.api.utils.SonarException; import org.sonar.batch.*; import org.sonar.batch.components.TimeMachineConfiguration; -import org.sonar.batch.config.DeprecatedConfigurationProvider; import org.sonar.batch.config.ProjectSettings; import org.sonar.batch.events.EventBus; import org.sonar.batch.index.DefaultIndex; @@ -70,7 +69,6 @@ public class ProjectModule extends Module { addCoreSingleton(project); addCoreSingleton(project.getConfiguration()); addCoreSingleton(ProjectSettings.class); - addAdapter(new DeprecatedConfigurationProvider()); addCoreSingleton(IocContainer.class); for (Object component : projectDefinition.getContainerExtensions()) { @@ -134,9 +132,9 @@ public class ProjectModule extends Module { DefaultIndex index = getComponentByType(DefaultIndex.class); index.setCurrentProject(project, - getComponentByType(ResourceFilters.class), - getComponentByType(ViolationFilters.class), - getComponentByType(RulesProfile.class)); + getComponentByType(ResourceFilters.class), + getComponentByType(ViolationFilters.class), + getComponentByType(RulesProfile.class)); // TODO See http://jira.codehaus.org/browse/SONAR-2126 // previously MavenProjectBuilder was responsible for creation of ProjectFileSystem diff --git a/sonar-batch/src/main/java/org/sonar/batch/config/DeprecatedConfigurationProvider.java b/sonar-batch/src/main/java/org/sonar/batch/config/DeprecatedConfigurationProvider.java deleted file mode 100644 index 636a5adde25..00000000000 --- a/sonar-batch/src/main/java/org/sonar/batch/config/DeprecatedConfigurationProvider.java +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Sonar, open source software quality management tool. - * Copyright (C) 2008-2011 SonarSource - * mailto:contact AT sonarsource DOT com - * - * Sonar 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. - * - * Sonar 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 Sonar; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 - */ -package org.sonar.batch.config; - -import org.apache.commons.configuration.Configuration; -import org.picocontainer.injectors.ProviderAdapter; -import org.sonar.api.resources.Project; - -public class DeprecatedConfigurationProvider extends ProviderAdapter { - - public Configuration provide(Project project, ProjectSettings settings) {//NOSONAR the parameter ProjectSettings is declared to be sure that it is initialized - // configuration is valid because it has been updated by ProjectSettings - return project.getConfiguration(); - } -} - diff --git a/sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java b/sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java index 7a7fb5a1886..6a37e61e5a5 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java +++ b/sonar-batch/src/main/java/org/sonar/batch/config/ProjectSettings.java @@ -29,6 +29,7 @@ import org.sonar.api.resources.Project; import org.sonar.core.config.ConfigurationUtils; import org.sonar.jpa.session.DatabaseSessionFactory; +import java.util.Iterator; import java.util.List; /** @@ -88,7 +89,19 @@ public class ProjectSettings extends Settings { } private void updateDeprecatedCommonsConfiguration() { + System.out.println("---------- SETTINGS -------------"); + for (String s : properties.keySet()) { + System.out.println(s + "=" + properties.get(s)); + } ConfigurationUtils.copyToCommonsConfiguration(properties, deprecatedCommonsConf); + + System.out.println("---------- DEP CONF -------------"); + Iterator keys = deprecatedCommonsConf.getKeys(); + while(keys.hasNext()) { + String key = (String)keys.next(); + System.out.println(key + "=" + deprecatedCommonsConf.getString(key)); + } + System.out.println("----------------------------------"); } /** diff --git a/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java b/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java index 3d556413ee8..ddeb6bd0204 100644 --- a/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java +++ b/sonar-batch/src/test/java/org/sonar/batch/ProjectConfiguratorTest.java @@ -36,44 +36,6 @@ import static org.junit.Assert.assertTrue; public class ProjectConfiguratorTest extends AbstractDbUnitTestCase { - @Test - public void testNoExclusionPatterns() { - Project project = new Project("key"); - new ProjectConfigurator(getSession(), new Settings()).configure(project); - assertThat(project.getExclusionPatterns().length, is(0)); - } - - @Test - public void testManyExclusionPatterns() { - Settings settings = new Settings(); - settings.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, "**/*,foo,*/bar"); - - Project project = new Project("key"); - new ProjectConfigurator(getSession(), settings).configure(project); - - assertThat(project.getExclusionPatterns().length, is(3)); - assertThat(project.getExclusionPatterns()[0], is("**/*")); - assertThat(project.getExclusionPatterns()[1], is("foo")); - assertThat(project.getExclusionPatterns()[2], is("*/bar")); - } - - /** - * See http://jira.codehaus.org/browse/SONAR-2261 - * Note that several exclusions separated by comma would be correctly trimmed by commons-configuration library. - * So issue is only with a single pattern, which contains spaces. - */ - @Test - public void trimExclusionPatterns() { - Settings configuration = new Settings(); - configuration.setProperty(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY, " foo "); - - Project project = new Project("key"); - new ProjectConfigurator(getSession(), configuration).configure(project); - - assertThat(project.getExclusionPatterns().length, is(1)); - assertThat(project.getExclusionPatterns()[0], is("foo")); - } - @Test public void getLanguageFromConfiguration() { Settings configuration = new Settings(); diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java index 99432b0313f..f2ef02f5746 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/resources/Project.java @@ -101,7 +101,6 @@ public class Project extends Resource { private String languageKey; private Date analysisDate; private AnalysisType analysisType; - private String[] exclusionPatterns; private String analysisVersion; private boolean latestAnalysis; @@ -363,15 +362,21 @@ public class Project extends Resource { * Patterns of resource exclusion as defined in project settings page. */ public String[] getExclusionPatterns() { - return exclusionPatterns; + String[] exclusions = configuration.getStringArray(CoreProperties.PROJECT_EXCLUSIONS_PROPERTY); + for (int index=0 ; index