浏览代码

HADOOP-17310. Touch command with -c option is broken. (#2393). Contributed by Ayush Saxena.

Ayush Saxena 4 年之前
父节点
当前提交
8ec256db04

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

@@ -138,7 +138,7 @@ public class TouchCommands extends FsCommand {
 
       CommandFormat cf = new CommandFormat(1, Integer.MAX_VALUE,
           OPTION_USE_TIMESTAMP, OPTION_CHANGE_ONLY_ACCESS_TIME,
-          OPTION_CHANGE_ONLY_MODIFICATION_TIME);
+          OPTION_CHANGE_ONLY_MODIFICATION_TIME, OPTION_DO_NOT_CREATE_FILE);
       cf.parse(args);
       this.changeModTime = cf.getOpt(OPTION_CHANGE_ONLY_MODIFICATION_TIME);
       this.changeAccessTime = cf.getOpt(OPTION_CHANGE_ONLY_ACCESS_TIME);

+ 12 - 2
hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/fs/TestFsShellTouch.java

@@ -101,7 +101,7 @@ public class TestFsShellTouch {
     {
       assertThat(
           "Expected successful touch on a non-existent file with -c option",
-          shellRun("-touch", "-c", newFileName), is(not(0)));
+          shellRun("-touch", "-c", newFileName), is(0));
       assertThat(lfs.exists(newFile), is(false));
     }
 
@@ -140,7 +140,7 @@ public class TestFsShellTouch {
       Date dateObj = parseTimestamp(strTime);
 
       assertThat(
-          "Expected successful touch with a specified modificatiom time",
+          "Expected successful touch with a specified modification time",
           shellRun("-touch", "-m", "-t", strTime, newFileName), is(0));
       // Verify if modification time is recorded correctly (and access time
       // remains unchanged).
@@ -179,6 +179,16 @@ public class TestFsShellTouch {
       assertThat("Expected failed touch with a missing timestamp",
           shellRun("-touch", "-t", newFileName), is(not(0)));
     }
+
+    // Verify -c option when file exists.
+    String strTime = formatTimestamp(System.currentTimeMillis());
+    Date dateObj = parseTimestamp(strTime);
+    assertThat(
+        "Expected successful touch on a non-existent file with -c option",
+        shellRun("-touch", "-c", "-t", strTime, newFileName), is(0));
+    FileStatus fileStatus = lfs.getFileStatus(newFile);
+    assertThat(fileStatus.getAccessTime(), is(dateObj.getTime()));
+    assertThat(fileStatus.getModificationTime(), is(dateObj.getTime()));
   }
 
   private String formatTimestamp(long timeInMillis) {