From 07529a209d417bd8311dcfcb50298c3311f45f92 Mon Sep 17 00:00:00 2001 From: Vinayakumar B Date: Mon, 26 Nov 2018 18:11:01 +0530 Subject: [PATCH] HADOOP-15948. Inconsistency in get and put syntax if filename/dirname contains space. Contributed by Ayush Saxena. (cherry picked from commit 23b441c2253bcb3be5229d3c5eb1e165369070c0) --- .../java/org/apache/hadoop/fs/shell/CopyCommands.java | 7 +------ .../apache/hadoop/fs/shell/TestCopyPreserveFlag.java | 10 ++++++++++ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/CopyCommands.java b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/CopyCommands.java index 11cb3d6c295..c408a4fe754 100644 --- a/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/CopyCommands.java +++ b/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/CopyCommands.java @@ -268,12 +268,7 @@ class CopyCommands { try { items.add(new PathData(new URI(arg), getConf())); } catch (URISyntaxException e) { - if (Path.WINDOWS) { - // Unlike URI, PathData knows how to parse Windows drive-letter paths. - items.add(new PathData(arg, getConf())); - } else { - throw new IOException("unexpected URISyntaxException", e); - } + items.add(new PathData(arg, getConf())); } return items; } diff --git a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/shell/TestCopyPreserveFlag.java b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/shell/TestCopyPreserveFlag.java index 8dd09e5341b..8d2e1608723 100644 --- a/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/shell/TestCopyPreserveFlag.java +++ b/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/shell/TestCopyPreserveFlag.java @@ -43,9 +43,11 @@ public class TestCopyPreserveFlag { private static final int MODIFICATION_TIME = 12345000; private static final int ACCESS_TIME = 23456000; private static final Path DIR_FROM = new Path("d0"); + private static final Path DIR_FROM_SPL = new Path("d0 space"); private static final Path DIR_TO1 = new Path("d1"); private static final Path DIR_TO2 = new Path("d2"); private static final Path FROM = new Path(DIR_FROM, "f0"); + private static final Path FROM_SPL = new Path(DIR_FROM_SPL, "f0"); private static final Path TO = new Path(DIR_TO1, "f1"); private static final FsPermission PERMISSIONS = new FsPermission( FsAction.ALL, @@ -120,6 +122,14 @@ public class TestCopyPreserveFlag { assertAttributesChanged(TO); } + @Test(timeout = 10000) + public void testPutWithSplCharacter() throws Exception { + fs.mkdirs(DIR_FROM_SPL); + fs.createNewFile(FROM_SPL); + run(new Put(), FROM_SPL.toString(), TO.toString()); + assertAttributesChanged(TO); + } + @Test(timeout = 10000) public void testCopyFromLocal() throws Exception { run(new CopyFromLocal(), FROM.toString(), TO.toString());