From 413e36c57777b302bae5b943c6653ab50a3d3fb5 Mon Sep 17 00:00:00 2001 From: Mathieu Carbou Date: Tue, 5 Feb 2019 21:33:03 -0500 Subject: [PATCH] Fix #143: Add ability to override a default exclusion to include a pattern --- .../maven/plugin/license/util/Selection.java | 39 +++++++++++++++---- .../license/util/resource/ResourceFinder.java | 8 +++- .../plugin/license/IncludesMojoTest.java | 10 +++++ .../resources/issues/issue-143/.travis.yml | 0 4 files changed, 49 insertions(+), 8 deletions(-) create mode 100644 license-maven-plugin/src/test/resources/issues/issue-143/.travis.yml diff --git a/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/util/Selection.java b/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/util/Selection.java index 628b23ba5..eba245990 100755 --- a/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/util/Selection.java +++ b/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/util/Selection.java @@ -20,8 +20,10 @@ import java.io.File; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; +import static java.util.Arrays.*; import static java.util.Arrays.asList; /** @@ -38,8 +40,9 @@ public final class Selection { public Selection(File basedir, String[] included, String[] excluded, boolean useDefaultExcludes) { this.basedir = basedir; - this.included = buildInclusions(included); - this.excluded = buildExclusions(useDefaultExcludes, excluded); + String[] overrides = buildOverrideInclusions(useDefaultExcludes, included); + this.included = buildInclusions(included, overrides); + this.excluded = buildExclusions(useDefaultExcludes, excluded, overrides); } public String[] getSelectedFiles() { @@ -69,17 +72,39 @@ private void scanIfneeded() { } } - private static String[] buildExclusions(boolean useDefaultExcludes, String... excludes) { + private static String[] buildExclusions(boolean useDefaultExcludes, String[] excludes, String[] overrides) { List exclusions = new ArrayList(); - if (useDefaultExcludes) + if (useDefaultExcludes) { exclusions.addAll(asList(Default.EXCLUDES)); - if (excludes != null && excludes.length > 0) + } + // Remove from the default exclusion list the patterns that have been explicitly included + for (String override : overrides) { + exclusions.remove(override); + } + if (excludes != null && excludes.length > 0) { exclusions.addAll(asList(excludes)); + } return exclusions.toArray(new String[exclusions.size()]); } - private static String[] buildInclusions(String... includes) { - return includes != null && includes.length > 0 ? includes : Default.INCLUDE; + private static String[] buildInclusions(String[] includes, String[] overrides) { + // if we use the default exclusion list, we just remove + List inclusions = new ArrayList(asList(includes != null && includes.length > 0 ? includes : Default.INCLUDE)); + inclusions.removeAll(asList(overrides)); + if (inclusions.isEmpty()) { + inclusions.addAll(asList(Default.INCLUDE)); + } + return inclusions.toArray(new String[inclusions.size()]); + } + + private static String[] buildOverrideInclusions(boolean useDefaultExcludes, String[] includes) { + // return the list of patterns that we have explicitly included when using default exclude list + if (!useDefaultExcludes || includes == null || includes.length == 0) { + return new String[0]; + } + List overrides = new ArrayList(asList(Default.EXCLUDES)); + overrides.retainAll(asList(includes)); + return overrides.toArray(new String[0]); } } diff --git a/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/util/resource/ResourceFinder.java b/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/util/resource/ResourceFinder.java index ebcaad162..30c810d61 100755 --- a/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/util/resource/ResourceFinder.java +++ b/license-maven-plugin/src/main/java/com/mycila/maven/plugin/license/util/resource/ResourceFinder.java @@ -18,6 +18,7 @@ import org.apache.maven.plugin.MojoFailureException; import java.io.File; +import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.List; @@ -62,7 +63,12 @@ public void setPluginClassPath(ClassLoader classLoader) { */ public URL findResource(String resource) throws MojoFailureException { // first search relatively to the base directory - URL res = toURL(new File(basedir, resource)); + URL res ; + try { + res = toURL(new File(basedir, resource).getCanonicalFile()); + } catch (IOException e) { + throw new MojoFailureException("Resource " + resource + " not found in file system, classpath or URL: " + e.getMessage(), e); + } if (res != null) { return res; } diff --git a/license-maven-plugin/src/test/java/com/mycila/maven/plugin/license/IncludesMojoTest.java b/license-maven-plugin/src/test/java/com/mycila/maven/plugin/license/IncludesMojoTest.java index a625b34e7..10ca46f72 100755 --- a/license-maven-plugin/src/test/java/com/mycila/maven/plugin/license/IncludesMojoTest.java +++ b/license-maven-plugin/src/test/java/com/mycila/maven/plugin/license/IncludesMojoTest.java @@ -48,4 +48,14 @@ public void test_include_and_fail() throws Exception { check.execute(); } + @Test(expected = MojoExecutionException.class) + public void test_include_overrides_default_exclusion() throws Exception { + LicenseCheckMojo check = new LicenseCheckMojo(); + check.basedir = new File("src/test/resources/issues/issue-71"); + check.header = "../../check/header.txt"; + check.project = new MavenProjectStub(); + check.includes = new String[]{"**/.travis.yml"}; + check.execute(); + } + } \ No newline at end of file diff --git a/license-maven-plugin/src/test/resources/issues/issue-143/.travis.yml b/license-maven-plugin/src/test/resources/issues/issue-143/.travis.yml new file mode 100644 index 000000000..e69de29bb