diff --git a/CHANGES.txt b/CHANGES.txt index 16dcf4a2e18..3cb51368790 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -601,6 +601,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 diff --git a/src/java/org/apache/hadoop/fs/FsShell.java b/src/java/org/apache/hadoop/fs/FsShell.java index 9a0fe75c060..fe52cd3d49d 100644 --- a/src/java/org/apache/hadoop/fs/FsShell.java +++ b/src/java/org/apache/hadoop/fs/FsShell.java @@ -195,6 +195,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, " diff --git a/src/test/core/org/apache/hadoop/fs/TestFsShellReturnCode.java b/src/test/core/org/apache/hadoop/fs/TestFsShellReturnCode.java index 8684a67c01f..2812a8a899b 100644 --- a/src/test/core/org/apache/hadoop/fs/TestFsShellReturnCode.java +++ b/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); + } + } + + + } \ No newline at end of file