Author: bodewig
Date: Wed Jul 16 02:32:52 2008
New Revision: 677211

URL: http://svn.apache.org/viewvc?rev=677211&view=rev
Log:
Create remoteDir if needed, More meaningful error when exception occurs.  PR 
42781.  Submitted by Eduard Wirch.

Modified:
    ant/core/trunk/CONTRIBUTORS
    ant/core/trunk/WHATSNEW
    ant/core/trunk/contributors.xml
    
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java

Modified: ant/core/trunk/CONTRIBUTORS
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/CONTRIBUTORS?rev=677211&r1=677210&r2=677211&view=diff
==============================================================================
Binary files - no diff available.

Modified: ant/core/trunk/WHATSNEW
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?rev=677211&r1=677210&r2=677211&view=diff
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Wed Jul 16 02:32:52 2008
@@ -104,6 +104,9 @@
  * XmlLogger could lose messages if <parallel> is used.
    Bugzilla Report 25734.
 
+ * <scp> creates remoteToDir if it doesn't exist.
+   Bugzilla Report 42781
+
 Other changes:
 --------------
 

Modified: ant/core/trunk/contributors.xml
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/contributors.xml?rev=677211&r1=677210&r2=677211&view=diff
==============================================================================
--- ant/core/trunk/contributors.xml (original)
+++ ant/core/trunk/contributors.xml Wed Jul 16 02:32:52 2008
@@ -320,6 +320,10 @@
     <last>Sudell</last>
   </name>
   <name>
+    <first>Eduard</first>
+    <last>Wirch</last>
+  </name>
+  <name>
     <first>Edwin</first>
     <last>Woudt</last>
   </name>

Modified: 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java
URL: 
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java?rev=677211&r1=677210&r2=677211&view=diff
==============================================================================
--- 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java
 (original)
+++ 
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/ssh/ScpToMessageBySftp.java
 Wed Jul 16 02:32:52 2008
@@ -153,24 +153,37 @@
             channel.connect();
 
             try {
+                try {
+                    channel.stat(remotePath);
+                } catch (SftpException e) {
+                    if (e.id == ChannelSftp.SSH_FX_NO_SUCH_FILE) {
+                        // dir does not exist.
+                        channel.mkdir(remotePath);
+                    } else {
+                        throw new JSchException("failed to access remote dir '"
+                                                + remotePath + "'", e);
+                    }
+                }
                 channel.cd(remotePath);
             } catch (SftpException e) {
-                JSchException schException = new JSchException("Could not CD 
to '" + remotePath + "' - " + e.toString());
-                schException.initCause(e);
-                throw schException;
+                throw new JSchException("Could not CD to '" + remotePath
+                                        + "' - " + e.toString(), e);
             }
+            Directory current = null;
             try {
                 for (Iterator i = directoryList.iterator(); i.hasNext();) {
-                    Directory current = (Directory) i.next();
-                    if(getVerbose()) {
+                    current = (Directory) i.next();
+                    if (getVerbose()) {
                         log("Sending directory " + current);
                     }
                     sendDirectory(channel, current);
                 }
             } catch (SftpException e) {
-                JSchException schException = new JSchException(e.toString());
-                schException.initCause(e);
-                throw schException;
+                String msg = "Error sending directory";
+                if (current != null && current.getDirectory() != null) {
+                    msg += " '" + current.getDirectory().getName() + "'";
+                }
+                throw new JSchException(msg, e);
             }
         } finally {
             if (channel != null) {


Reply via email to