You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by gn...@apache.org on 2016/03/21 17:59:51 UTC

svn commit: r1736056 - in /felix/trunk/gogo/runtime/src: main/java/org/apache/felix/gogo/runtime/ test/java/org/apache/felix/gogo/runtime/

Author: gnodet
Date: Mon Mar 21 16:59:51 2016
New Revision: 1736056

URL: http://svn.apache.org/viewvc?rev=1736056&view=rev
Log:
Support for here-string

Modified:
    felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Parser.java
    felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java
    felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Tokenizer.java
    felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestParser4.java

Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Parser.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Parser.java?rev=1736056&r1=1736055&r2=1736056&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Parser.java (original)
+++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Parser.java Mon Mar 21 16:59:51 2016
@@ -307,7 +307,7 @@ public class Parser
     }
 
     private static final Pattern redirNoArg = Pattern.compile("[0-9]?>&[0-9-]|[0-9-]?<&[0-9-]");
-    private static final Pattern redirArg = Pattern.compile("[0-9&]?>|[0-9]?>>|[0-9]?<|[0-9]?<>");
+    private static final Pattern redirArg = Pattern.compile("[0-9&]?>|[0-9]?>>|[0-9]?<|[0-9]?<>|<<<");
 
     public Statement statement()
     {

Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java?rev=1736056&r1=1736055&r2=1736056&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java (original)
+++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Pipe.java Mon Mar 21 16:59:51 2016
@@ -18,6 +18,7 @@
  */
 package org.apache.felix.gogo.runtime;
 
+import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -325,6 +326,14 @@ public class Pipe implements Callable<Re
                         setStream(ch, fd, READ + (output ? WRITE : 0));
                     }
                 }
+                else if (Token.eq("<<<", t))
+                {
+                    Token word = tokens.get(++i);
+                    Object val = Expander.expand("\"" + word + "\"", closure);
+                    String str = val != null ? String.valueOf(val) : "";
+                    Channel ch = Channels.newChannel(new ByteArrayInputStream(str.getBytes()));
+                    setStream(ch, 0, READ);
+                }
             }
 
             for (int i = 0; i < streams.length; i++) {

Modified: felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Tokenizer.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Tokenizer.java?rev=1736056&r1=1736055&r2=1736056&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Tokenizer.java (original)
+++ felix/trunk/gogo/runtime/src/main/java/org/apache/felix/gogo/runtime/Tokenizer.java Mon Mar 21 16:59:51 2016
@@ -23,7 +23,7 @@ import java.util.regex.Pattern;
 public class Tokenizer extends BaseTokenizer
 {
 
-    private final Pattern redir = Pattern.compile("[0-9&]?>|[0-9]?>>|[0-9]?>&|[0-9]?<|[0-9]?<>");
+    private final Pattern redir = Pattern.compile("[0-9&]?>|[0-9]?>>|[0-9]?>&|[0-9]?<|[0-9]?<>|<<<");
 
     protected boolean inArray;
     protected int word = 0;

Modified: felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestParser4.java
URL: http://svn.apache.org/viewvc/felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestParser4.java?rev=1736056&r1=1736055&r2=1736056&view=diff
==============================================================================
--- felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestParser4.java (original)
+++ felix/trunk/gogo/runtime/src/test/java/org/apache/felix/gogo/runtime/TestParser4.java Mon Mar 21 16:59:51 2016
@@ -135,6 +135,21 @@ public class TestParser4 extends Abstrac
         assertEquals("bar\nbar\n", c.execute("cat <$c | tac"));
     }
 
+    @Test
+    public void testHereString() throws Exception
+    {
+        Context c = new Context();
+        c.addCommand("echo", this);
+        c.addCommand("tac", this);
+        c.addCommand("cat", this);
+
+        c.execute("a=foo");
+        assertEquals("foo\n", c.execute("cat <<< $a | tac"));
+
+        c.execute("c = [ ar1 ar2 ]");
+        assertEquals("ar1 ar2\n", c.execute("cat <<<$c | tac"));
+    }
+
     public void echo(String msg)
     {
         System.out.println(msg);