- Change 117522 by jkristian@jkristian-home on 2003/11/11 00:46:57
-
- Renamed UnixStyleFilter to UnixCommand.
- Improved.
-
- Affected files ...
-
- ... //users/jkristian/lib/UnixCommandResources.properties#1 branch
- ... //users/jkristian/lib/UnixStyleFilterResources.properties#2 delete
- ... //users/jkristian/lib/p4d2pResources.properties#3 edit
- ... //users/jkristian/src/UnixCommand.java#1 add
- ... //users/jkristian/src/UnixStyleFilter.java#3 delete
- ... //users/jkristian/src/p4d2p.java#3 edit
-
- Differences ...
-
- ==== //users/jkristian/lib/p4d2pResources.properties#3 (text) ====
-
- @@ -46,3 +46,4 @@
- \ John Kristian <jkristian@docent.com>. Thanks to Gurusamy Sarathy for\n\
- \ inspiration; but I accept all blame.\n\
-
- +diff.default: converting default diff (not recommended for `patch`)\n
-
- ==== //users/jkristian/src/p4d2p.java#3 (text) ====
-
- @@ -1,8 +1,5 @@
- import java.io.File;
- -import java.io.BufferedReader;
- -import java.io.InputStreamReader;
- import java.io.IOException;
- -import java.io.PushbackReader;
- import java.io.Writer;
- import java.text.DateFormat;
- import java.text.SimpleDateFormat;
- @@ -17,51 +14,65 @@
- public class p4d2p implements LineWriter {
-
- public static void main(String[] ARGV) throws IOException {
- - UnixStyleFilter filter = new UnixStyleFilter(p4d2p.class, "hi::o:p:v", ARGV);
- + UnixCommand command = new UnixCommand(p4d2p.class, "hi::o:p:v", ARGV);
- try {
- - Properties options = filter.getOptions();
- - if (options.getProperty("h") != null) {
- - filter.writeError(filter.getHelp());
- + Properties options = command.getOptions();
- + if (options.get("h") != null) {
- + command.writeError(command.getHelp());
- } else {
- - filter.setEditInPlace(options.getProperty("i"));
- - LineWriter self = new p4d2p(filter, filter.getOutputWriter());
- - while (filter.getFile()) {
- - Copier.copyAll(filter.getInputLineReader(), self);
- + command.setEditInPlace(options.getProperty("i"));
- + LineWriter self = new p4d2p(command);
- + while (command.getFile()) {
- + Copier.copyAll(command.getInputLineReader(), self);
- self.close();
- }
- }
- } finally {
- - filter.flush();
- + command.flush();
- }
- }
-
- - private String oldFile = null;
- - private String oldNote;
- - private String newFile;
- - private String newNote;
- - private List movedFiles = new ArrayList();
- + protected p4d2p(UnixCommand command) throws IOException {
- + this.command = command;
- + this.options = command.getOptions();
- + this.verbose = (options.get("v") != null);
- + this.out = command.getOutputWriter();
- + }
- +
- + protected static DateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); // ISO 8601
- + protected static String epoch = timeFormat.format(new Date(0));
- +
- + protected String now = timeFormat.format(new Date());
- + protected UnixCommand command;
- + protected Properties options;
- + protected boolean verbose;
- + protected Writer out;
- + protected Writer err;
-
- - private static final Pattern P4_DESCRIBE_MOVE = Pattern.compile("^\\.\\.\\. (//.+?\\#\\d+ (add|branch|delete))$", Pattern.MULTILINE);
- - private static final Pattern P4_MOVED_FILE = Pattern.compile("//(.+?)(\\#\\d+) (\\w*)$", Pattern.MULTILINE);
- - private static final Pattern P4_DESCRIBE_HEADER = Pattern.compile("^==== //(.+?)(\\#\\d+) .*?====( \\(.+\\))?$", Pattern.MULTILINE);
- - private static final Pattern P4_DIFF_HEADER = Pattern.compile("^==== //(.+?)(\\#\\d+) +- +(.+?) +====( \\(.+\\))?$", Pattern.MULTILINE);
- - private static final Pattern P4_DIFF2_HEADER = Pattern.compile("^==== //(.+?)(\\#\\d+) +\\(.+?\\) +- +(.+?)(\\#\\d+) +\\(.+?\\) +==== +\\w+$", Pattern.MULTILINE);
- + protected String oldFile = null;
- + protected String oldNote;
- + protected String newFile;
- + protected String newNote;
- + protected List movedFiles = new ArrayList();
-
- - private static final Pattern VERSION = Pattern.compile("\\#(\\d+)");
- - private static final Pattern UNIFIED_DIFF = Pattern.compile("^\\@\\@\\s.*\\s\\@\\@$", Pattern.MULTILINE);
- - private static final Pattern CONTEXT_DIFF = Pattern.compile("^\\*+$", Pattern.MULTILINE);
- - private static final Pattern DEFAULT_DIFF = Pattern.compile("^\\d+(,\\d+)?[acd]\\d+", Pattern.MULTILINE);
- + protected static Pattern P4_DESCRIBE_MOVE = Pattern.compile("^\\.\\.\\. (//.+?\\#\\d+ (add|branch|delete))$", Pattern.MULTILINE);
- + protected static Pattern P4_MOVED_FILE = Pattern.compile("//(.+?)(\\#\\d+) (\\w*)$", Pattern.MULTILINE);
- + protected static Pattern P4_DESCRIBE_HEADER = Pattern.compile("^==== //(.+?)(\\#\\d+) .*?====( \\(.+\\))?$", Pattern.MULTILINE);
- + protected static Pattern P4_DIFF_HEADER = Pattern.compile("^==== //(.+?)(\\#\\d+) +- +(.+?) +====( \\(.+\\))?$", Pattern.MULTILINE);
- + protected static Pattern P4_DIFF2_HEADER = Pattern.compile("^==== //(.+?)(\\#\\d+) +\\(.+?\\) +- +(.+?)(\\#\\d+) +\\(.+?\\) +==== +\\w+$",
- + Pattern.MULTILINE);
- + protected static Pattern VERSION = Pattern.compile("\\#(\\d+)");
- + protected static Pattern UNIFIED_DIFF = Pattern.compile("^\\@\\@\\s.*\\s\\@\\@$", Pattern.MULTILINE);
- + protected static Pattern CONTEXT_DIFF = Pattern.compile("^\\*+$", Pattern.MULTILINE);
- + protected static Pattern DEFAULT_DIFF = Pattern.compile("^\\d+(,\\d+)?[acd]\\d+", Pattern.MULTILINE);
-
- public void write(StringBuffer line) throws IOException {
- - //if (verbose) out.write("// write(line)\n");
- Matcher m;
-
- if ((m = P4_DESCRIBE_MOVE.matcher(line)).find()) { // add, branch or delete
- - if (verbose) out.write("// p4 describe move\n");
- movedFiles.add(m.group(1));
-
- } else if ((m = P4_DIFF_HEADER.matcher(line)).find()) {
- - if (verbose) out.write("// p4 diff header\n");
- oldFile = m.group(1);
- newFile = m.group(3);
- oldNote = " " + options.getProperty("o", m.group(2));
- @@ -69,14 +80,12 @@
- newNote = " " + ((lastModified == 0) ? now : timeFormat.format(new Date(lastModified)));
-
- } else if ((m = P4_DIFF2_HEADER.matcher(line)).find()) {
- - if (verbose) out.write("// p4 diff2 header\n");
- oldFile = m.group(1);
- newFile = m.group(3);
- oldNote = " " + options.getProperty("o", m.group(2));
- newNote = " " + m.group(4);
-
- } else if ((m = P4_DESCRIBE_HEADER.matcher(line)).find()) {
- - if (verbose) out.write("// p4 describe header\n");
- newFile = m.group(1);
- newNote = " " + m.group(2);
- oldFile = newFile;
- @@ -87,26 +96,25 @@
- } else if (oldFile != null) {
-
- if ((m = UNIFIED_DIFF.matcher(line)).find()) { // the preferred format for `patch`
- - if (verbose) System.err.println("emitting diff -u header");
- out.write("Index: //" + oldFile + "\n");
- out.write("--- " + oldFile + oldNote + "\n");
- out.write("+++ " + oldFile + newNote + "\n");
- oldFile = null;
-
- } else if ((m = CONTEXT_DIFF.matcher(line)).find()) {
- - if (verbose) System.err.println("emitting diff -c header");
- out.write("Index: //" + oldFile + "\n");
- out.write("*** " + oldFile + oldNote + "\n");
- out.write("--- " + oldFile + newNote + "\n");
- oldFile = null;
-
- } else if ((m = DEFAULT_DIFF.matcher(line)).find()) {
- - if (verbose) System.err.println("emitting diff header (not recommended for `patch`)");
- + if (verbose) command.writeError(command.getResource("diff.default"));
- out.write("Index: " + oldFile + "\n");
- out.write("diff -r //" + oldFile + " " + newFile + "\n");
- oldFile = null;
- }
- }
- +
- out.write(line.toString());
- }
-
- @@ -123,12 +131,10 @@
- newFile = m.group(1);
- newNote = m.group(2);
- verb = m.group(3);
- - if (verbose) System.err.println(verb);
- oldFile = newFile;
- - if (verb.equals("delete")) {
- - Matcher version = VERSION.matcher(newNote);
- - version.find();
- - oldNote = "#" + (Long.parseLong(version.group(1)) - 1);
- + if ("delete".equals(verb)) {
- + (m = VERSION.matcher(newNote)).find();
- + oldNote = "#" + (Long.parseLong(m.group(1)) - 1);
- newNote = epoch;
- file = p4print("//" + oldFile + oldNote);
- } else { // add or branch
- @@ -144,7 +150,7 @@
- out.write("--- " + oldFile + oldNote + "\n");
- out.write("+++ " + newFile + newNote + "\n");
- String prefix;
- - if (verb.equals("delete")) {
- + if ("delete".equals(verb)) {
- out.write("@@ -1" + lines + " +0,0 @@\n");
- prefix = "-";
- } else { // add or branch
- @@ -165,7 +171,7 @@
- oldFile = null;
- }
-
- - private List p4print(String name) throws IOException {
- + protected List p4print(String name) throws IOException {
- CommandLine cmd = (new CommandLine(options.getProperty("p", "p4 print -q"))).append(name);
- // Sadly, executing `p4 print` will consume some input.
- // Which is one reason not to emit files immediately
- @@ -173,26 +179,9 @@
- ProcessInputStream p = new ProcessInputStream(cmd.exec());
- List file = (new LineReader(p)).readList();
- if (p.exitValue() != 0) {
- - System.err.println("exit " + p.exitValue() + " from " + cmd);
- + command.writeError("exit " + p.exitValue() + " from " + cmd + "\n");
- }
- return file;
- }
-
- - protected UnixStyleFilter filter;
- - protected Properties options;
- - protected boolean verbose;
- - protected Writer out;
- -
- - private p4d2p(UnixStyleFilter filter, Writer out) {
- - this.filter = filter;
- - this.options = filter.getOptions();
- - this.verbose = (options.getProperty("v") != null);
- - this.out = out;
- - }
- -
- - private static DateFormat timeFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); // ISO 8601
- - private static final String epoch = timeFormat.format(new Date(0));
- -
- - private String now = timeFormat.format(new Date());
- -
- }