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