Author: kevj Date: Sat Feb 17 20:58:23 2007 New Revision: 508865 URL: http://svn.apache.org/viewvc?view=rev&rev=508865 Log: -provide support for a command file to pass to SSHExec - implemented with a FileResource
Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java Modified: ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java URL: http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java?view=diff&rev=508865&r1=508864&r2=508865 ============================================================================== --- ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java (original) +++ ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java Sat Feb 17 20:58:23 2007 @@ -18,17 +18,22 @@ package org.apache.tools.ant.taskdefs.optional.ssh; -import org.apache.tools.ant.BuildException; -import org.apache.tools.ant.Project; -import org.apache.tools.ant.util.TeeOutputStream; -import org.apache.tools.ant.util.KeepAliveOutputStream; - +import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.io.InputStreamReader; import java.io.StringReader; +import org.apache.tools.ant.BuildException; +import org.apache.tools.ant.Project; +import org.apache.tools.ant.types.Resource; +import org.apache.tools.ant.types.resources.FileResource; +import org.apache.tools.ant.util.FileUtils; +import org.apache.tools.ant.util.KeepAliveOutputStream; +import org.apache.tools.ant.util.TeeOutputStream; + import com.jcraft.jsch.ChannelExec; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; @@ -51,6 +56,8 @@ private String outputProperty = null; // like <exec> private File outputFile = null; // like <exec> private boolean append = false; // like <exec> + + private Resource commandResource = null; private static final String TIMEOUT_MESSAGE = "Timeout period exceeded, connection dropped."; @@ -72,6 +79,15 @@ } /** + * Sets a commandResource from a file + * @param f + * @since Ant 1.7.1 + */ + public void setCommandResource(String f) { + this.commandResource = new FileResource(new File(f)); + } + + /** * The connection can be dropped after a specified number of * milliseconds. This is sometimes useful when a connection may be * flaky. Default is 0, which means "wait forever". @@ -128,24 +144,43 @@ && getUserInfo().getPassword() == null) { throw new BuildException("Password or Keyfile is required."); } - if (command == null) { - throw new BuildException("Command is required."); + if (command == null && commandResource == null) { + throw new BuildException("Command or commandFile is required."); } + /* called once */ + if (command != null) { + executeCommand(command); + } else { // read command resource and execute for each command + try { + BufferedReader br = new BufferedReader(new InputStreamReader(commandResource.getInputStream())); + String cmd; + while((cmd = br.readLine()) != null) { + log("cmd : "+cmd, Project.MSG_INFO); + executeCommand(cmd); + } + FileUtils.close(br); + } catch (IOException e) { + throw new BuildException(e); + } + } + } + + private void executeCommand(String cmd) throws BuildException { ByteArrayOutputStream out = new ByteArrayOutputStream(); TeeOutputStream tee = new TeeOutputStream(out, new KeepAliveOutputStream(System.out)); Session session = null; try { - // execute the command + final ChannelExec channel; + /* execute the command */ session = openSession(); session.setTimeout((int) maxwait); - final ChannelExec channel = (ChannelExec) session.openChannel("exec"); - channel.setCommand(command); + channel = (ChannelExec) session.openChannel("exec"); + channel.setCommand(cmd); channel.setOutputStream(tee); channel.setExtOutputStream(tee); channel.connect(); - // wait for it to finish thread = new Thread() { @@ -225,7 +260,6 @@ } } - /** * Writes a string to a file. If destination file exists, it may be * overwritten depending on the "append" value. @@ -257,5 +291,4 @@ } } } - -} +} \ No newline at end of file --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]