Explorar o código

svn merge -c 1085043 from trunk for HADOOP-7174.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/branches/yahoo-merge@1126618 13f79535-47bb-0310-9956-ffa450edef68
Tsz-wo Sze %!s(int64=14) %!d(string=hai) anos
pai
achega
9297fa2cdf

+ 3 - 0
CHANGES.txt

@@ -435,6 +435,9 @@ Release 0.21.1 - Unreleased
     HADOOP-7193. Correct the "fs -touchz" command help message.
     (Uma Maheswara Rao G via szetszwo)
 
+    HADOOP-7174. Null is displayed in the "fs -copyToLocal" command.
+    (Uma Maheswara Rao G via szetszwo)
+
 Release 0.21.0 - 2010-08-13
 
   INCOMPATIBLE CHANGES

+ 3 - 0
src/java/org/apache/hadoop/fs/FsShell.java

@@ -191,6 +191,9 @@ public class FsShell extends Configured implements Tool {
         copyCrc = false;
       }
       FileStatus[] srcs = srcFS.globStatus(srcpath);
+      if (null == srcs) {
+	throw new IOException(srcpath + ": No such file or directory");
+      }
       boolean dstIsDir = dst.isDirectory(); 
       if (srcs.length > 1 && !dstIsDir) {
         throw new IOException("When copying multiple files, "

+ 36 - 0
src/test/core/org/apache/hadoop/fs/TestFsShellReturnCode.java

@@ -18,11 +18,15 @@
 
 package org.apache.hadoop.fs;
 
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hadoop.conf.Configuration;
 
 import org.apache.hadoop.fs.FileSystem;
+import org.apache.hadoop.io.IOUtils;
 
 import org.junit.Test;
 import org.junit.Assert;
@@ -237,4 +241,36 @@ public class TestFsShellReturnCode {
     verify(fs, "-chgrp", argv4, 1, fsShell, 0);
 
   }
+  
+  @Test
+  public void testGetWithInvalidSourcePathShouldNotDisplayNullInConsole()
+      throws Exception {
+    Configuration conf = new Configuration();
+    FsShell shell = new FsShell();
+    shell.setConf(conf);
+    final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+    final PrintStream out = new PrintStream(bytes);
+    final PrintStream oldErr = System.err;
+    System.setErr(out);
+    final String results;
+    try {
+      FileSystem fileSys = FileSystem.getLocal(conf);
+      String[] args = new String[3];
+      args[0] = "-get";
+      args[1] = "/invalidPath";
+      args[2] = "/test/tmp";
+      assertTrue("file exists", !fileSys.exists(new Path(args[1])));
+      int run = shell.run(args);
+      results = bytes.toString();
+      assertTrue("Return code should be -1", run == -1);
+      assertTrue(" Null is coming when source path is invalid. ",!results.contains("get: null"));
+      assertTrue(" Not displaying the intended message ",results.contains("get: "+args[1]+": No such file or directory"));
+    } finally {
+      IOUtils.closeStream(out);
+      System.setErr(oldErr);
+    }
+  }
+  
+  
+  
 }