diff options
author | Pavel Agapov | 2015-08-13 04:59:20 +0000 |
---|---|---|
committer | Pavel Agapov | 2015-08-17 05:17:14 +0000 |
commit | f256ffd7ada9480d43e9c971a9813729149facc2 (patch) | |
tree | d2ffbe0b1fecdc16dc2f8e891e58d566d3a11739 | |
parent | fa0cdc44a1a702777ca89dcea02e9438a62e384e (diff) | |
download | org.eclipse.rcptt-f256ffd7ada9480d43e9c971a9813729149facc2.tar.gz org.eclipse.rcptt-f256ffd7ada9480d43e9c971a9813729149facc2.tar.xz org.eclipse.rcptt-f256ffd7ada9480d43e9c971a9813729149facc2.zip |
[474788] Use FileResolver to resolve pathes of copy-file command.
Bug: https://bugs.eclipse.org/bugs/show_bug.cgi?id=474788
Change-Id: I5ad91075407c6fb822a41ef68144c53631fb9815
Signed-off-by: Pavel Agapov <pavel.agapov@xored.com>
7 files changed, 45 insertions, 20 deletions
diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java index 764d8dbe4..4a3200ba1 100644 --- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java +++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/EclFile.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.rcptt.ecl.filesystem; +import java.io.File; import java.io.InputStream; import java.net.URI; import java.util.Collection; @@ -35,4 +36,6 @@ public interface EclFile { void write(InputStream data) throws CoreException; InputStream read() throws CoreException; + + File toFile(); } diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java index 509bf29a6..52dbf241b 100644 --- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java +++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/FileResolver.java @@ -55,6 +55,7 @@ public class FileResolver { } public static EclFile resolve(String uri) throws CoreException { + uri = uri.replaceAll("(/{2,})|(\\\\{2,})", "/"); try { return resolve(new URI(uri)); } catch (URISyntaxException e) { diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java index dd60540f8..7ad040e97 100644 --- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java +++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/CompositeEclFileResolver.java @@ -12,6 +12,7 @@ package org.eclipse.rcptt.ecl.filesystem.internal; import java.io.IOException; import java.net.URI; +import java.net.URISyntaxException; import java.util.ArrayList; import java.util.List; @@ -26,13 +27,30 @@ public class CompositeEclFileResolver implements EclFileResolver { } @Override - public EclFile resolve(URI uri) throws IOException { - for (EclFileResolver child : children) { - EclFile rv = child.resolve(uri); - if (rv != null) - return rv; + public EclFile resolve(URI uri) throws IOException { + EclFile result = resolveRaw(uri); + if (result != null) { + return result; + } + try { + uri = new URI("file", null, uri.getPath(), null); + } catch (URISyntaxException e) { + throw new IOException(e.getMessage()); + } + result = resolveRaw(uri); + if (result != null) { + return result; } throw new IOException("failed to resolve " + uri); } + + private EclFile resolveRaw(URI uri) throws IOException { + for (EclFileResolver child : children) { + EclFile rv = child.resolve(uri); + if (rv != null) + return rv; + } + return null; + } } diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java index 5dddb4b63..0fb5b450c 100644 --- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java +++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/JavaFile.java @@ -214,4 +214,9 @@ public class JavaFile implements EclFile { return file.toString(); } + @Override + public File toFile() { + return file; + } + } diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java index 73aa520ea..88f118faf 100644 --- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java +++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/ResourceFile.java @@ -10,6 +10,7 @@ *******************************************************************************/ package org.eclipse.rcptt.ecl.filesystem.internal; +import java.io.File; import java.io.InputStream; import java.net.URI; import java.net.URISyntaxException; @@ -201,4 +202,9 @@ public class ResourceFile implements EclFile { return path.makeAbsolute().toPortableString(); } + @Override + public File toFile() { + return new File(root.getLocation().append(path).makeAbsolute().toPortableString()); + } + } diff --git a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java index dc2f72f73..cd8ef62cf 100644 --- a/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java +++ b/ecl/plugins/org.eclipse.rcptt.ecl.filesystem/src/org/eclipse/rcptt/ecl/filesystem/internal/commands/CopyFileService.java @@ -16,6 +16,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.net.URI; import java.nio.channels.FileChannel; import org.eclipse.core.runtime.CoreException; @@ -24,6 +25,7 @@ import org.eclipse.core.runtime.Status; import org.eclipse.rcptt.ecl.core.Command; import org.eclipse.rcptt.ecl.filesystem.CopyFile; import org.eclipse.rcptt.ecl.filesystem.EclFilesystemPlugin; +import org.eclipse.rcptt.ecl.filesystem.FileResolver; import org.eclipse.rcptt.ecl.runtime.ICommandService; import org.eclipse.rcptt.ecl.runtime.IProcess; @@ -41,14 +43,14 @@ public class CopyFileService implements ICommandService { if (dst == null || dst.length() == 0) return createError("Destination directory is not specified."); - + try { - File srcFile = new File(src).getCanonicalFile(); + File srcFile = FileResolver.resolve(src).toFile().getCanonicalFile(); if (!srcFile.exists()) return createError("Source file/directory \"%s\" does not exist.", srcFile); - File dstFile = new File(dst).getCanonicalFile(); + File dstFile = FileResolver.resolve(dst).toFile().getCanonicalFile(); if (dstFile.exists() && !dstFile.isDirectory()) return createError("Destination \"%s\" must be a directory.", dstFile); @@ -58,9 +60,9 @@ public class CopyFileService implements ICommandService { dstFile); if (name != null && name.length() > 0) - dstFile = new File(dst, name); + dstFile = new File(dstFile, name); else - dstFile = new File(dst, srcFile.getName()); + dstFile = new File(dstFile, srcFile.getName()); if (srcFile.isFile()) return copyFile(srcFile, dstFile); diff --git a/ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java b/ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java index 53d2e01ea..f87ca3924 100644 --- a/ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java +++ b/ecl/tests/org.eclipse.rcptt.ecl.data.tests/src/org/eclipse/rcptt/ecl/data/tests/ReadFileTest.java @@ -28,16 +28,6 @@ public class ReadFileTest extends TestWithSession{ } @Test - public void testWrongUri() { - try { - runScript("read-file \"%s\"", workspacePath); - } catch (CoreException exc) { - String message = exc.getMessage(); - Assert.assertTrue(message != null && message.equals("Failed to resolve project/folder/data.txt")); - } - } - - @Test public void testNotExists() { try { runScript("read-file \"file:/unknown\""); |