You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by je...@apache.org on 2013/08/23 18:30:55 UTC
svn commit: r1516928 - in
/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src:
main/java/org/apache/hadoop/fs/shell/PathData.java
test/java/org/apache/hadoop/cli/util/CommandExecutor.java
Author: jeagles
Date: Fri Aug 23 16:30:55 2013
New Revision: 1516928
URL: http://svn.apache.org/r1516928
Log:
HDFS-4329. DFSShell issues with directories with spaces in name (Cristina L. Abad via jeagles)
Modified:
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/PathData.java
hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java
Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/PathData.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/PathData.java?rev=1516928&r1=1516927&r2=1516928&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/PathData.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/main/java/org/apache/hadoop/fs/shell/PathData.java Fri Aug 23 16:30:55 2013
@@ -247,7 +247,7 @@ public class PathData implements Compara
// check getPath() so scheme slashes aren't considered part of the path
String separator = uri.getPath().endsWith(Path.SEPARATOR)
? "" : Path.SEPARATOR;
- return uri + separator + basename;
+ return uriToString(uri) + separator + basename;
}
protected enum PathType { HAS_SCHEME, SCHEMELESS_ABSOLUTE, RELATIVE };
@@ -300,7 +300,7 @@ public class PathData implements Compara
if (globUri.getAuthority() == null) {
matchUri = removeAuthority(matchUri);
}
- globMatch = matchUri.toString();
+ globMatch = uriToString(matchUri);
break;
case SCHEMELESS_ABSOLUTE: // take just the uri's path
globMatch = matchUri.getPath();
@@ -381,19 +381,14 @@ public class PathData implements Compara
* @return String of the path
*/
public String toString() {
+ return uriToString(uri);
+ }
+
+ private static String uriToString(URI uri) {
String scheme = uri.getScheme();
// No interpretation of symbols. Just decode % escaped chars.
- String decodedRemainder = uri.getSchemeSpecificPart();
-
- if (scheme == null) {
- return decodedRemainder;
- } else {
- StringBuilder buffer = new StringBuilder();
- buffer.append(scheme);
- buffer.append(":");
- buffer.append(decodedRemainder);
- return buffer.toString();
- }
+ String ssp = uri.getSchemeSpecificPart();
+ return (scheme != null) ? scheme + ":" + ssp : ssp;
}
/**
Modified: hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java
URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java?rev=1516928&r1=1516927&r2=1516928&view=diff
==============================================================================
--- hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java (original)
+++ hadoop/common/branches/branch-0.23/hadoop-common-project/hadoop-common/src/test/java/org/apache/hadoop/cli/util/CommandExecutor.java Fri Aug 23 16:30:55 2013
@@ -24,6 +24,9 @@ import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.PrintStream;
import java.util.StringTokenizer;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.ArrayList;
/**
*
@@ -31,24 +34,32 @@ import java.util.StringTokenizer;
*/
public abstract class CommandExecutor {
protected String[] getCommandAsArgs(final String cmd, final String masterKey,
- final String master) {
- StringTokenizer tokenizer = new StringTokenizer(cmd, " ");
- String[] args = new String[tokenizer.countTokens()];
-
- int i = 0;
- while (tokenizer.hasMoreTokens()) {
- args[i] = tokenizer.nextToken();
+ final String master) {
+ String regex = "\'([^\']*)\'|\"([^\"]*)\"|(\\S+)";
+ Matcher matcher = Pattern.compile(regex).matcher(cmd);
+
+ ArrayList<String> args = new ArrayList<String>();
+ String arg = null;
+
+ while (matcher.find()) {
+ if (matcher.group(1) != null) {
+ arg = matcher.group(1);
+ } else if (matcher.group(2) != null) {
+ arg = matcher.group(2);
+ } else {
+ arg = matcher.group(3);
+ }
- args[i] = args[i].replaceAll(masterKey, master);
- args[i] = args[i].replaceAll("CLITEST_DATA",
+ arg = arg.replaceAll(masterKey, master);
+ arg = arg.replaceAll("CLITEST_DATA",
new File(CLITestHelper.TEST_CACHE_DATA_DIR).
toURI().toString().replace(' ', '+'));
- args[i] = args[i].replaceAll("USERNAME", System.getProperty("user.name"));
+ arg = arg.replaceAll("USERNAME", System.getProperty("user.name"));
- i++;
+ args.add(arg);
}
-
- return args;
+
+ return args.toArray(new String[0]);
}
public Result executeCommand(final String cmd) throws Exception {