HADOOP-8175. Add -p option to mkdir in FsShell. Contributed by Daryn Sharp

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1301303 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Tsz-wo Sze 2012-03-16 01:28:38 +00:00
parent 9b2a324ba5
commit 483ca92d9b
3 changed files with 18 additions and 5 deletions

View File

@ -376,6 +376,8 @@ Release 0.23.2 - UNRELEASED
HADOOP-8173. FsShell needs to handle quoted metachars. (Daryn Sharp via HADOOP-8173. FsShell needs to handle quoted metachars. (Daryn Sharp via
szetszwo) szetszwo)
HADOOP-8175. Add -p option to mkdir in FsShell. (Daryn Sharp via szetszwo)
Release 0.23.1 - 2012-02-17 Release 0.23.1 - 2012-02-17
INCOMPATIBLE CHANGES INCOMPATIBLE CHANGES

View File

@ -39,20 +39,26 @@ class Mkdir extends FsCommand {
} }
public static final String NAME = "mkdir"; public static final String NAME = "mkdir";
public static final String USAGE = "<path> ..."; public static final String USAGE = "[-p] <path> ...";
public static final String DESCRIPTION = public static final String DESCRIPTION =
"Create a directory in specified location."; "Create a directory in specified location.\n" +
" -p Do not fail if the directory already exists";
private boolean createParents;
@Override @Override
protected void processOptions(LinkedList<String> args) { protected void processOptions(LinkedList<String> args) {
CommandFormat cf = new CommandFormat(1, Integer.MAX_VALUE); CommandFormat cf = new CommandFormat(1, Integer.MAX_VALUE, "p");
cf.parse(args); cf.parse(args);
createParents = cf.getOpt("p");
} }
@Override @Override
protected void processPath(PathData item) throws IOException { protected void processPath(PathData item) throws IOException {
if (item.stat.isDirectory()) { if (item.stat.isDirectory()) {
throw new PathExistsException(item.toString()); if (!createParents) {
throw new PathExistsException(item.toString());
}
} else { } else {
throw new PathIsNotDirectoryException(item.toString()); throw new PathIsNotDirectoryException(item.toString());
} }
@ -60,6 +66,7 @@ class Mkdir extends FsCommand {
@Override @Override
protected void processNonexistentPath(PathData item) throws IOException { protected void processNonexistentPath(PathData item) throws IOException {
// TODO: should use createParents to control intermediate dir creation
if (!item.fs.mkdirs(item.path)) { if (!item.fs.mkdirs(item.path)) {
throw new PathIOException(item.toString()); throw new PathIOException(item.toString());
} }

View File

@ -526,7 +526,11 @@
<comparators> <comparators>
<comparator> <comparator>
<type>RegexpComparator</type> <type>RegexpComparator</type>
<expected-output>^-mkdir &lt;path&gt; \.\.\.:( |\t)*Create a directory in specified location.( )*</expected-output> <expected-output>^-mkdir \[-p\] &lt;path&gt; \.\.\.:( |\t)*Create a directory in specified location.( )*</expected-output>
</comparator>
<comparator>
<type>TokenComparator</type>
<expected-output>-p Do not fail if the directory already exists</expected-output>
</comparator> </comparator>
</comparators> </comparators>
</test> </test>