[FLINK-1848] Fix for file paths with Windows drive letters This closes #712
Project: http://git-wip-us.apache.org/repos/asf/flink/repo Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/7164b2b6 Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/7164b2b6 Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/7164b2b6 Branch: refs/heads/master Commit: 7164b2b643985b99c6688b62174de42a71deb71b Parents: 21207fd Author: Fabian Hueske <fhue...@apache.org> Authored: Thu May 21 22:24:12 2015 +0200 Committer: Fabian Hueske <fhue...@apache.org> Committed: Wed May 27 00:39:08 2015 +0200 ---------------------------------------------------------------------- .../src/main/java/org/apache/flink/core/fs/Path.java | 6 +++++- .../org/apache/flink/core/fs/local/LocalFileSystem.java | 7 ++++++- .../test/java/org/apache/flink/core/fs/PathTest.java | 12 ++++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flink/blob/7164b2b6/flink-core/src/main/java/org/apache/flink/core/fs/Path.java ---------------------------------------------------------------------- diff --git a/flink-core/src/main/java/org/apache/flink/core/fs/Path.java b/flink-core/src/main/java/org/apache/flink/core/fs/Path.java index 75155eb..c47bc0d 100644 --- a/flink-core/src/main/java/org/apache/flink/core/fs/Path.java +++ b/flink-core/src/main/java/org/apache/flink/core/fs/Path.java @@ -260,7 +260,11 @@ public class Path implements IOReadableWritable, Serializable { path = path.replaceAll("/+", "/"); // remove tailing separator - if(!path.equals(SEPARATOR) && path.endsWith(SEPARATOR)) { + if(!path.equals(SEPARATOR) && // UNIX root path + !path.matches("/\\p{Alpha}+:/") && // Windows root path + path.endsWith(SEPARATOR)) + { + // remove tailing slash path = path.substring(0, path.length() - SEPARATOR.length()); } http://git-wip-us.apache.org/repos/asf/flink/blob/7164b2b6/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java ---------------------------------------------------------------------- diff --git a/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java b/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java index 2313a41..9dd9e30 100644 --- a/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java +++ b/flink-core/src/main/java/org/apache/flink/core/fs/local/LocalFileSystem.java @@ -228,8 +228,13 @@ public class LocalFileSystem extends FileSystem { */ public boolean mkdirs(final Path f) throws IOException { - final Path parent = f.getParent(); final File p2f = pathToFile(f); + + if(p2f.isDirectory()) { + return true; + } + + final Path parent = f.getParent(); return (parent == null || mkdirs(parent)) && (p2f.mkdir() || p2f.isDirectory()); } http://git-wip-us.apache.org/repos/asf/flink/blob/7164b2b6/flink-core/src/test/java/org/apache/flink/core/fs/PathTest.java ---------------------------------------------------------------------- diff --git a/flink-core/src/test/java/org/apache/flink/core/fs/PathTest.java b/flink-core/src/test/java/org/apache/flink/core/fs/PathTest.java index 8fa2cea..66816ad 100644 --- a/flink-core/src/test/java/org/apache/flink/core/fs/PathTest.java +++ b/flink-core/src/test/java/org/apache/flink/core/fs/PathTest.java @@ -117,12 +117,24 @@ public class PathTest { p = new Path("y:/my/abs/windows/path"); assertTrue(p.isAbsolute()); + p = new Path("/y:/my/abs/windows/path"); + assertTrue(p.isAbsolute()); + p = new Path("b:\\my\\abs\\windows\\path"); assertTrue(p.isAbsolute()); + p = new Path("/c:/my/dir"); + assertTrue(p.isAbsolute()); + + p = new Path("/C:/"); + assertTrue(p.isAbsolute()); + p = new Path("C:"); assertFalse(p.isAbsolute()); + p = new Path("C:/"); + assertTrue(p.isAbsolute()); + p = new Path("C:my\\relative\\path"); assertFalse(p.isAbsolute());