You are viewing a plain text version of this content. The canonical link for it is here.
Posted to wagon-commits@maven.apache.org by br...@apache.org on 2006/01/04 11:57:34 UTC

svn commit: r365892 - in /maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh: AbstractSshWagon.java SftpWagon.java

Author: brett
Date: Wed Jan  4 02:57:30 2006
New Revision: 365892

URL: http://svn.apache.org/viewcvs?rev=365892&view=rev
Log:
correct permissions of deployed files and error handling in sftp
PR: WAGONSSH-22

Modified:
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/SftpWagon.java

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java
URL: http://svn.apache.org/viewcvs/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java?rev=365892&r1=365891&r2=365892&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java Wed Jan  4 02:57:30 2006
@@ -26,19 +26,19 @@
 import com.jcraft.jsch.UIKeyboardInteractive;
 import com.jcraft.jsch.UserInfo;
 import org.apache.maven.wagon.AbstractWagon;
-import org.apache.maven.wagon.ResourceDoesNotExistException;
-import org.apache.maven.wagon.TransferFailedException;
-import org.apache.maven.wagon.WagonConstants;
 import org.apache.maven.wagon.CommandExecutionException;
 import org.apache.maven.wagon.CommandExecutor;
 import org.apache.maven.wagon.PermissionModeUtils;
+import org.apache.maven.wagon.ResourceDoesNotExistException;
+import org.apache.maven.wagon.TransferFailedException;
+import org.apache.maven.wagon.WagonConstants;
 import org.apache.maven.wagon.authentication.AuthenticationException;
 import org.apache.maven.wagon.authentication.AuthenticationInfo;
 import org.apache.maven.wagon.authorization.AuthorizationException;
 import org.apache.maven.wagon.events.TransferEvent;
 import org.apache.maven.wagon.providers.ssh.interactive.InteractiveUserInfo;
-import org.apache.maven.wagon.providers.ssh.interactive.UserInfoUIKeyboardInteractiveProxy;
 import org.apache.maven.wagon.providers.ssh.interactive.NullInteractiveUserInfo;
+import org.apache.maven.wagon.providers.ssh.interactive.UserInfoUIKeyboardInteractiveProxy;
 import org.apache.maven.wagon.providers.ssh.knownhost.KnownHostsProvider;
 import org.apache.maven.wagon.repository.RepositoryPermissions;
 import org.apache.maven.wagon.resource.Resource;
@@ -362,15 +362,7 @@
 
         String msg = "Error occured while downloading '" + resource + "' from the remote repository:" + getRepository();
 
-        if ( "No such file".equals( e.toString() ) )
-        {
-            // SFTP only
-            throw new ResourceDoesNotExistException( msg, e );
-        }
-        else
-        {
-            throw new TransferFailedException( msg, e );
-        }
+        throw new TransferFailedException( msg, e );
     }
 
     private static class WagonUserInfo

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/SftpWagon.java
URL: http://svn.apache.org/viewcvs/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/SftpWagon.java?rev=365892&r1=365891&r2=365892&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/SftpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/SftpWagon.java Wed Jan  4 02:57:30 2006
@@ -85,11 +85,14 @@
 
             channel.connect();
 
-            channel.cd( basedir );
-
             RepositoryPermissions permissions = getRepository().getPermissions();
 
-            mkdirs( channel, resourceName, getDirectoryMode( permissions ) );
+            int directoryMode = getDirectoryMode( permissions );
+            mkdir( channel, basedir, directoryMode );
+
+            channel.cd( basedir );
+
+            mkdirs( channel, resourceName, directoryMode );
 
             firePutStarted( resource, source );
 
@@ -115,7 +118,7 @@
             {
                 try
                 {
-                    int mode = Integer.valueOf( permissions.getFileMode() ).intValue();
+                    int mode = getOctalMode( permissions.getFileMode() );
                     channel.chmod( mode, filename );
                 }
                 catch ( NumberFormatException e )
@@ -165,55 +168,67 @@
 
         if ( permissions != null )
         {
-            try
-            {
-                ret = Integer.valueOf( permissions.getDirectoryMode(), 8 ).intValue();
-            }
-            catch ( NumberFormatException e )
-            {
-                // TODO: warning level
-                fireTransferDebug( "the file mode must be a numerical mode for SFTP" );
-                ret = -1;
-            }
+            ret = getOctalMode( permissions.getDirectoryMode() );
         }
 
         return ret;
     }
 
+    private int getOctalMode( String mode )
+    {
+        int ret;
+        try
+        {
+            ret = Integer.valueOf( mode, 8 ).intValue();
+        }
+        catch ( NumberFormatException e )
+        {
+            // TODO: warning level
+            fireTransferDebug( "the file mode must be a numerical mode for SFTP" );
+            ret = -1;
+        }
+        return ret;
+    }
+
     private void mkdirs( ChannelSftp channel, String resourceName, int mode )
         throws TransferFailedException, SftpException
     {
         String[] dirs = PathUtils.dirnames( resourceName );
         for ( int i = 0; i < dirs.length; i++ )
         {
-            try
+            mkdir( channel, dirs[i], mode );
+
+            channel.cd( dirs[i] );
+        }
+    }
+
+    private void mkdir( ChannelSftp channel, String dir, int mode )
+        throws TransferFailedException, SftpException
+    {
+        try
+        {
+            SftpATTRS attrs = channel.stat( dir );
+            if ( ( attrs.getPermissions() & S_IFDIR ) == 0 )
             {
-                SftpATTRS attrs = channel.stat( dirs[i] );
-                if ( ( attrs.getPermissions() & S_IFDIR ) == 0 )
-                {
-                    throw new TransferFailedException(
-                        "Remote path is not a directory:" + PathUtils.dirname( resourceName ) );
-                }
+                throw new TransferFailedException( "Remote path is not a directory:" + dir );
             }
-            catch ( SftpException e )
+        }
+        catch ( SftpException e )
+        {
+            // doesn't exist, make it and try again
+            channel.mkdir( dir );
+            if ( mode != -1 )
             {
-                // doesn't exist, make it and try again
-                channel.mkdir( dirs[i] );
-                if ( mode != -1 )
-                {
-                    try
-                    {
-                        channel.chmod( mode, dirs[i] );
-                    }
-                    catch ( final SftpException e1 )
-                    {
-                        // for some extrange reason we recive this exception,
-                        // even when chmod success
-                    }
+                try
+                {
+                    channel.chmod( mode, dir );
+                }
+                catch ( final SftpException e1 )
+                {
+                    // for some extrange reason we recive this exception,
+                    // even when chmod success
                 }
             }
-
-            channel.cd( dirs[i] );
         }
     }
 
@@ -260,7 +275,22 @@
             channel.cd( dir );
 
             // This must be called first to ensure that if the file doesn't exist it throws an exception
-            SftpATTRS attrs = channel.stat( filename );
+            SftpATTRS attrs;
+            try
+            {
+                attrs = channel.stat( filename );
+            }
+            catch ( SftpException e )
+            {
+                if ( "No such file".equals( e.toString() ) )
+                {
+                    throw new ResourceDoesNotExistException( e.toString(), e );
+                }
+                else
+                {
+                    throw e;
+                }
+            }
 
             if ( timestamp <= 0 || attrs.getMTime() * MILLIS_PER_SEC > timestamp )
             {



---------------------------------------------------------------------
To unsubscribe, e-mail: wagon-commits-unsubscribe@maven.apache.org
For additional commands, e-mail: wagon-commits-help@maven.apache.org