diff --git a/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDeleteFeature.java b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDeleteFeature.java index e5d2059d252..cd571e1afd8 100644 --- a/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDeleteFeature.java +++ b/ftp/src/main/java/ch/cyberduck/core/ftp/FTPDeleteFeature.java @@ -25,9 +25,6 @@ import java.io.IOException; import java.util.List; -/** - * @version $Id$ - */ public class FTPDeleteFeature implements Delete { private FTPSession session; @@ -47,6 +44,10 @@ public void delete(final List files, final LoginCallback prompt, final Cal } } else if(file.isDirectory()) { + // Change working directory to parent + if(!session.getClient().changeWorkingDirectory(file.getParent().getAbsolute())) { + throw new FTPException(session.getClient().getReplyCode(), session.getClient().getReplyString()); + } if(!session.getClient().removeDirectory(file.getAbsolute())) { throw new FTPException(session.getClient().getReplyCode(), session.getClient().getReplyString()); } diff --git a/ftp/src/test/java/ch/cyberduck/core/ftp/FTPDeleteFeatureTest.java b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPDeleteFeatureTest.java index 75bd1f924b3..d73387902d8 100644 --- a/ftp/src/test/java/ch/cyberduck/core/ftp/FTPDeleteFeatureTest.java +++ b/ftp/src/test/java/ch/cyberduck/core/ftp/FTPDeleteFeatureTest.java @@ -37,9 +37,6 @@ import java.util.EnumSet; import java.util.UUID; -/** - * @version $Id$ - */ @Category(IntegrationTest.class) public class FTPDeleteFeatureTest { @@ -58,4 +55,21 @@ public void delete(final Path file) { } }); } + + @Test + public void testDeleteDirectory() throws Exception { + final Host host = new Host(new FTPTLSProtocol(), "test.cyberduck.ch", new Credentials( + System.getProperties().getProperty("ftp.user"), System.getProperties().getProperty("ftp.password") + )); + final FTPSession session = new FTPSession(host); + session.open(new DisabledHostKeyCallback(), new DisabledTranscriptListener()); + session.login(new DisabledPasswordStore(), new DisabledLoginCallback(), new DisabledCancelCallback()); + final Path test = new Path(new DefaultHomeFinderService(session).find(), UUID.randomUUID().toString(), EnumSet.of(Path.Type.directory)); + new FTPDirectoryFeature(session).mkdir(test); + new FTPDeleteFeature(session).delete(Collections.singletonList(test), new DisabledLoginCallback(), new Delete.Callback() { + @Override + public void delete(final Path file) { + } + }); + } }