RAT-240: Do not stop execution if given pattern is invalid
* Continue execution of CLI run in case of illegal patterns
* Extract pattern extraction to allow easier testing
git-svn-id: https://svn.apache.org/repos/asf/creadur/rat/trunk@1811451 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/apache-rat-core/src/main/java/org/apache/rat/Report.java b/apache-rat-core/src/main/java/org/apache/rat/Report.java
index d9a8fe3..5f28cac 100644
--- a/apache-rat-core/src/main/java/org/apache/rat/Report.java
+++ b/apache-rat-core/src/main/java/org/apache/rat/Report.java
@@ -20,10 +20,7 @@
import org.apache.commons.cli.*;
import org.apache.commons.io.FileUtils;
-import org.apache.commons.io.filefilter.NotFileFilter;
-import org.apache.commons.io.filefilter.OrFileFilter;
-import org.apache.commons.io.filefilter.RegexFileFilter;
-import org.apache.commons.io.filefilter.WildcardFileFilter;
+import org.apache.commons.io.filefilter.*;
import org.apache.rat.api.RatException;
import org.apache.rat.report.IReportable;
import org.apache.rat.report.RatReport;
@@ -37,6 +34,7 @@
import javax.xml.transform.TransformerConfigurationException;
import java.io.*;
import java.util.List;
+import java.util.regex.PatternSyntaxException;
public class Report {
@@ -86,12 +84,7 @@
} else if (cl.hasOption(EXCLUDE_FILE_CLI)) {
String excludeFileName = cl.getOptionValue(EXCLUDE_FILE_CLI);
if (excludeFileName != null) {
- List<String> excludes = FileUtils.readLines(new File(excludeFileName));
- final OrFileFilter orFilter = new OrFileFilter();
- for (String exclude : excludes) {
- orFilter.addFileFilter(new RegexFileFilter(exclude));
- }
- final FilenameFilter filter = new NotFileFilter(orFilter);
+ final FilenameFilter filter = parseExclusions(FileUtils.readLines(new File(excludeFileName)));
report.setInputFileFilter(filter);
}
}
@@ -121,6 +114,18 @@
}
}
+ private static FilenameFilter parseExclusions(List<String> excludes) throws IOException {
+ final OrFileFilter orFilter = new OrFileFilter();
+ for (String exclude : excludes) {
+ try {
+ orFilter.addFileFilter(new RegexFileFilter(exclude));
+ } catch(PatternSyntaxException e) {
+ System.err.println("Will skip given exclusion '" + exclude + "' due to " + e);
+ }
+ }
+ return new NotFileFilter(orFilter);
+ }
+
private static Options buildOptions() {
Options opts = new Options();