浏览代码

HADOOP-15948. Inconsistency in get and put syntax if filename/dirname contains space. Contributed by Ayush Saxena.

Vinayakumar B 6 年之前
父节点
当前提交
23b441c225

+ 1 - 6
hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/CopyCommands.java

@@ -274,12 +274,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;
     }

+ 10 - 0
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());