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:40:16 UTC

svn commit: r660594 - /maven/wagon/trunk/wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java

Author: brett
Date: Tue May 27 09:40:13 2008
New Revision: 660594

URL: http://svn.apache.org/viewvc?rev=660594&view=rev
Log:
[WAGON-100] improvements to error handling for SCM

Modified:
    maven/wagon/trunk/wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java

Modified: maven/wagon/trunk/wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java
URL: http://svn.apache.org/viewvc/maven/wagon/trunk/wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java?rev=660594&r1=660593&r2=660594&view=diff
==============================================================================
--- maven/wagon/trunk/wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java (original)
+++ maven/wagon/trunk/wagon-providers/wagon-scm/src/main/java/org/apache/maven/wagon/providers/scm/ScmWagon.java Tue May 27 09:40:13 2008
@@ -186,7 +186,7 @@
     }
 
     private ScmRepository getScmRepository( String url )
-        throws TransferFailedException
+        throws ScmRepositoryException, NoSuchScmProviderException
     {
         String username = null;
 
@@ -207,20 +207,7 @@
             passphrase = authenticationInfo.getPassphrase();
         }
 
-        ScmRepository scmRepository;
-
-        try
-        {
-            scmRepository = getScmManager().makeScmRepository( url );
-        }
-        catch ( ScmRepositoryException e )
-        {
-            throw new TransferFailedException( "Error initialising SCM repository", e );
-        }
-        catch ( NoSuchScmProviderException e )
-        {
-            throw new TransferFailedException( "Unknown SCM type", e );
-        }
+        ScmRepository scmRepository = getScmManager().makeScmRepository( url );
 
         ScmProviderRepository providerRepository = scmRepository.getProviderRepository();
 
@@ -276,21 +263,21 @@
 
         firePutInitiated( target, source );
 
-        ScmRepository scmRepository = getScmRepository( getRepository().getUrl() );
-
-        target.setContentLength( source.length() );
-        target.setLastModified( source.lastModified() );
-        
-        firePutStarted( target, source );
-
         try
         {
+            ScmRepository scmRepository = getScmRepository( getRepository().getUrl() );
+
+            target.setContentLength( source.length() );
+            target.setLastModified( source.lastModified() );
+            
+            firePutStarted( target, source );
+
             String msg = "Wagon: Adding " + source.getName() + " to repository";
 
             ScmProvider scmProvider = getScmProvider( scmRepository.getProvider() );
 
             String checkoutTargetName = source.isDirectory() ? targetName : getDirname( targetName );
-            String relPath = checkOut( scmProvider, scmRepository, checkoutTargetName );
+            String relPath = checkOut( scmProvider, scmRepository, checkoutTargetName, target );
 
             File newCheckoutDirectory = new File( checkoutDirectory, relPath );
 
@@ -318,7 +305,7 @@
 
                 if ( !fileAlreadyInScm && addedFiles == 0 )
                 {
-                    throw new TransferFailedException(
+                    throw new ScmException(
                         "Unable to add file to SCM: " + scmFile + "; see error messages above for more information" );
                 }
             }
@@ -329,11 +316,15 @@
         }
         catch ( ScmException e )
         {
-            throw new TransferFailedException( "Error interacting with SCM", e );
+            fireTransferError( target, e, TransferEvent.REQUEST_GET );
+            
+            throw new TransferFailedException( "Error interacting with SCM: " + e.getMessage(), e );
         }
         catch ( IOException e )
         {
-            throw new TransferFailedException( "Error interacting with SCM", e );
+            fireTransferError( target, e, TransferEvent.REQUEST_GET );
+            
+            throw new TransferFailedException( "Error interacting with SCM: " + e.getMessage(), e );
         }
 
         if ( source.isFile() )
@@ -354,7 +345,7 @@
      * @return
      * @throws TransferFailedException
      */
-    private String checkOut( ScmProvider scmProvider, ScmRepository scmRepository, String targetName )
+    private String checkOut( ScmProvider scmProvider, ScmRepository scmRepository, String targetName, Resource resource )
         throws TransferFailedException
     {
         checkoutDirectory = createCheckoutDirectory();
@@ -380,7 +371,9 @@
         }
         catch ( ScmException e )
         {
-            throw new TransferFailedException( "Error listing repository", e );
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+            
+            throw new TransferFailedException( "Error listing repository: " + e.getMessage(), e );
         }
 
         // ok, we've established that target exists, or is empty.
@@ -400,7 +393,9 @@
         }
         catch ( ScmException e )
         {
-            throw new TransferFailedException( "Error checking out", e );
+            fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+            
+            throw new TransferFailedException( "Error checking out: " + e.getMessage(), e );
         }
 
         // now create the subdirs in target, if it's a parent of targetName
@@ -425,6 +420,8 @@
             }
             catch ( ScmException e )
             {
+                fireTransferError( resource, e, TransferEvent.REQUEST_PUT );
+                
                 throw new TransferFailedException( "Failed to add directory " + newDir + " to working copy", e );
             }
         }
@@ -445,7 +442,7 @@
      * @throws ScmException
      */
     private int addFiles( ScmProvider scmProvider, ScmRepository scmRepository, File basedir, String scmFilePath )
-        throws ScmException, TransferFailedException
+        throws ScmException
     {
         int addedFiles = 0;
 
@@ -511,13 +508,14 @@
      *
      * @param result
      * @throws TransferFailedException if result was not a successful operation
+     * @throws ScmException 
      */
     private void checkScmResult( ScmResult result )
-        throws TransferFailedException
+        throws ScmException
     {
         if ( !result.isSuccess() )
         {
-            throw new TransferFailedException( "Unable to commit file. " + result.getProviderMessage() + " " +
+            throw new ScmException( "Unable to commit file. " + result.getProviderMessage() + " " +
                 ( result.getCommandOutput() == null ? "" : result.getCommandOutput() ) );
         }
     }
@@ -551,18 +549,18 @@
         // remove the file
         url = url.substring( 0, url.lastIndexOf( '/' ) );
 
-        ScmRepository scmRepository = getScmRepository( url );
+        try
+        {
+            ScmRepository scmRepository = getScmRepository( url );
 
-        fireGetStarted( resource, destination );
+            fireGetStarted( resource, destination );
 
-        // TODO: limitations:
-        // - destination filename must match that in the repository - should allow the "-d" CVS equiv to be passed in
-        // - we don't get granular exceptions from SCM (ie, auth, not found)
-        // - need to make it non-recursive to save time
-        // - exists() check doesn't test if it is in SCM already
+            // TODO: limitations:
+            // - destination filename must match that in the repository - should allow the "-d" CVS equiv to be passed in
+            // - we don't get granular exceptions from SCM (ie, auth, not found)
+            // - need to make it non-recursive to save time
+            // - exists() check doesn't test if it is in SCM already
 
-        try
-        {
             File scmFile = new File( checkoutDirectory, resourceName );
 
             File basedir = scmFile.getParentFile();
@@ -595,10 +593,14 @@
         }
         catch ( ScmException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            
             throw new TransferFailedException( "Error getting file from SCM", e );
         }
         catch ( IOException e )
         {
+            fireTransferError( resource, e, TransferEvent.REQUEST_GET );
+            
             throw new TransferFailedException( "Error getting file from SCM", e );
         }
 
@@ -614,10 +616,10 @@
     public List getFileList( String resourcePath )
         throws TransferFailedException, ResourceDoesNotExistException, AuthorizationException
     {
-        ScmRepository repository = getScmRepository( getRepository().getUrl() );
-
         try
         {
+            ScmRepository repository = getScmRepository( getRepository().getUrl() );
+
             ScmProvider provider = getScmProvider( repository.getProvider() );
 
             ListScmResult result = provider.list( repository,
@@ -643,7 +645,6 @@
         }
         catch ( ScmException e )
         {
-            e.printStackTrace();
             throw new TransferFailedException( "Error getting filelist from SCM", e );
         }
     }



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