From 062cbe4ec305a8fc4cf421da4f0ceab013921048 Mon Sep 17 00:00:00 2001 From: Martin Oberhuber < martin.oberhuber@windriver.com> Date: Mon, 21 Aug 2006 10:03:36 +0000 Subject: [PATCH] Fix bug 154419 - cannot delete broken symbolic links on ssh --- .../rse/services/ssh/SshServiceResources.java | 4 +++ .../ssh/SshServiceResources.properties | 2 ++ .../services/ssh/files/SftpFileService.java | 29 ++++++++++++++----- .../rse/services/ssh/files/SftpHostFile.java | 2 +- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/SshServiceResources.java b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/SshServiceResources.java index 3947737b221..be3dc850e9e 100644 --- a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/SshServiceResources.java +++ b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/SshServiceResources.java @@ -16,6 +16,10 @@ import org.eclipse.osgi.util.NLS; public class SshServiceResources extends NLS { private static final String BUNDLE_NAME = "org.eclipse.rse.services.ssh.SshServiceResources"; //$NON-NLS-1$ + public static String SftpFileService_Error_download_size; + + public static String SftpFileService_Error_upload_size; + public static String SshPlugin_Unexpected_Exception; public static String SftpFileService_Description; diff --git a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/SshServiceResources.properties b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/SshServiceResources.properties index 88d9556a7f3..d111e4c6309 100644 --- a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/SshServiceResources.properties +++ b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/SshServiceResources.properties @@ -14,6 +14,8 @@ SshPlugin_Unexpected_Exception=Unexpected {0}: {1} SftpFileService_Name=Ssh / Sftp File Service SftpFileService_Description=Access a remote file system via Ssh / Sftp protocol SftpFileService_Error_JschSessionLost=jsch session lost +SftpFileService_Error_upload_size=Ssh upload: file size mismatch for {0} +SftpFileService_Error_download_size=Ssh download: file size mismatch for {0} SftpFileService_Msg_Progress={0,number,integer} KB of {1,number,integer} KB complete ({2,number,percent}) SshShellService_Name=SSH Shell Service diff --git a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpFileService.java b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpFileService.java index 8beccf051de..85f91c9f0b3 100644 --- a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpFileService.java +++ b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpFileService.java @@ -22,10 +22,12 @@ import java.io.OutputStream; import java.text.MessageFormat; import java.util.ArrayList; import java.util.List; +import java.util.Vector; import java.util.regex.Pattern; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; +import org.eclipse.osgi.util.NLS; import com.jcraft.jsch.Channel; import com.jcraft.jsch.ChannelExec; @@ -158,7 +160,7 @@ public class SftpFileService extends AbstractFileService implements IFileService } else { messageException = new RemoteFileIOException(e); } - messageException.getSystemMessage().makeSubstitution("Sftp: "+sftpe.toString()); + messageException.getSystemMessage().makeSubstitution("Sftp: "+sftpe.toString()); //$NON-NLS-1$ //Dont translate since the exception isnt translated either return messageException; } return new RemoteFileIOException(e); @@ -213,7 +215,7 @@ public class SftpFileService extends AbstractFileService implements IFileService List results = new ArrayList(); if (fDirChannelMutex.waitForLock(monitor, fDirChannelTimeout)) { try { - java.util.Vector vv=getChannel("SftpFileService.internalFetch").ls(parentPath); //$NON-NLS-1$ + Vector vv=getChannel("SftpFileService.internalFetch").ls(parentPath); //$NON-NLS-1$ for(int ii=0; ii if it really doesnt exist, this will throw an exception + getChannel("SftpFileService.delete.rm").rm(fullPath); //$NON-NLS-1$ + } else { + throw e; + } + } if (attrs==null) { //doesn't exist, nothing to do } else if (attrs.isDir()) { @@ -547,6 +560,8 @@ public class SftpFileService extends AbstractFileService implements IFileService } catch(SftpException e) { if(e.id==ChannelSftp.SSH_FX_FAILURE) { throw new RemoteFolderNotEmptyException(); + } else { + throw e; } } } else { diff --git a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpHostFile.java b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpHostFile.java index f7a3b8282e4..6456ed1c740 100644 --- a/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpHostFile.java +++ b/rse/plugins/org.eclipse.rse.services.ssh/src/org/eclipse/rse/services/ssh/files/SftpHostFile.java @@ -171,7 +171,7 @@ public class SftpHostFile implements IHostFile { if (isLink()) { result = "symbolic link"; //$NON-NLS-1$ if (fLinkTarget!=null) { - if (fLinkTarget.equals(":dangling link")) { + if (fLinkTarget.equals(":dangling link")) { //$NON-NLS-1$ result = "broken symbolic link to `unknown'"; //$NON-NLS-1$ } else if(isDirectory()) { result += "(directory):" + fLinkTarget; //$NON-NLS-1$