Quellcode durchsuchen

allow shallow (non recursive) processing

tags/2.0.1
Jonathan Cobb vor 4 Jahren
Ursprung
Commit
6cc7a8a279
2 geänderte Dateien mit 58 neuen und 37 gelöschten Zeilen
  1. +52
    -37
      src/main/java/org/cobbzilla/util/main/FileHeaderMain.java
  2. +6
    -0
      src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java

+ 52
- 37
src/main/java/org/cobbzilla/util/main/FileHeaderMain.java Datei anzeigen

@@ -3,7 +3,10 @@ package org.cobbzilla.util.main;
import org.cobbzilla.util.io.FileUtil;
import org.cobbzilla.util.io.FilesystemWalker;

import java.io.File;
import java.util.Arrays;
import java.util.Map;
import java.util.Objects;
import java.util.regex.Matcher;

import static org.cobbzilla.util.io.FileUtil.*;
@@ -15,43 +18,55 @@ public class FileHeaderMain extends BaseMain<FileHeaderOptions> {
@Override protected void run() throws Exception {
final FileHeaderOptions opts = getOptions();
final Map<String, FileHeader> headers = opts.getHeaders();
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) {
String contents = toStringOrDie(file);
if (contents == null) contents = "";
final String prefix;
if (header.hasPrefix()) {
final Matcher prefixMatcher = header.getPrefixPattern().matcher(contents);
if (!prefixMatcher.find()) {
err("prefix not found ("+header.getPrefix().replace("\n", "\\n")+") in file: "+abs(file));
prefix = "";
} else {
prefix = contents.substring(0, prefixMatcher.start())
+ contents.substring(prefixMatcher.start(), prefixMatcher.end());
contents = contents.substring(prefixMatcher.end());
}
} else {
prefix = "";
}
final Matcher matcher = header.getPattern().matcher(contents);
if (matcher.find()) {
contents = prefix + contents.substring(0, matcher.start())
+ header.getHeader() + "\n" + contents.substring(matcher.end());
} else {
contents = prefix + header.getHeader() + "\n" + contents;
}
out(abs(file));
toFileOrDie(file, contents);
}
}).walk();
if (opts.isShallow()) {
Arrays.stream(Objects.requireNonNull(opts.getDir().listFiles()))
.forEach(file -> processFile(opts, headers, file));
} else {
new FilesystemWalker()
.withDir(opts.getDir())
.withVisitor(file -> processFile(opts, headers, file))
.walk();
}
}

private void processFile(FileHeaderOptions opts, Map<String, FileHeader> headers, File file) {
if (opts.exclude(file)) {
err("excluding: "+abs(file));
return;
}
if (!file.isFile()) {
err("skipping non-file: "+abs(file));
return;
}
final String ext = FileUtil.extension(file);
final FileHeader header = headers.get(ext.length() > 0 ? ext.substring(1) : ext);
if (header != null) {
String contents = toStringOrDie(file);
if (contents == null) contents = "";
final String prefix;
if (header.hasPrefix()) {
final Matcher prefixMatcher = header.getPrefixPattern().matcher(contents);
if (!prefixMatcher.find()) {
err("prefix not found ("+header.getPrefix().replace("\n", "\\n")+") in file: "+abs(file));
prefix = "";
} else {
prefix = contents.substring(0, prefixMatcher.start())
+ contents.substring(prefixMatcher.start(), prefixMatcher.end());
contents = contents.substring(prefixMatcher.end());
}
} else {
prefix = "";
}
final Matcher matcher = header.getPattern().matcher(contents);
if (matcher.find()) {
contents = prefix + contents.substring(0, matcher.start())
+ header.getHeader() + "\n" + contents.substring(matcher.end());
} else {
contents = prefix + header.getHeader() + "\n" + contents;
}
out(abs(file));
toFileOrDie(file, contents);
}
}

}

+ 6
- 0
src/main/java/org/cobbzilla/util/main/FileHeaderOptions.java Datei anzeigen

@@ -29,6 +29,12 @@ public class FileHeaderOptions extends BaseMainOptions {
@Option(name=OPT_DIR, aliases=LONGOPT_DIR, usage=USAGE_DIR, required=true)
@Getter @Setter private File dir;

public static final String USAGE_SHALLOW = "Do not recurse into subdirectories";
public static final String OPT_SHALLOW = "-S";
public static final String LONGOPT_SHALLOW = "--shallow";
@Option(name=OPT_SHALLOW, aliases=LONGOPT_SHALLOW, usage=USAGE_SHALLOW)
@Getter @Setter private boolean shallow = false;

public static final String USAGE_HEADERS_JSON = "JSON file with header info, or - to read from stdin";
public static final String OPT_HEADERS_JSON = "-H";
public static final String LONGOPT_HEADERS_JSON = "--headers";


Laden…
Abbrechen
Speichern