bodewig 2003/03/11 05:15:44
Modified: src/main/org/apache/tools/ant/taskdefs defaults.properties
src/main/org/apache/tools/ant/taskdefs/optional/ssh
SSHBase.java
Added: src/main/org/apache/tools/ant/taskdefs/optional/ssh
SSHExec.java
Log:
New task <sshexec>.
Submitted by: Robert Anderson <riznob at hotmail dot com>
Revision Changes Path
1.141 +1 -0
ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties
Index: defaults.properties
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v
retrieving revision 1.140
retrieving revision 1.141
diff -u -r1.140 -r1.141
--- defaults.properties 6 Mar 2003 12:42:44 -0000 1.140
+++ defaults.properties 11 Mar 2003 13:15:43 -0000 1.141
@@ -182,6 +182,7 @@
chown=org.apache.tools.ant.taskdefs.optional.unix.Chown
attrib=org.apache.tools.ant.taskdefs.optional.windows.Attrib
scp=org.apache.tools.ant.taskdefs.optional.ssh.Scp
+sshexec=org.apache.tools.ant.taskdefs.optional.ssh.SSHExec
# deprecated ant tasks (kept for back compatibility)
starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut
1.2 +3 -0
ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java
Index: SSHBase.java
===================================================================
RCS file:
/home/cvs/ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHBase.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SSHBase.java 11 Mar 2003 13:00:31 -0000 1.1
+++ SSHBase.java 11 Mar 2003 13:15:43 -0000 1.2
@@ -102,6 +102,9 @@
this.host = host;
}
+ public String getHost() {
+ return host;
+ }
public void setFailonerror( boolean failure ) {
failOnError = failure;
1.1
ant/src/main/org/apache/tools/ant/taskdefs/optional/ssh/SSHExec.java
Index: SSHExec.java
===================================================================
/*
* The Apache Software License, Version 1.1
*
* Copyright (c) 2003 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "Ant" and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact [EMAIL PROTECTED]
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
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.Task;
import org.apache.tools.ant.TaskContainer;
import org.apache.tools.ant.taskdefs.LogOutputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Vector;
import java.util.Enumeration;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelExec;
import com.jcraft.jsch.Session;
/**
* Executes a command on a remote machine via ssh.
* @author Robert Anderson, [EMAIL PROTECTED]
* @created February 2, 2003
* @since Ant 1.6
*/
public class SSHExec extends SSHBase {
private String command = null;
private int maxwait = 30000;
/**
* Constructor for SSHExecTask.
*/
public SSHExec() {
super();
}
/**
* Sets the command to execute on the remote host.
*
* @param command The new command value
*/
public void setCommand(String command) {
this.command = command;
}
/**
* The connection will be dropped after maxwait seconds. This is
* sometimes useful when a connection may be flaky. Default is to
* wait forever.
*
* @param maxwait The new maxwait value
*/
public void setMaxwait(int maxwait) {
this.maxwait = maxwait;
}
/**
* Execute the command on the remote host.
* @exception BuildException Most likely a network error or bad
* parameter.
*/
public void execute() throws BuildException {
if (getHost() == null) {
throw new BuildException("Host is null.");
}
if (getUserInfo().getName() == null) {
throw new BuildException("Username is null.");
}
if (getUserInfo().getKeyfile() == null
&& getUserInfo().getPassword() == null) {
throw new BuildException("Password and Keyfile are null.");
}
if (command == null) {
throw new BuildException("Command is null.");
}
try {
Session session = openSession();
ChannelExec channel=(ChannelExec) session.openChannel("exec");
channel.setCommand(command);
channel.setInputStream(System.in);
channel.setOutputStream(System.out);
channel.connect();
} catch(Exception e){
if (getFailonerror()) {
throw new BuildException(e);
} else {
log("Caught exception: " + e.getMessage(), Project.MSG_ERR);
}
}
}
}