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"));
+ }
}