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) ====

Index: users/jkristian/lib/p4d2pResources.properties
diff -r //users/jkristian/lib/p4d2pResources.properties users/jkristian/lib/p4d2pResources.properties
48a49
> diff.default: converting default diff (not recommended for `patch`)\n

==== //users/jkristian/src/p4d2p.java#3 (text) ====

Index: users/jkristian/src/p4d2p.java
diff -r //users/jkristian/src/p4d2p.java users/jkristian/src/p4d2p.java
2,3d1
< import java.io.BufferedReader;
< import java.io.InputStreamReader;
5d2
< import java.io.PushbackReader;
20c17
<         UnixStyleFilter filter = new UnixStyleFilter(p4d2p.class, "hi::o:p:v", ARGV);
---
>         UnixCommand command = new UnixCommand(p4d2p.class, "hi::o:p:v", ARGV);
22,24c19,21
<             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());
26,29c23,26
<                 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);
34c31
<             filter.flush();
---
>             command.flush();
38,42c35,50
<     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;
44,48c52,56
<     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();
50,53c58,67
<     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);
56d69
<         //if (verbose) out.write("// write(line)\n");
60d72
<             if (verbose) out.write("// p4 describe move\n");
64d75
<             if (verbose) out.write("// p4 diff header\n");
72d82
<             if (verbose) out.write("// p4 diff2 header\n");
79d88
<             if (verbose) out.write("// p4 describe header\n");
90d98
<                 if (verbose) System.err.println("emitting diff -u header");
97d104
<                 if (verbose) System.err.println("emitting diff -c header");
104c111
<                 if (verbose) System.err.println("emitting diff header (not recommended for `patch`)");
---
>                 if (verbose) command.writeError(command.getResource("diff.default"));
109a117
> 
126d133
<                 if (verbose) System.err.println(verb);
128,131c135,137
<                 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);
147c153
<                     if (verb.equals("delete")) {
---
>                     if ("delete".equals(verb)) {
168c174
<     private List p4print(String name) throws IOException {
---
>     protected List p4print(String name) throws IOException {
176c182
<             System.err.println("exit " + p.exitValue() + " from " + cmd);
---
>             command.writeError("exit " + p.exitValue() + " from " + cmd + "\n");
181,197d186
<     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());
< 

Index: //users/jkristian/lib/UnixCommandResources.properties
--- users/jkristian/lib/UnixCommandResources.properties 1970-01-01 00:00:00Z
+++ users/jkristian/lib/UnixCommandResources.properties #1
@@ -0,0 +1,2 @@
+usage: usage: {0}
+rename: can''t move {0} to {1}

Index: //users/jkristian/lib/UnixStyleFilterResources.properties
--- users/jkristian/lib/UnixStyleFilterResources.properties #1
+++ users/jkristian/lib/UnixStyleFilterResources.properties 1970-01-01 00:00:00Z
@@ -1,2 +0,0 @@
-usage: usage: {0}
-rename: can''t move {0} to {1}

Index: //users/jkristian/src/UnixCommand.java
--- users/jkristian/src/UnixCommand.java 1970-01-01 00:00:00Z
+++ users/jkristian/src/UnixCommand.java #1
@@ -0,0 +1,250 @@
+import gnu.getopt.Getopt;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FilterInputStream;
+import java.io.FilterOutputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PushbackReader;
+import java.io.Reader;
+import java.io.Writer;
+import java.text.MessageFormat;
+import java.util.ArrayList;
+import java.util.Locale;
+import java.util.List;
+import java.util.Properties;
+import java.util.ResourceBundle;
+
+class UnixCommand {
+
+    public UnixCommand(Class command, String options, String[] ARGV) {
+        this.command = command;
+        String commandName = command.getName();
+        this.resourceBundleName = commandName + "Resources";
+        Getopt g = new Getopt(commandName, ARGV, options);
+        {
+            boolean error = false;
+            for (int c; (c = g.getopt()) != -1; ) {
+                // System.err.println("option " + (char)c);
+                if (c == '?') {
+                    error = true;
+                } else {
+                    this.options.put((char)c + "",
+                                     (options.indexOf((char)c + ":") < 0) ? "1" :
+                                     ((g.getOptarg() == null) ? "" : g.getOptarg()));
+                }
+            }
+            if (error) {
+                try {
+                    writeError(getUsage());
+                } catch(IOException ignored) {}
+                exit(1);
+            }
+        }
+        for (int i = g.getOptind(); i < ARGV.length; ++i) {
+            fileNames.add(ARGV[i]);
+        }
+        if (fileNames.isEmpty()) {
+            fileNames.add(STDIN_NAME);
+        }
+    }
+
+    public void exit(int status) {
+        try {
+            flush();
+        } catch(IOException ignored) {}
+        Runtime.getRuntime().exit(1);
+    }
+
+    public static final String STDIN_NAME = "-";
+
+    protected Class command;
+    protected Properties options = new Properties();
+    private Locale locale;
+    private String resourceBundleName;
+    protected String backupFileSuffix = null;
+    protected List fileNames = new ArrayList();
+    protected SteerableInputStream inputStream = new SteerableInputStream(null);
+    protected PushbackReader inputReader;
+    protected LineReader inputLineReader;
+    protected SteerableOutputStream outputStream = new SteerableOutputStream(System.out);
+    protected Writer outputWriter;
+    protected Writer errorWriter;
+
+    protected static class SteerableInputStream extends FilterInputStream {
+        public SteerableInputStream(InputStream in) { super(in); }
+        public void setInput(InputStream in) { this.in = in; }
+    }
+
+    protected static class SteerableOutputStream extends FilterOutputStream {
+        public SteerableOutputStream(OutputStream out) { super(out); }
+        public void setOutput(OutputStream out) { this.out = out; }
+    }
+
+    public Properties getOptions() {
+        return options;
+    }
+
+    public Class getCommand() {
+        return command;
+    }
+
+    public String getResourceBundleName() {
+        return resourceBundleName;
+    }
+
+    public void setResourceBundleName(String name) {
+        resourceBundleName = name;
+    }
+
+    public Locale getLocale() {
+        if (locale == null) {
+            setLocale(Locale.getDefault());
+        }
+        return locale;
+    }
+
+    public void setLocale(Locale locale) {
+        this.locale = locale;
+    }
+
+    public ResourceBundle getResourceBundle()
+    {
+        return ResourceBundle.getBundle(getResourceBundleName(), getLocale(), command.getClassLoader());
+    }
+
+    public String getResource(String name)
+    {
+        return getResourceBundle().getString(name);
+    }
+
+    public void setEditInPlace(String suffix)
+    {
+        this.backupFileSuffix = (suffix == null || suffix.length() > 0) ? suffix : "~";
+    }
+
+    public boolean getFile() throws IOException {
+        if (fileNames.isEmpty()) return false;
+        String fileName = (String)(fileNames.remove(0));
+        if (fileName.equals(STDIN_NAME)) {
+            inputStream.setInput(System.in);
+            outputStream.setOutput(System.out);
+
+        } else if (backupFileSuffix == null) {
+            inputStream.setInput(new FileInputStream(fileName));
+            outputStream.setOutput(System.out);
+
+        } else { // edit in place
+            File inputFile = new File(fileName + backupFileSuffix);
+            File outputFile = new File(fileName);
+            inputFile.delete();
+            if ( ! outputFile.renameTo(inputFile)) {
+                throw new IOException(MessageFormat.format(getMessage("rename"),
+                                                           new String[]{outputFile.getPath(), inputFile.getPath()}));
+            }
+            inputStream.setInput(new FileInputStream(inputFile));
+            outputStream.setOutput(new FileOutputStream(outputFile));
+        }
+        return true;
+    }
+
+    public void flush() throws IOException
+    {
+        IOException ex = null;
+        if (outputWriter != null) try {
+            outputWriter.flush();
+        } catch(IOException e) {
+            ex = e;
+        }
+        if (outputStream != null) try {
+            outputStream.flush();
+        } catch(IOException e) {
+            ex = e;
+        }
+        if (errorWriter != null) try {
+            errorWriter.flush();
+        } catch(IOException e) {
+            ex = e;
+        }
+        System.err.flush();
+        if (ex != null) throw ex;
+    }
+
+    public PushbackReader getInputReader() throws IOException {
+        if (inputReader == null) {
+            inputReader = new PushbackReader(new InputStreamReader(inputStream));
+        }
+        return inputReader;
+    }
+
+    public LineReader getInputLineReader() throws IOException {
+        if (inputLineReader == null) {
+            inputLineReader = new LineReader(getInputReader());
+        }
+        return inputLineReader;
+    }
+
+    public Writer getOutputWriter() throws IOException {
+        if (outputWriter == null) {
+            outputWriter = new OutputStreamWriter(outputStream);
+        }
+        return outputWriter;
+    }
+
+    public Writer getErrorWriter() throws IOException {
+        if (errorWriter == null) {
+            errorWriter = new OutputStreamWriter(System.err);
+        }
+        return errorWriter;
+    }
+
+    public void writeError(String s) throws IOException {
+        Writer err = getErrorWriter();
+        err.write(s);
+        err.flush();
+    }
+
+    public void writeError(Object o) throws IOException {
+        writeError(o + "");
+    }
+
+    public String getUsage() {
+        String message = getMessage("usage");
+        return (message == null) ? getHelp().toString() :
+            MessageFormat.format(message,
+                                 new String[]{MessageFormat.format(getResourceBundle().getString("usage"),
+                                                                   new String[]{command.getName()})});
+    }
+
+    public StringBuffer getHelp() {
+        ResourceBundle resource = getResourceBundle();
+        StringBuffer message = new StringBuffer(resource.getString("help"));
+        replaceAll(message, "{usage}", resource.getString("usage"));
+        message.replace(0, message.length(),
+                        MessageFormat.format(message.toString(),
+                                             new String[]{command.getName()}));
+        return message;
+    }
+
+    protected String getMessage(String name) {
+        return getResourceBundle(UnixCommand.class).getString(name);
+    }
+
+    protected ResourceBundle getResourceBundle(Class base) {
+        return ResourceBundle.getBundle(base.getName() + "Resources",
+                                        getLocale(),
+                                        base.getClassLoader());
+    }
+
+    protected static void replaceAll(StringBuffer s, String find, String replace)
+    {
+        for (int i = 0; (i = s.indexOf(find, i)) >= 0; i += replace.length()) {
+            s.replace(i, i + find.length(), replace);
+        }
+    }
+
+}

Index: //users/jkristian/src/UnixStyleFilter.java
--- users/jkristian/src/UnixStyleFilter.java #2
+++ users/jkristian/src/UnixStyleFilter.java 1970-01-01 00:00:00Z
@@ -1,250 +0,0 @@
-import gnu.getopt.Getopt;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.FilterInputStream;
-import java.io.FilterOutputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.IOException;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PushbackReader;
-import java.io.Reader;
-import java.io.Writer;
-import java.text.MessageFormat;
-import java.util.ArrayList;
-import java.util.Locale;
-import java.util.List;
-import java.util.Properties;
-import java.util.ResourceBundle;
-
-class UnixStyleFilter {
-
-    public UnixStyleFilter(Class command, String options, String[] ARGV) {
-        this.command = command;
-        String commandName = command.getName();
-        this.resourceBundleName = commandName + "Resources";
-        Getopt g = new Getopt(commandName, ARGV, options);
-        {
-            boolean error = false;
-            for (int c; (c = g.getopt()) != -1; ) {
-                // System.err.println("option " + (char)c);
-                if (c == '?') {
-                    error = true;
-                } else {
-                    this.options.put((char)c + "",
-                                     (options.indexOf((char)c + ":") < 0) ? "1" :
-                                     ((g.getOptarg() == null) ? "" : g.getOptarg()));
-                }
-            }
-            if (error) {
-                try {
-                    writeError(getUsage());
-                } catch(IOException ignored) {}
-                exit(1);
-            }
-        }
-        for (int i = g.getOptind(); i < ARGV.length; ++i) {
-            fileNames.add(ARGV[i]);
-        }
-        if (fileNames.isEmpty()) {
-            fileNames.add(STDIN_NAME);
-        }
-    }
-
-    public void exit(int status) {
-        try {
-            flush();
-        } catch(IOException ignored) {}
-        Runtime.getRuntime().exit(1);
-    }
-
-    public static final String STDIN_NAME = "-";
-
-    protected Class command;
-    protected Properties options = new Properties();
-    private Locale locale;
-    private String resourceBundleName;
-    protected String backupFileSuffix = null;
-    protected List fileNames = new ArrayList();
-    protected SteerableInputStream inputStream = new SteerableInputStream(null);
-    protected PushbackReader inputReader;
-    protected LineReader inputLineReader;
-    protected SteerableOutputStream outputStream = new SteerableOutputStream(System.out);
-    protected Writer outputWriter;
-    protected Writer errorWriter;
-
-    protected static class SteerableInputStream extends FilterInputStream {
-        public SteerableInputStream(InputStream in) { super(in); }
-        public void setInput(InputStream in) { this.in = in; }
-    }
-
-    protected static class SteerableOutputStream extends FilterOutputStream {
-        public SteerableOutputStream(OutputStream out) { super(out); }
-        public void setOutput(OutputStream out) { this.out = out; }
-    }
-
-    public Properties getOptions() {
-        return options;
-    }
-
-    public Class getCommand() {
-        return command;
-    }
-
-    public String getResourceBundleName() {
-        return resourceBundleName;
-    }
-
-    public void setResourceBundleName(String name) {
-        resourceBundleName = name;
-    }
-
-    public Locale getLocale() {
-        if (locale == null) {
-            setLocale(Locale.getDefault());
-        }
-        return locale;
-    }
-
-    public void setLocale(Locale locale) {
-        this.locale = locale;
-    }
-
-    public ResourceBundle getResourceBundle()
-    {
-        return ResourceBundle.getBundle(getResourceBundleName(), getLocale(), command.getClassLoader());
-    }
-
-    public String getResource(String name)
-    {
-        return getResourceBundle().getString(name);
-    }
-
-    public void setEditInPlace(String suffix)
-    {
-        this.backupFileSuffix = (suffix == null || suffix.length() > 0) ? suffix : "~";
-    }
-
-    public boolean getFile() throws IOException {
-        if (fileNames.isEmpty()) return false;
-        String fileName = (String)(fileNames.remove(0));
-        if (fileName.equals(STDIN_NAME)) {
-            inputStream.setInput(System.in);
-            outputStream.setOutput(System.out);
-
-        } else if (backupFileSuffix == null) {
-            inputStream.setInput(new FileInputStream(fileName));
-            outputStream.setOutput(System.out);
-
-        } else { // edit in place
-            File inputFile = new File(fileName + backupFileSuffix);
-            File outputFile = new File(fileName);
-            inputFile.delete();
-            if ( ! outputFile.renameTo(inputFile)) {
-                throw new IOException(MessageFormat.format(getMessage("rename"),
-                                                           new String[]{outputFile.getPath(), inputFile.getPath()}));
-            }
-            inputStream.setInput(new FileInputStream(inputFile));
-            outputStream.setOutput(new FileOutputStream(outputFile));
-        }
-        return true;
-    }
-
-    public void flush() throws IOException
-    {
-        IOException ex = null;
-        if (outputWriter != null) try {
-            outputWriter.flush();
-        } catch(IOException e) {
-            ex = e;
-        }
-        if (outputStream != null) try {
-            outputStream.flush();
-        } catch(IOException e) {
-            ex = e;
-        }
-        if (errorWriter != null) try {
-            errorWriter.flush();
-        } catch(IOException e) {
-            ex = e;
-        }
-        System.err.flush();
-        if (ex != null) throw ex;
-    }
-
-    public PushbackReader getInputReader() throws IOException {
-        if (inputReader == null) {
-            inputReader = new PushbackReader(new InputStreamReader(inputStream));
-        }
-        return inputReader;
-    }
-
-    public LineReader getInputLineReader() throws IOException {
-        if (inputLineReader == null) {
-            inputLineReader = new LineReader(getInputReader());
-        }
-        return inputLineReader;
-    }
-
-    public Writer getOutputWriter() throws IOException {
-        if (outputWriter == null) {
-            outputWriter = new OutputStreamWriter(outputStream);
-        }
-        return outputWriter;
-    }
-
-    public Writer getErrorWriter() throws IOException {
-        if (errorWriter == null) {
-            errorWriter = new OutputStreamWriter(System.err);
-        }
-        return errorWriter;
-    }
-
-    public void writeError(String s) throws IOException {
-        Writer err = getErrorWriter();
-        err.write(s);
-        err.flush();
-    }
-
-    public void writeError(Object o) throws IOException {
-        writeError(o + "");
-    }
-
-    public String getUsage() {
-        String message = getMessage("usage");
-        return (message == null) ? getHelp().toString() :
-            MessageFormat.format(message,
-                                 new String[]{MessageFormat.format(getResourceBundle().getString("usage"),
-                                                                   new String[]{command.getName()})});
-    }
-
-    public StringBuffer getHelp() {
-        ResourceBundle resource = getResourceBundle();
-        StringBuffer message = new StringBuffer(resource.getString("help"));
-        replaceAll(message, "{usage}", resource.getString("usage"));
-        message.replace(0, message.length(),
-                        MessageFormat.format(message.toString(),
-                                             new String[]{command.getName()}));
-        return message;
-    }
-
-    protected String getMessage(String name) {
-        return getResourceBundle(UnixStyleFilter.class).getString(name);
-    }
-
-    protected ResourceBundle getResourceBundle(Class base) {
-        return ResourceBundle.getBundle(base.getName() + "Resources",
-                                        getLocale(),
-                                        base.getClassLoader());
-    }
-
-    protected static void replaceAll(StringBuffer s, String find, String replace)
-    {
-        for (int i = 0; (i = s.indexOf(find, i)) >= 0; i += replace.length()) {
-            s.replace(i, i + find.length(), replace);
-        }
-    }
-
-}