diff --git a/src/main/java/org/cobbzilla/util/main/FileHeader.java b/src/main/java/org/cobbzilla/util/main/FileHeader.java index c2452d6..56df732 100644 --- a/src/main/java/org/cobbzilla/util/main/FileHeader.java +++ b/src/main/java/org/cobbzilla/util/main/FileHeader.java @@ -10,10 +10,10 @@ public class FileHeader { @Getter @Setter private String ext; @Getter @Setter private String header; @Getter @Setter private String regex; - @Getter(lazy=true) private final Pattern pattern = Pattern.compile(getRegex()+"\n", Pattern.MULTILINE); + @Getter(lazy=true) private final Pattern pattern = Pattern.compile(getRegex()+"\n", Pattern.MULTILINE | Pattern.DOTALL); @Getter @Setter private String prefix; public boolean hasPrefix () { return prefix != null; } - @Getter(lazy=true) private final Pattern prefixPattern = Pattern.compile(getPrefix()+"\n", Pattern.MULTILINE); + @Getter(lazy=true) private final Pattern prefixPattern = Pattern.compile(getPrefix()+"\n", Pattern.MULTILINE | Pattern.DOTALL); } diff --git a/src/main/java/org/cobbzilla/util/main/FileHeaderMain.java b/src/main/java/org/cobbzilla/util/main/FileHeaderMain.java index 1fa482d..d826dfa 100644 --- a/src/main/java/org/cobbzilla/util/main/FileHeaderMain.java +++ b/src/main/java/org/cobbzilla/util/main/FileHeaderMain.java @@ -18,6 +18,10 @@ public class FileHeaderMain extends BaseMain { new FilesystemWalker() .withDir(opts.getDir()) .withVisitor(file -> { + if (opts.exclude(file)) { + err("excluding: "+abs(file)); + return; + } final String ext = FileUtil.extension(file); final FileHeader header = headers.get(ext.length() > 0 ? ext.substring(1) : ext); if (header != null) { diff --git a/src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java b/src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java index 55d3288..c552652 100644 --- a/src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java +++ b/src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java @@ -9,10 +9,14 @@ import java.io.File; import java.io.IOException; import java.io.InputStream; import java.util.Arrays; +import java.util.Collections; +import java.util.List; import java.util.Map; import java.util.stream.Collectors; import static java.util.function.Function.identity; +import static org.cobbzilla.util.daemon.ZillaRuntime.empty; +import static org.cobbzilla.util.io.FileUtil.abs; import static org.cobbzilla.util.json.JsonUtil.FULL_MAPPER_ALLOW_COMMENTS; import static org.cobbzilla.util.json.JsonUtil.json; import static org.cobbzilla.util.string.StringUtil.UTF8cs; @@ -42,4 +46,20 @@ public class FileHeaderOptions extends BaseMainOptions { return Arrays.stream(headers).collect(Collectors.toMap(FileHeader::getExt, identity())); } + public static final String USAGE_EXCLUDE_PATHS = "Paths (or path parts) to exclude, separated by commas"; + public static final String OPT_EXCLUDE_PATHS = "-e"; + public static final String LONGOPT_EXCLUDE_PATHS = "--exclude-paths"; + @Option(name=OPT_EXCLUDE_PATHS, aliases=LONGOPT_EXCLUDE_PATHS, usage=USAGE_EXCLUDE_PATHS) + @Getter @Setter private String excludePaths; + + @Getter(lazy=true) private final List excludePathPatterns = initExcludePatterns(); + + private List initExcludePatterns() { + if (empty(excludePaths)) return Collections.emptyList(); + final String[] parts = excludePaths.split(","); + return Arrays.stream(parts).collect(Collectors.toList()); + } + + public boolean exclude(File f) { return getExcludePathPatterns().stream().anyMatch(p -> abs(f).contains(p)); } + }