From 32fb07cb52f15337c1889c538c2e13f75c31d5f1 Mon Sep 17 00:00:00 2001 From: Simon Brandhof Date: Thu, 21 Feb 2013 13:51:45 +0100 Subject: [PATCH] Fix exclusions by absolute path on Windows --- .../scan/filesystem/FileFilterContext.java | 3 +- .../filesystem/FileFilterContextTest.java | 45 +++++++++++++++++++ .../api/scan/filesystem/FileSystemFilter.java | 2 +- 3 files changed, 48 insertions(+), 2 deletions(-) create mode 100644 sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileFilterContextTest.java diff --git a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileFilterContext.java b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileFilterContext.java index 3a5219d28d3..3fe6428edd7 100644 --- a/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileFilterContext.java +++ b/sonar-batch/src/main/java/org/sonar/batch/scan/filesystem/FileFilterContext.java @@ -19,6 +19,7 @@ */ package org.sonar.batch.scan.filesystem; +import org.apache.commons.io.FilenameUtils; import org.sonar.api.batch.FileFilter; import org.sonar.api.scan.filesystem.FileType; import org.sonar.api.scan.filesystem.ModuleFileSystem; @@ -72,7 +73,7 @@ class FileFilterContext implements FileFilter.Context { } FileFilterContext setCanonicalPath(String s) { - this.fileCanonicalPath = s; + this.fileCanonicalPath = FilenameUtils.separatorsToUnix(s); return this; } } diff --git a/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileFilterContextTest.java b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileFilterContextTest.java new file mode 100644 index 00000000000..49f79704fa0 --- /dev/null +++ b/sonar-batch/src/test/java/org/sonar/batch/scan/filesystem/FileFilterContextTest.java @@ -0,0 +1,45 @@ +/* + * Sonar, open source software quality management tool. + * Copyright (C) 2008-2012 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.scan.filesystem; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.sonar.api.scan.filesystem.ModuleFileSystem; + +import java.io.File; +import java.io.IOException; + +import static org.fest.assertions.Assertions.assertThat; +import static org.mockito.Mockito.mock; + +public class FileFilterContextTest { + @Rule + public TemporaryFolder temp = new TemporaryFolder(); + + @Test + public void should_use_slash_for_canonical_path() throws IOException { + // even on windows + File file = temp.newFile("foo.txt"); + FileFilterContext context = new FileFilterContext(mock(ModuleFileSystem.class)); + context.setCanonicalPath(file.getCanonicalPath()); + assertThat(context.canonicalPath()).doesNotContain("\\").contains("/"); + } +} diff --git a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java index c7bc9ba8831..3a0ce8e54fd 100644 --- a/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java +++ b/sonar-plugin-api/src/main/java/org/sonar/api/scan/filesystem/FileSystemFilter.java @@ -49,7 +49,7 @@ public interface FileSystemFilter extends BatchExtension { String relativePath(); /** - * Absolute file path. Never return null. + * Absolute file path. Directory separator is slash, even on windows. Never return null. */ String canonicalPath(); } -- 2.39.5