[MSTAGE-3] make the stage plugin work with all scp wagons
Submitted by: Rahul Akolkar


git-svn-id: https://svn.apache.org/repos/asf/maven/plugins/trunk@660862 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/src/main/java/org/apache/maven/plugins/stage/DefaultRepositoryCopier.java b/src/main/java/org/apache/maven/plugins/stage/DefaultRepositoryCopier.java
index 61df3ee..7a6d284 100644
--- a/src/main/java/org/apache/maven/plugins/stage/DefaultRepositoryCopier.java
+++ b/src/main/java/org/apache/maven/plugins/stage/DefaultRepositoryCopier.java
@@ -24,6 +24,8 @@
 import org.apache.maven.artifact.repository.metadata.Metadata;
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
 import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
+import org.apache.maven.wagon.CommandExecutor;
+import org.apache.maven.wagon.CommandExecutionException;
 import org.apache.maven.wagon.ConnectionException;
 import org.apache.maven.wagon.ResourceDoesNotExistException;
 import org.apache.maven.wagon.TransferFailedException;
@@ -33,7 +35,6 @@
 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.providers.ssh.jsch.ScpWagon;
 import org.apache.maven.wagon.repository.Repository;
 import org.codehaus.plexus.logging.LogEnabled;
 import org.codehaus.plexus.logging.Logger;
@@ -146,6 +147,13 @@
         logger.info( "Downloading metadata from the target repository." );
 
         Wagon targetWagon = wagonManager.getWagon( targetRepository );
+
+        if ( ! ( targetWagon instanceof CommandExecutor ) )
+        {
+            throw new CommandExecutionException( "Wagon class '" + targetWagon.getClass().getName() +
+                "' in use for target repository is not a CommandExecutor" );
+        }
+
         AuthenticationInfo targetAuth = wagonManager.getAuthenticationInfo( targetRepository.getId() );
 
         targetWagon.connect( targetRepository, targetAuth );
@@ -249,25 +257,25 @@
 
         String command = "unzip -o -qq -d " + targetRepoBaseDirectory + " " + targetRepoBaseDirectory + "/" + fileName;
 
-        ( (ScpWagon) targetWagon ).executeCommand( command );
+        ( (CommandExecutor) targetWagon ).executeCommand( command );
 
         logger.info( "Deleting zip file from the target repository." );
 
         command = "rm -f " + targetRepoBaseDirectory + "/" + fileName;
 
-        ( (ScpWagon) targetWagon ).executeCommand( command );
+        ( (CommandExecutor) targetWagon ).executeCommand( command );
 
         logger.info( "Running rename script on the target machine." );
 
         command = "cd " + targetRepoBaseDirectory + "; sh " + renameScriptName;
 
-        ( (ScpWagon) targetWagon ).executeCommand( command );
+        ( (CommandExecutor) targetWagon ).executeCommand( command );
 
         logger.info( "Deleting rename script from the target repository." );
 
         command = "rm -f " + targetRepoBaseDirectory + "/" + renameScriptName;
 
-        ( (ScpWagon) targetWagon ).executeCommand( command );
+        ( (CommandExecutor) targetWagon ).executeCommand( command );
 
         targetWagon.disconnect();
     }