From 61d4134375ad0c5ce07091ff8ca4ee5f35b3576b Mon Sep 17 00:00:00 2001 From: Tom Robinson Date: Mon, 15 Feb 2010 16:48:48 -0800 Subject: [PATCH] Modify ShrinkSafe to be long running, send 4 length prefix on stdin --- shrinksafe/shrinksafe.jar | Bin 19066 -> 20427 bytes .../src/org/dojotoolkit/shrinksafe/Main.java | 29 ++++++++++++++++-- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/shrinksafe/shrinksafe.jar b/shrinksafe/shrinksafe.jar index 53c37f9074f37afaaac62abe093673b1da54f265..08cdb3869151b6c19b5d45707760b5ddee982e64 100644 GIT binary patch delta 18307 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 diff --git a/shrinksafe/src/org/dojotoolkit/shrinksafe/Main.java b/shrinksafe/src/org/dojotoolkit/shrinksafe/Main.java index 3cef2bd..c7da084 100644 --- a/shrinksafe/src/org/dojotoolkit/shrinksafe/Main.java +++ b/shrinksafe/src/org/dojotoolkit/shrinksafe/Main.java @@ -39,6 +39,8 @@ import java.util.List; import java.util.Locale; import java.util.ResourceBundle; +import java.io.DataOutputStream; +import java.io.DataInputStream; import org.mozilla.javascript.Context; import org.mozilla.javascript.ContextAction; @@ -53,7 +55,8 @@ public class Main { protected static final ShellContextFactory shellContextFactory = new ShellContextFactory(); protected static ToolErrorReporter errorReporter; protected static int exitCode = 0; - protected static boolean escapeUnicode = false; + protected static boolean escapeUnicode = false; + protected static boolean server = false; protected static String stripConsole = null; static { @@ -163,6 +166,9 @@ else if (arg.equals("-?") || arg.equals("-help")) { else if (arg.equals("-escape-unicode")) { escapeUnicode = true; } + else if (arg.equals("-server")) { + server = true; + } else if (arg.equals("-stripConsole")) { if (i >= (args.length-1)) { usageError = getMessage("msg.shell.stripConsoleMissingArg"); @@ -193,8 +199,8 @@ else if (arg.equals("-stripConsole")) { } static void processFiles(Context cx, String[] files) throws IOException { - StringBuffer cout = new StringBuffer(); if (files.length > 0) { + StringBuffer cout = new StringBuffer(); for (int i=0; i < files.length; i++) { try { String source = (String)readFileOrUrl(files[i], true); @@ -203,16 +209,33 @@ static void processFiles(Context cx, String[] files) throws IOException { // continue processing files } } + global.getOut().println(cout); + } else if (server) { + DataInputStream input = new DataInputStream(global.getIn()); + DataOutputStream output = new DataOutputStream(global.getOut()); + global.getErr().println("Starting server."); + while (true) { + int length = input.readInt(); + byte data[] = new byte[length]; + while (length > 0) + length -= input.read(data, data.length - length, length); + // Convert to String using the default encoding + String source = new String(data); + byte result[] = Compressor.compressScript(source, 0, 1, escapeUnicode, stripConsole).getBytes(); + output.writeInt(result.length); + output.write(result, 0, result.length); + } } else { + StringBuffer cout = new StringBuffer(); byte[] data = Kit.readStream(global.getIn(), 4096); // Convert to String using the default encoding String source = new String(data); if (source != null) { cout.append(Compressor.compressScript(source, 0, 1, escapeUnicode, stripConsole)); } + global.getOut().println(cout); } - global.getOut().println(cout); } private static Object readFileOrUrl(String path, boolean convertToString) throws IOException {