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 2008/05/27 18:27:56 UTC

svn commit: r660586 - in /maven/wagon/trunk: wagon-provider-api/src/main/java/org/apache/maven/wagon/ wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/ wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wa...

Author: brett
Date: Tue May 27 09:27:39 2008
New Revision: 660586

URL: http://svn.apache.org/viewvc?rev=660586&view=rev
Log:
[WAGON-100] add some consistency to error firing:
- no events fired from resourceExists / directory operations (other than the file-by-file ones)
- make sure all outgoing exceptions fire an error (session or transfer) and are not duplicated
- other clean up

Modified:
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java
    maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/StreamWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java
    maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java
    maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
    maven/wagon/trunk/wagon-providers/wagon-s3/src/main/java/org/apache/maven/wagon/providers/s3/AbstractS3Wagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/ScpHelper.java
    maven/wagon/trunk/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/ScpWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/ScpWagon.java
    maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/SftpWagon.java
    maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/AbstractWagon.java Tue May 27 09:27:39 2008
@@ -97,7 +97,22 @@
     public void openConnection()
         throws ConnectionException, AuthenticationException
     {
-        openConnectionInternal();
+        try
+        {
+            openConnectionInternal();
+        }
+        catch ( ConnectionException e )
+        {
+            fireSessionConnectionRefused();
+            
+            throw e;
+        }
+        catch ( AuthenticationException e )
+        {
+            fireSessionConnectionRefused();
+            
+            throw e;
+        }
     }
 
     public void connect( Repository repository )
@@ -178,7 +193,22 @@
         
         fireSessionOpening();
 
-        openConnectionInternal();
+        try
+        {
+            openConnectionInternal();
+        }
+        catch ( ConnectionException e )
+        {
+            fireSessionConnectionRefused();
+            
+            throw e;
+        }
+        catch ( AuthenticationException e )
+        {
+            fireSessionConnectionRefused();
+            
+            throw e;
+        }
 
         fireSessionOpened();
     }
@@ -191,7 +221,15 @@
     {
         fireSessionDisconnecting();
 
-        closeConnection();
+        try
+        {
+            closeConnection();
+        }
+        catch ( ConnectionException e )
+        {
+            fireSessionError( e );
+            throw e;
+        }
 
         fireSessionDisconnected();
     }
@@ -328,6 +366,8 @@
         }
         catch ( FileNotFoundException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
             throw new TransferFailedException( "Specified source file does not exist: " + source, e );
         }
         catch ( IOException e )
@@ -563,7 +603,6 @@
 
     protected void fireSessionConnectionRefused()
     {
-
         long timestamp = System.currentTimeMillis();
 
         SessionEvent sessionEvent = new SessionEvent( this, SessionEvent.SESSION_CONNECTION_REFUSED );
@@ -684,6 +723,8 @@
         }
         catch ( IOException e )
         {
+            fireTransferError( resource, e, requestType );
+            
             throw new TransferFailedException( "Failed to post-process the source file", e );
         }
     }
@@ -691,7 +732,7 @@
     public void putDirectory( File sourceDirectory, String destinationDirectory )
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
     {
-        throw new TransferFailedException( "directory copy not supported for " + getClass().getName() );
+        throw new UnsupportedOperationException( "The wagon you are using has not implemented putDirectory()" );
     }
 
     public boolean supportsDirectoryCopy()
@@ -741,7 +782,6 @@
                 jar.write( buffer, 0, bytesRead );
             }
         }
-
         finally
         {
             is.close();

Modified: maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/StreamWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/StreamWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/StreamWagon.java (original)
+++ maven/wagon/trunk/wagon-provider-api/src/main/java/org/apache/maven/wagon/StreamWagon.java Tue May 27 09:27:39 2008
@@ -24,6 +24,7 @@
 import java.io.OutputStream;
 
 import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferEvent;
 import org.apache.maven.wagon.resource.Resource;
 import org.codehaus.plexus.util.IOUtil;
 
@@ -64,14 +65,30 @@
 
         inputData.setResource( resource );
 
-        fillInputData( inputData );
+        try
+        {
+            fillInputData( inputData );
+        }
+        catch ( TransferFailedException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            throw e;
+        }
+        catch ( ResourceDoesNotExistException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            throw e;
+        }
 
         InputStream is = inputData.getInputStream();
 
         if ( is == null )
         {
-            throw new TransferFailedException(
-                getRepository().getUrl() + " - Could not open input stream for resource: '" + resource + "'" );
+            TransferFailedException e =
+                new TransferFailedException( getRepository().getUrl()
+                    + " - Could not open input stream for resource: '" + resource + "'" );
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            throw e;
         }
 
         createParentDirectories( destination );
@@ -90,7 +107,20 @@
 
         inputData.setResource( resource );
 
-        fillInputData( inputData );
+        try
+        {
+            fillInputData( inputData );
+        }
+        catch ( TransferFailedException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            throw e;
+        }
+        catch ( ResourceDoesNotExistException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            throw e;
+        }
 
         InputStream is = inputData.getInputStream();
 
@@ -101,8 +131,11 @@
 
             if ( is == null )
             {
-                throw new TransferFailedException(
-                    getRepository().getUrl() + " - Could not open input stream for resource: '" + resource + "'" );
+                TransferFailedException e =
+                    new TransferFailedException( getRepository().getUrl()
+                        + " - Could not open input stream for resource: '" + resource + "'" );
+                fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+                throw e;
             }
 
             createParentDirectories( destination );
@@ -117,7 +150,6 @@
         return retValue;
     }
 
-
     // source doesn't exist exception
     public void put( File source, String resourceName )
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
@@ -130,14 +162,26 @@
 
         outputData.setResource( resource );
 
-        fillOutputData( outputData );
+        try
+        {
+            fillOutputData( outputData );
+        }
+        catch ( TransferFailedException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
+            throw e;
+        }
 
         OutputStream os = outputData.getOutputStream();
 
         if ( os == null )
         {
-            throw new TransferFailedException(
-                getRepository().getUrl() + " - Could not open output stream for resource: '" + resource + "'" );
+            TransferFailedException e =
+                new TransferFailedException( getRepository().getUrl()
+                    + " - Could not open output stream for resource: '" + resource + "'" );
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+            throw e;
         }
 
         putTransfer( outputData.getResource(), source, os, true );

Modified: maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ftp/src/main/java/org/apache/maven/wagon/providers/ftp/FtpWagon.java Tue May 27 09:27:39 2008
@@ -128,14 +128,8 @@
 
             if ( !FTPReply.isPositiveCompletion( reply ) )
             {
-                fireSessionConnectionRefused();
-
-                fireSessionDisconnecting();
-
                 ftp.disconnect();
 
-                fireSessionDisconnected();
-
                 throw new AuthenticationException( "FTP server refused connection." );
             }
         }
@@ -147,11 +141,7 @@
                 {
                     fireSessionError( e );
 
-                    fireSessionDisconnecting();
-
                     ftp.disconnect();
-
-                    fireSessionDisconnected();
                 }
                 catch ( IOException f )
                 {
@@ -166,8 +156,6 @@
         {
             if ( !ftp.login( username, password ) )
             {
-                fireSessionConnectionRefused();
-
                 throw new AuthenticationException( "Cannot login to remote system" );
             }
 
@@ -220,7 +208,6 @@
         super.firePutCompleted( resource, file );
     }
 
-
     protected void fireGetCompleted( Resource resource, File localFile )
     {
         try
@@ -254,7 +241,6 @@
         }
     }
 
-
     public void fillOutputData( OutputData outputData )
         throws TransferFailedException
     {
@@ -405,7 +391,6 @@
         }
     }
 
-
     public class PrintCommandListener
         implements ProtocolCommandListener
     {

Modified: maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-lightweight/src/main/java/org/apache/maven/wagon/providers/http/LightweightHttpWagon.java Tue May 27 09:27:39 2008
@@ -42,6 +42,7 @@
 import org.apache.maven.wagon.TransferFailedException;
 import org.apache.maven.wagon.authentication.AuthenticationException;
 import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferEvent;
 import org.apache.maven.wagon.proxy.ProxyInfo;
 import org.apache.maven.wagon.resource.Resource;
 import org.apache.maven.wagon.shared.http.HtmlFileListParser;
@@ -202,6 +203,8 @@
         }
         catch ( IOException e )
         {
+            fireTransferError( new Resource( resourceName ), e, TransferEvent.REQUEST_PUT );
+            
             throw new TransferFailedException( "Error transferring file", e );
         }
     }

Modified: maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-http-shared/src/main/java/org/apache/maven/wagon/shared/http/AbstractHttpClientWagon.java Tue May 27 09:27:39 2008
@@ -37,6 +37,7 @@
 import org.apache.commons.httpclient.HostConfiguration;
 import org.apache.commons.httpclient.HttpClient;
 import org.apache.commons.httpclient.HttpConnectionManager;
+import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.HttpMethod;
 import org.apache.commons.httpclient.HttpStatus;
 import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager;
@@ -182,7 +183,17 @@
                 getMethod.addRequestHeader( hdr );
             }
 
-            int statusCode = execute( getMethod );
+            int statusCode;
+            try
+            {
+                statusCode = execute( getMethod );
+            }
+            catch ( IOException e )
+            {
+                fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+
+                throw new TransferFailedException( e.getMessage(), e );
+            }
 
             fireTransferDebug( url + " - Status code: " + statusCode );
 
@@ -196,24 +207,36 @@
                     return false;
 
                 case SC_NULL:
-                    throw new TransferFailedException( "Failed to transfer file: " + url );
+                {
+                    TransferFailedException e = new TransferFailedException( "Failed to transfer file: " + url );
+                    fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+                    throw e;
+                }
 
                 case HttpStatus.SC_FORBIDDEN:
+                    fireSessionConnectionRefused();
                     throw new AuthorizationException( "Access denied to: " + url );
 
                 case HttpStatus.SC_UNAUTHORIZED:
+                    fireSessionConnectionRefused();
                     throw new AuthorizationException( "Not authorized." );
 
                 case HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED:
+                    fireSessionConnectionRefused();
                     throw new AuthorizationException( "Not authorized by proxy." );
 
                 case HttpStatus.SC_NOT_FOUND:
                     throw new ResourceDoesNotExistException( "File: " + url + " does not exist" );
 
-                    //add more entries here
+                //add more entries here
                 default :
-                    throw new TransferFailedException(
-                        "Failed to transfer file: " + url + ". Return code is: " + statusCode );
+                {
+                    TransferFailedException e =
+                            new TransferFailedException( "Failed to transfer file: " + url + ". Return code is: "
+                                + statusCode );
+                    fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+                    throw e;
+                }
             }
 
             InputStream is = null;
@@ -357,7 +380,17 @@
         {
             firePutStarted( resource, source );
             
-            int statusCode = execute( putMethod );
+            int statusCode;
+            try
+            {
+                statusCode = execute( putMethod );
+            }
+            catch ( IOException e )
+            {
+                fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
+                throw new TransferFailedException( e.getMessage(), e );
+            }
 
             fireTransferDebug( url + " - Status code: " + statusCode );
 
@@ -372,27 +405,37 @@
                     break;
 
                 case SC_NULL:
-                    throw new TransferFailedException( "Failed to transfer file: " + url );
+                {
+                    TransferFailedException e = new TransferFailedException( "Failed to transfer file: " + url );
+                    fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+                    throw e;
+                }
 
                 case HttpStatus.SC_FORBIDDEN:
+                    fireSessionConnectionRefused();
                     throw new AuthorizationException( "Access denied to: " + url );
 
                 case HttpStatus.SC_NOT_FOUND:
                     throw new ResourceDoesNotExistException( "File: " + url + " does not exist" );
 
-                    //add more entries here
+                //add more entries here
                 default :
-                    throw new TransferFailedException(
-                        "Failed to transfer file: " + url + ". Return code is: " + statusCode );
+                {
+                    TransferFailedException e =
+                            new TransferFailedException( "Failed to transfer file: " + url + ". Return code is: "
+                                + statusCode );
+                    fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+                    throw e;
+                }
             }
 
-            putMethod.releaseConnection();
-
             firePutCompleted( resource, source );
         }
         finally
         {
             IOUtil.close(is);
+            
+            putMethod.releaseConnection();
         }
     }
 
@@ -401,7 +444,15 @@
     {
         String url = getRepository().getUrl() + "/" + resourceName;
         HeadMethod headMethod = new HeadMethod( url );
-        int statusCode = execute( headMethod );
+        int statusCode;
+        try
+        {
+            statusCode = execute( headMethod );
+        }
+        catch ( IOException e )
+        {
+            throw new TransferFailedException( e.getMessage(), e );
+        }
         try
         {
             switch ( statusCode )
@@ -439,21 +490,12 @@
         }
     }
 
-    protected int execute(HttpMethod httpMethod)
-        throws TransferFailedException
+    protected int execute(HttpMethod httpMethod) throws HttpException, IOException
     {
         int statusCode = SC_NULL;
         httpMethod.getParams().setSoTimeout( getTimeout() );
         setHeaders(httpMethod);
-        try
-        {
-            // execute the method.
-            statusCode = client.executeMethod( httpMethod );
-        }
-        catch ( IOException e )
-        {
-            throw new TransferFailedException( e.getMessage(), e );
-        }
+        statusCode = client.executeMethod( httpMethod );
         return statusCode;
     }
 

Modified: maven/wagon/trunk/wagon-providers/wagon-s3/src/main/java/org/apache/maven/wagon/providers/s3/AbstractS3Wagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-s3/src/main/java/org/apache/maven/wagon/providers/s3/AbstractS3Wagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-s3/src/main/java/org/apache/maven/wagon/providers/s3/AbstractS3Wagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-s3/src/main/java/org/apache/maven/wagon/providers/s3/AbstractS3Wagon.java Tue May 27 09:27:39 2008
@@ -135,6 +135,8 @@
         }
         catch( IOException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );            
+            
             throw new TransferFailedException( "", e );
         }
 
@@ -151,19 +153,21 @@
         try
         {
             s3Object = s3Service.getObjectDetails( bucket, resource.getName() );
+        }
+        catch ( S3ServiceException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );            
+            
+            throw new TransferFailedException( "Cannot get object from S3", e );
+        }
 
-            Date lastModified = s3Object.getLastModifiedDate();
-
-            if( lastModified.getTime() > timestamp )
-            {
-                get( resourceName, destination );
+        Date lastModified = s3Object.getLastModifiedDate();
 
-                return true;
-            }
-        }
-        catch( S3ServiceException e )
+        if ( lastModified.getTime() > timestamp )
         {
-            throw new TransferFailedException( "Cannot put object to S3", e );
+            get( resourceName, destination );
+
+            return true;
         }
 
         return false;
@@ -201,6 +205,8 @@
         }
         catch( S3ServiceException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
             throw new TransferFailedException( "Cannot put object to S3", e );
         }
 

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/AbstractSshWagon.java Tue May 27 09:27:39 2008
@@ -373,7 +373,7 @@
             }
         }
 
-        String msg = "Error occured while downloading '" + resource + "' from the remote repository:" + getRepository();
+        String msg = "Error occured while downloading '" + resource + "' from the remote repository:" + getRepository() + ": " + e.getMessage();
 
         throw new TransferFailedException( msg, e );
     }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/ScpHelper.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/ScpHelper.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/ScpHelper.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-common/src/main/java/org/apache/maven/wagon/providers/ssh/ScpHelper.java Tue May 27 09:27:39 2008
@@ -22,7 +22,6 @@
 import org.apache.maven.wagon.CommandExecutionException;
 import org.apache.maven.wagon.CommandExecutor;
 import org.apache.maven.wagon.PermissionModeUtils;
-import org.apache.maven.wagon.TransferFailedException;
 import org.apache.maven.wagon.repository.RepositoryPermissions;
 
 public class ScpHelper
@@ -33,33 +32,26 @@
 
     public static void createRemoteDirectories( String path, RepositoryPermissions permissions,
                                                 CommandExecutor commandExecutor )
-        throws TransferFailedException
+        throws CommandExecutionException
     {
-        try
+        String umaskCmd = null;
+        if ( permissions != null )
         {
-            String umaskCmd = null;
-            if ( permissions != null )
-            {
-                String dirPerms = permissions.getDirectoryMode();
-
-                if ( dirPerms != null )
-                {
-                    umaskCmd = "umask " + PermissionModeUtils.getUserMaskFor( dirPerms );
-                }
-            }
-
-            String mkdirCmd = "mkdir -p " + path;
+            String dirPerms = permissions.getDirectoryMode();
 
-            if ( umaskCmd != null )
+            if ( dirPerms != null )
             {
-                mkdirCmd = umaskCmd + "; " + mkdirCmd;
+                umaskCmd = "umask " + PermissionModeUtils.getUserMaskFor( dirPerms );
             }
-
-            commandExecutor.executeCommand( mkdirCmd );
         }
-        catch ( CommandExecutionException e )
+
+        String mkdirCmd = "mkdir -p " + path;
+
+        if ( umaskCmd != null )
         {
-            throw new TransferFailedException( "Error performing commands for file transfer", e );
+            mkdirCmd = umaskCmd + "; " + mkdirCmd;
         }
+
+        commandExecutor.executeCommand( mkdirCmd );
     }
 }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-external/src/main/java/org/apache/maven/wagon/providers/ssh/external/ScpExternalWagon.java Tue May 27 09:27:39 2008
@@ -212,7 +212,7 @@
     }
 
 
-    private void executeScpCommand( File localFile, String remoteFile, boolean put )
+    private void executeScpCommand( Resource resource, File localFile, boolean put )
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
     {
         boolean putty = scpExecutable.indexOf( "pscp" ) >= 0;
@@ -224,6 +224,8 @@
         }
         catch ( FileNotFoundException e )
         {
+            fireSessionConnectionRefused();
+            
             throw new AuthorizationException( e.getMessage() );
         }
         Commandline cl = createBaseCommandLine( putty, scpExecutable, privateKey );
@@ -240,6 +242,10 @@
         {
             cl.createArgument().setLine( scpArgs );
         }
+        
+        String resourceName = normalizeResource( resource );
+        String remoteFile = getRepository().getBasedir() + "/" + resourceName;
+        
         String qualifiedRemoteFile = this.buildRemoteHost() + ":" + remoteFile;
         if ( put )
         {
@@ -266,16 +272,27 @@
                 }
                 else
                 {
-                    throw new TransferFailedException( "Exit code: " + exitCode + " - " + err.getOutput() );
+                    TransferFailedException e = new TransferFailedException( "Exit code: " + exitCode + " - " + err.getOutput() );
+
+                    fireTransferError( resource, e, put ? TransferEvent.REQUEST_PUT : TransferEvent.REQUEST_GET );
+
+                    throw e;
                 }
             }
         }
         catch ( CommandLineException e )
         {
+            fireTransferError( resource, e, put ? TransferEvent.REQUEST_PUT : TransferEvent.REQUEST_GET );
+
             throw new TransferFailedException( "Error executing command line", e );
         }
     }
 
+    private String normalizeResource( Resource resource )
+    {
+        return StringUtils.replace( resource.getName(), "\\", "/" );
+    }
+
     public void put( File source, String destination )
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
     {
@@ -285,7 +302,7 @@
 
         if ( !source.exists() )
         {
-            throw new TransferFailedException( "Specified source file does not exist: " + source );
+            throw new ResourceDoesNotExistException( "Specified source file does not exist: " + source );
         }
 
         String basedir = getRepository().getBasedir();
@@ -320,6 +337,8 @@
         }
         catch ( CommandExecutionException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+            
             throw new TransferFailedException( "Error executing command for transfer", e );
         }
         
@@ -329,7 +348,7 @@
 
         firePutStarted( resource, source );
 
-        executeScpCommand( source, basedir + "/" + resourceName, true );
+        executeScpCommand( resource, source, true );
 
         postProcessListeners( resource, source, TransferEvent.REQUEST_PUT );
 
@@ -352,6 +371,8 @@
         }
         catch ( CommandExecutionException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
             throw new TransferFailedException( "Error executing command for transfer", e );
         }
         firePutCompleted( resource, source );
@@ -378,7 +399,7 @@
 
         fireGetStarted( resource, destination );
 
-        executeScpCommand( destination, basedir + "/" + path, false );
+        executeScpCommand( resource, destination, false );
 
         postProcessListeners( resource, destination, TransferEvent.REQUEST_GET );
 

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/AbstractGanymedWagon.java Tue May 27 09:27:39 2008
@@ -130,7 +130,6 @@
         }
         catch ( IOException e )
         {
-            fireSessionError( e );
             throw new AuthenticationException( "Cannot connect. Reason: " + e.getMessage(), e );
         }
 
@@ -162,7 +161,6 @@
         catch ( IOException e )
         {
             closeConnection();
-            fireSessionError( e );
             throw new AuthenticationException( "Cannot authenticate. Reason: " + e.getMessage(), e );
         }
     }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/ScpWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/ScpWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/ScpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh-ganymed/src/main/java/org/apache/maven/wagon/providers/ssh/ganymed/ScpWagon.java Tue May 27 09:27:39 2008
@@ -94,6 +94,8 @@
         }
         catch ( CommandExecutionException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+            
             throw new TransferFailedException( "Error performing commands for file transfer", e );
         }
 
@@ -113,6 +115,8 @@
         }
         catch ( IOException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
             throw new TransferFailedException( "Error transferring file. Reason: " + e.getMessage(), e );
         }
 
@@ -129,6 +133,8 @@
         }
         catch ( CommandExecutionException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
             throw new TransferFailedException( "Error performing commands for file transfer", e );
         }
     }
@@ -153,6 +159,8 @@
         }
         catch ( FileNotFoundException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+
             throw new TransferFailedException( "Error writing output file. Reason: " + e.getMessage(), e );
         }
 
@@ -176,6 +184,8 @@
             }
             else
             {
+                fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+
                 throw new TransferFailedException( "Error transferring file. Reason: " + e.getMessage(), e );
             }
         }

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/ScpWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/ScpWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/ScpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/ScpWagon.java Tue May 27 09:27:39 2008
@@ -25,6 +25,7 @@
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.TransferFailedException;
 import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferEvent;
 import org.apache.maven.wagon.providers.ssh.ScpHelper;
 import org.apache.maven.wagon.repository.RepositoryPermissions;
 import org.apache.maven.wagon.resource.Resource;
@@ -68,28 +69,30 @@
 
         firePutInitiated( resource, source );
 
-        ScpHelper.createRemoteDirectories( getPath( basedir, dir ), getRepository().getPermissions(), this );
+        try
+        {
+            ScpHelper.createRemoteDirectories( getPath( basedir, dir ), getRepository().getPermissions(), this );
 
-        RepositoryPermissions permissions = getRepository().getPermissions();
+            RepositoryPermissions permissions = getRepository().getPermissions();
 
-        put( source, basedir, resource, getOctalMode( permissions ) );
+            put( source, basedir, resource, getOctalMode( permissions ) );
 
-        setFileGroup( permissions, basedir, resource );
+            setFileGroup( permissions, basedir, resource );
+        }
+        catch ( CommandExecutionException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+            
+            throw new TransferFailedException( e.getMessage(), e );
+        }
     }
 
     private void setFileGroup( RepositoryPermissions permissions, String basedir, Resource resource )
-        throws TransferFailedException
+        throws CommandExecutionException
     {
-        try
+        if ( permissions != null && permissions.getGroup() != null )
         {
-            if ( permissions != null && permissions.getGroup() != null )
-            {
-                executeCommand( "chgrp -f " + permissions.getGroup() + " " + getPath( basedir, resource.getName() ) );
-            }
-        }
-        catch ( CommandExecutionException e )
-        {
-            throw new TransferFailedException( "Error performing commands for file transfer", e );
+            executeCommand( "chgrp -f " + permissions.getGroup() + " " + getPath( basedir, resource.getName() ) );
         }
     }
 
@@ -179,15 +182,19 @@
         }
         catch ( IOException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );            
+            
             String msg = "Error occured while deploying '" + resourceName + "' to remote repository: " +
-                getRepository().getUrl();
+                getRepository().getUrl() + ": " + e.getMessage();
 
             throw new TransferFailedException( msg, e );
         }
         catch ( JSchException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );            
+            
             String msg = "Error occured while deploying '" + resourceName + "' to remote repository: " +
-                getRepository().getUrl();
+                getRepository().getUrl() + ": " + e.getMessage();
 
             throw new TransferFailedException( msg, e );
         }
@@ -203,26 +210,26 @@
     }
 
     private void checkAck( InputStream in )
-        throws IOException, TransferFailedException
+        throws IOException
     {
         int code = in.read();
         if ( code == -1 )
         {
-            throw new TransferFailedException( "Unexpected end of data" );
+            throw new IOException( "Unexpected end of data" );
         }
         else if ( code == 1 )
         {
             String line = readLine( in );
 
-            throw new TransferFailedException( "SCP terminated with error: '" + line + "'" );
+            throw new IOException( "SCP terminated with error: '" + line + "'" );
         }
         else if ( code == 2 )
         {
-            throw new TransferFailedException( "SCP terminated with error (code: " + code + ")" );
+            throw new IOException( "SCP terminated with error (code: " + code + ")" );
         }
         else if ( code != 0 )
         {
-            throw new TransferFailedException( "SCP terminated with unknown error code" );
+            throw new IOException( "SCP terminated with unknown error code" );
         }
     }
 
@@ -274,7 +281,7 @@
                 }
                 else
                 {
-                    throw new TransferFailedException( "Exit code: " + exitCode + " - " + line );
+                    throw new IOException( "Exit code: " + exitCode + " - " + line );
                 }
             }
 
@@ -288,13 +295,13 @@
 
             if ( line.charAt( 4 ) != ACK_SEPARATOR && line.charAt( 5 ) != ACK_SEPARATOR )
             {
-                throw new TransferFailedException( "Invalid transfer header: " + line );
+                throw new IOException( "Invalid transfer header: " + line );
             }
 
             int index = line.indexOf( ACK_SEPARATOR, 5 );
             if ( index < 0 )
             {
-                throw new TransferFailedException( "Invalid transfer header: " + line );
+                throw new IOException( "Invalid transfer header: " + line );
             }
 
             int filesize = Integer.valueOf( line.substring( 5, index ) ).intValue();
@@ -311,7 +318,7 @@
 
             if ( destination.length() != filesize )
             {
-                throw new TransferFailedException(
+                throw new IOException(
                     "Expected file length: " + filesize + "; received = " + destination.length() );
             }
 

Modified: maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/SftpWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/SftpWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/SftpWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-ssh/src/main/java/org/apache/maven/wagon/providers/ssh/jsch/SftpWagon.java Tue May 27 09:27:39 2008
@@ -78,9 +78,18 @@
 
             channel.cd( "/" );
             
-            mkdirs( channel, basedir + "/", directoryMode );
-            
-            mkdirs( channel, resourceName, directoryMode );
+            try
+            {
+                mkdirs( channel, basedir + "/", directoryMode );
+                
+                mkdirs( channel, resourceName, directoryMode );
+            }
+            catch ( TransferFailedException e )
+            {
+                fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
+                throw e;
+            }
 
             putFile( channel, source, resource, permissions );
 
@@ -92,6 +101,8 @@
         }
         catch ( SftpException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+            
             String msg = "Error occured while deploying '" + resourceName + "' " + "to remote repository: " +
                 getRepository().getUrl();
 
@@ -99,6 +110,8 @@
         }
         catch ( JSchException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+
             String msg = "Error occured while deploying '" + resourceName + "' " + "to remote repository: " +
                 getRepository().getUrl();
 
@@ -172,7 +185,7 @@
     }
 
     private void mkdirs( ChannelSftp channel, String resourceName, int mode )
-        throws TransferFailedException, SftpException
+        throws SftpException, TransferFailedException
     {
         String[] dirs = PathUtils.dirnames( resourceName );
         for ( int i = 0; i < dirs.length; i++ )

Modified: maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java?rev=660586&r1=660585&r2=660586&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-webdav/src/main/java/org/apache/maven/wagon/providers/webdav/WebDavWagon.java Tue May 27 09:27:39 2008
@@ -25,6 +25,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.commons.httpclient.HttpException;
 import org.apache.commons.httpclient.HttpStatus;
 import org.apache.jackrabbit.webdav.DavConstants;
 import org.apache.jackrabbit.webdav.DavException;
@@ -40,6 +41,7 @@
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.TransferFailedException;
 import org.apache.maven.wagon.authorization.AuthorizationException;
+import org.apache.maven.wagon.events.TransferEvent;
 import org.apache.maven.wagon.repository.Repository;
 import org.apache.maven.wagon.resource.Resource;
 import org.apache.maven.wagon.shared.http.AbstractHttpClientWagon;
@@ -97,7 +99,14 @@
         firePutInitiated( resource, source );
 
         //Parent directories need to be created before posting
-        mkdirs( dir );
+        try
+        {
+            mkdirs( dir );
+        }
+        catch ( IOException e )
+        {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+        }
 
         super.put(source, resource);
     }
@@ -117,10 +126,11 @@
      * They are created one at a time until the whole path exists.
      *
      * @param dir path to be created in server from repository basedir
+     * @throws IOException 
+     * @throws HttpException 
      * @throws TransferFailedException
      */
-    private void mkdirs( String dir )
-        throws TransferFailedException
+    private void mkdirs( String dir ) throws HttpException, IOException
     {
         Repository repository = getRepository();
         String basedir = repository.getBasedir();
@@ -150,12 +160,12 @@
             status = doMkCol( url );
             if ( status != HttpStatus.SC_OK && status != HttpStatus.SC_CREATED )
             {
-                throw new TransferFailedException( "Unable to create collection: " + url + "; status code = " + status );
+                throw new IOException( "Unable to create collection: " + url + "; status code = " + status );
             }
         }
     }
 
-    private int doMkCol(String url) throws TransferFailedException
+    private int doMkCol(String url) throws HttpException, IOException
     {
         MkColMethod method = null;
         try
@@ -205,7 +215,7 @@
 
     }
 
-    private boolean isDirectory(String url) throws TransferFailedException
+    private boolean isDirectory( String url ) throws IOException, DavException
     {
         DavPropertyNameSet nameSet = new DavPropertyNameSet();
         nameSet.add(DavPropertyName.create(DavConstants.PROPERTY_RESOURCETYPE));
@@ -229,14 +239,6 @@
             }
             return false;
         }
-        catch (DavException e)
-        {
-            throw new TransferFailedException(e.getMessage(), e);
-        }
-        catch (IOException e)
-        {
-            throw new TransferFailedException(e.getMessage(), e);
-        }
         finally
         {
             if (method != null) method.releaseConnection();
@@ -247,10 +249,10 @@
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
     {
         final String url = getRepository().getUrl() + '/' + destinationDirectory;
-        if (isDirectory(url))
+        PropFindMethod method = null;
+        try
         {
-            PropFindMethod method = null;
-            try
+            if (isDirectory(url))
             {
                 DavPropertyNameSet nameSet = new DavPropertyNameSet();
                 nameSet.add(DavPropertyName.create(DavConstants.PROPERTY_DISPLAYNAME));
@@ -279,18 +281,18 @@
                     throw new ResourceDoesNotExistException( "Destination directory does not exist: " + url ); 
                 }
             }
-            catch (DavException e)
-            {
-                throw new TransferFailedException(e.getMessage(), e);
-            }
-            catch (IOException e)
-            {
-                throw new TransferFailedException(e.getMessage(), e); 
-            }
-            finally
-            {
-                if (method != null) method.releaseConnection();
-            }
+        }
+        catch (DavException e)
+        {
+            throw new TransferFailedException(e.getMessage(), e);
+        }
+        catch (IOException e)
+        {
+            throw new TransferFailedException(e.getMessage(), e); 
+        }
+        finally
+        {
+            if (method != null) method.releaseConnection();
         }
         throw new ResourceDoesNotExistException("Destination path exists but is not a " + "WebDAV collection (directory): " + url );
     }



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