On 7/23/09 8:46 AM, [email protected] wrote:
Author: dbaum
Date: Thu Jul 23 15:46:05 2009
New Revision: 797111

URL: http://svn.apache.org/viewvc?rev=797111&view=rev
Log:
fix for FELIX-1403

It is definitely a good idea to include the JIRA issue number in our commit messages, since JIRA will link the commits up to the issue, but it would be nice to have a little more description than this in the commit message so the logs are more useful and we are not forced to go to JIRA to have any idea of what is going on.

My $0.02. Thanks.

-> richard

Modified:
     
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
     
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java
     
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java

Modified: 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java?rev=797111&r1=797110&r2=797111&view=diff
==============================================================================
--- 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
 (original)
+++ 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Closure.java
 Thu Jul 23 15:46:05 2009
@@ -54,9 +54,12 @@

              if (pipes.isEmpty())
              {
-                current.setIn(session.in);
-                current.setOut(session.out);
-                current.setErr(session.err);    // XXX: [email protected]
+               if (current.out == null)
+               {
+                   current.setIn(session.in);
+                   current.setOut(session.out);
+                   current.setErr(session.err);
+               }
              }
              else
              {

Modified: 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java?rev=797111&r1=797110&r2=797111&view=diff
==============================================================================
--- 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java
 (original)
+++ 
felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/shell/Pipe.java
 Thu Jul 23 15:46:05 2009
@@ -16,19 +16,25 @@
   * specific language governing permissions and limitations
   * under the License.
   */
-// DWB16: redirect System.err when creating pipe
  package org.apache.felix.gogo.runtime.shell;

-import org.osgi.service.command.Converter;
-
-import java.io.*;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.PipedInputStream;
+import java.io.PipedOutputStream;
+import java.io.PrintStream;
  import java.util.List;

+import org.osgi.service.command.Converter;
+
  public class Pipe extends Thread
  {
+    static final ThreadLocal<InputStream>  tIn = new 
ThreadLocal<InputStream>();
+    static final ThreadLocal<PrintStream>  tOut = new 
ThreadLocal<PrintStream>();
+    static final ThreadLocal<PrintStream>  tErr = new 
ThreadLocal<PrintStream>();
      InputStream in;
      PrintStream out;
-    PrintStream err;    // derek
+    PrintStream err;
      PipedOutputStream pout;
      Closure closure;
      Exception exception;
@@ -40,6 +46,10 @@
          super("pipe-" + statements);
          this.closure = closure;
          this.statements = statements;
+
+        in = tIn.get();
+        out = tOut.get();
+        err = tErr.get();
      }

      public void setIn(InputStream in)
@@ -65,13 +75,15 @@
          next.setIn(new PipedInputStream(pout));
          out = new PrintStream(pout);
          return next;
-
      }

      public void run()
      {
-        //closure.session.service.threadIO.setStreams(in, out, System.err);
-        closure.session.service.threadIO.setStreams(in, out, err);    // derek
+        tIn.set(in);
+        tOut.set(out);
+        tErr.set(err);
+        closure.session.service.threadIO.setStreams(in, out, err);
+
          try
          {
              for (List<CharSequence>  statement : statements)
@@ -91,6 +103,10 @@
          {
              out.flush();
              closure.session.service.threadIO.close();
+            tIn.set(in);
+            tOut.set(out);
+            tErr.set(err);
+
              try
              {
                  if (in instanceof PipedInputStream)

Modified: 
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java
URL: 
http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java?rev=797111&r1=797110&r2=797111&view=diff
==============================================================================
--- 
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java
 (original)
+++ 
felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/shell/TestParser.java
 Thu Jul 23 15:46:05 2009
@@ -85,7 +85,11 @@
          c.addCommand("echo", this);
          c.addCommand("capture", this);
          c.addCommand("grep", this);
+        c.addCommand("echoout", this);
+        c.execute("myecho = { echoout $args }");
          assertEquals("def", c.execute("echo def|grep (d.*)|capture"));
+        assertEquals("def", c.execute("echoout def|grep (d.*)|capture"));
+        assertEquals("def", c.execute("myecho def|grep (d.*)|capture"));
          assertEquals("def", c.execute("echo abc; echo def; echo ghi|grep 
(d.*)|capture"));
          assertEquals("hello world", c.execute("echo hello world|capture"));
          assertEquals("defghi", c.execute("echo abc; echo def; echo ghi|grep 
(def|ghi)|capture"));
@@ -241,6 +245,11 @@
          return sb;
      }

+    public void echoout(Object args[])
+    {
+        System.out.println(echo(args));
+    }
+
      public void testContext() throws Exception
      {
          Context c = new Context();


Reply via email to