You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2011/04/29 07:13:22 UTC

svn commit: r1097685 - in /commons/sandbox/runtime/trunk/src/main: java/org/apache/commons/runtime/ java/org/apache/commons/runtime/platform/unix/ java/org/apache/commons/runtime/platform/windows/ native/os/win32/ test/org/apache/commons/runtime/

Author: mturk
Date: Fri Apr 29 05:13:21 2011
New Revision: 1097685

URL: http://svn.apache.org/viewvc?rev=1097685&view=rev
Log:
More exec methods

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java
    commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c
    commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java?rev=1097685&r1=1097684&r2=1097685&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Exec.java Fri Apr 29 05:13:21 2011
@@ -48,7 +48,6 @@ public abstract class Exec
     protected String                    cwd = null;
     protected String[]                  env = null;
     protected int                       exitval;
-    protected int                       timeout = -1;
 
     public static Exec newInstance()
         throws OperationNotImplementedException,
@@ -59,7 +58,14 @@ public abstract class Exec
         return impl.newInstance();
     }
 
-    public abstract int run(List<String> args);
+    public abstract int run(List<String> argv, int timeout);
+    public abstract int run(List<String> argv);
+
+    public abstract int runShellScript(File script, List<String> args, int timeout);
+    public abstract int runShellScript(File script, List<String> args);
+
+    public abstract int runCommand(String cmd, int timeout);
+    public abstract int runCommand(String cmd);
 
     public int exitval()
     {
@@ -90,12 +96,12 @@ public abstract class Exec
     {
         env = envp.toArray(new String[0]);
     }
-    
+
     public OutputStream getOutputStream()
     {
         return out;
     }
-    
+
     public OutputStream getErrorStream()
     {
         return err;
@@ -105,7 +111,7 @@ public abstract class Exec
     {
         return out != null;
     }
-    
+
     public boolean redirectErrorStream()
     {
         if (err == null || err == out)

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java?rev=1097685&r1=1097684&r2=1097685&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/unix/PosixExec.java Fri Apr 29 05:13:21 2011
@@ -16,13 +16,16 @@
 package org.apache.commons.runtime.platform.unix;
 
 import org.apache.commons.runtime.Exec;
+import org.apache.commons.runtime.ExecImpl;
 import org.apache.commons.runtime.Errno;
 import org.apache.commons.runtime.Status;
 import org.apache.commons.runtime.InvalidArgumentException;
 import org.apache.commons.runtime.SystemException;
 import java.io.ByteArrayOutputStream;
 import java.io.OutputStream;
+import java.io.File;
 import java.util.List;
+import java.util.Vector;
 
 /**
  * PosixExec class.
@@ -48,13 +51,54 @@ final class PosixExec extends Exec
                                     ByteArrayOutputStream err,
                                     int timeout);
     @Override
-    public int run(List<String> args)
+    public int run(List<String> argv, int timeout)
     {
-        String[] argv = args.toArray(new String[0]);
-        long rv = run0(argv[0], argv, env, cwd, inp, out, err, timeout);
+        String[] args = argv.toArray(new String[0]);
+        long rv = run0(args[0], args, env, cwd, inp, out, err, timeout);
         exitval = (int)(rv & 0xffffffffL);
         int res = (int)(rv >>> 32);
 
         return res;
     }
+
+    @Override
+    public int run(List<String> argv)
+    {
+        return run(argv, -1);
+    }
+
+    @Override
+    public int runShellScript(File script, List<String> args, int timeout)
+    {
+        Vector<String> argv = new Vector<String>();
+        argv.add(ExecImpl.getInstance().getShell());
+        argv.add(script.getPath());
+        argv.addAll(args);
+
+        return run(argv, timeout);
+    }
+
+    @Override
+    public int runShellScript(File script, List<String> args)
+    {
+        return runShellScript(script, args, -1);
+    }
+
+    @Override
+    public int runCommand(String cmd, int timeout)
+    {
+        Vector<String> argv = new Vector<String>();
+        argv.add(ExecImpl.getInstance().getShell());
+        argv.add("-c");
+        argv.add(cmd);
+
+        return run(argv, timeout);
+    }
+
+    @Override
+    public int runCommand(String cmd)
+    {
+        return runCommand(cmd, -1);
+    }
+
 }

Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java?rev=1097685&r1=1097684&r2=1097685&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/platform/windows/WindowsExec.java Fri Apr 29 05:13:21 2011
@@ -16,6 +16,7 @@
 package org.apache.commons.runtime.platform.windows;
 
 import org.apache.commons.runtime.Exec;
+import org.apache.commons.runtime.ExecImpl;
 import org.apache.commons.runtime.Errno;
 import org.apache.commons.runtime.Status;
 import org.apache.commons.runtime.InvalidArgumentException;
@@ -23,7 +24,9 @@ import org.apache.commons.runtime.System
 import java.io.ByteArrayOutputStream;
 import java.io.CharArrayWriter;
 import java.io.OutputStream;
+import java.io.File;
 import java.util.List;
+import java.util.Vector;
 
 /**
  * WindowsExec class.
@@ -48,7 +51,7 @@ final class WindowsExec extends Exec
                                     ByteArrayOutputStream err,
                                     int timeout);
     @Override
-    public int run(List<String> argv)
+    public int run(List<String> argv, int timeout)
     {
         String executable = null;
         StringBuffer args = new StringBuffer();
@@ -88,7 +91,7 @@ final class WindowsExec extends Exec
                     ew.write(env[i]);
                     ew.append('\0');
                 } catch (Exception x) {
-                    //TODO: Handle OOM errors    
+                    //TODO: Handle OOM errors
                 }
             }
             ew.append('\0');
@@ -101,4 +104,47 @@ final class WindowsExec extends Exec
         return res;
     }
 
+    @Override
+    public int run(List<String> argv)
+    {
+        return run(argv, -1);
+    }
+
+    @Override
+    public int runShellScript(File script, List<String> args, int timeout)
+    {
+        Vector<String> argv = new Vector<String>();
+        argv.add(ExecImpl.getInstance().getShell());
+        argv.add("/D");
+        argv.add("/C");
+        argv.add("CALL");
+        argv.add(script.getPath());
+        argv.addAll(args);
+
+        return run(argv, timeout);
+    }
+
+    @Override
+    public int runShellScript(File script, List<String> args)
+    {
+        return runShellScript(script, args, -1);
+    }
+
+    @Override
+    public int runCommand(String cmd, int timeout)
+    {
+        Vector<String> argv = new Vector<String>();
+        argv.add(ExecImpl.getInstance().getShell());
+        argv.add("/D");
+        argv.add("/C");
+        argv.add(cmd);
+
+        return run(argv, timeout);
+    }
+
+    @Override
+    public int runCommand(String cmd)
+    {
+        return runCommand(cmd, -1);
+    }
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c?rev=1097685&r1=1097684&r2=1097685&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/exec.c Fri Apr 29 05:13:21 2011
@@ -112,7 +112,6 @@ static int _run_exec(const wchar_t *exec
     ACR_MEMZERO(OVERLAPPED_SBUFF, overlap, 3);
     si.cb = sizeof(si);
 
-    fflush(stdout);
     if (timeout == 0)
         detach = 1;
     if (!detach) {

Modified: commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java?rev=1097685&r1=1097684&r2=1097685&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java (original)
+++ commons/sandbox/runtime/trunk/src/main/test/org/apache/commons/runtime/TestExec.java Fri Apr 29 05:13:21 2011
@@ -49,7 +49,7 @@ public class TestExec extends Assert
         assertEquals(r, Status.CHILD_DONE);
         ByteArrayOutputStream os = (ByteArrayOutputStream)e.getOutputStream();
         System.out.println("Exec returned:");
-        System.out.println(new String(os.toByteArray()));        
+        System.out.println(new String(os.toByteArray()));
     }
 
     @Test(groups = { "core" })
@@ -76,10 +76,25 @@ public class TestExec extends Assert
         e.redirectOutputStream(true);
         int r = e.run(args);
         assertEquals(r, Status.CHILD_DONE);
+        assertEquals(e.exitval(), 0);
         ByteArrayOutputStream os = (ByteArrayOutputStream)e.getOutputStream();
-        System.out.println("Running java -version returned:");
-        System.out.println(new String(os.toByteArray()));
+        String rv = new String(os.toByteArray());
+        assertTrue(rv.startsWith("java version"));
     }
 
+    @Test(groups = { "core" })
+    public void runCommand()
+        throws Exception
+    {
+        Exec e = Exec.newInstance();
+        assertNotNull(e);
+        e.redirectOutputStream(true);
+        int r = e.runCommand("echo foo");
+        assertEquals(r, Status.CHILD_DONE);
+        assertEquals(e.exitval(), 0);
+        ByteArrayOutputStream os = (ByteArrayOutputStream)e.getOutputStream();
+        String rv = new String(os.toByteArray());
+        assertTrue(rv.startsWith("foo"));
+    }
 
 }