diff options
author | samantharitter <samantha.ritter@10gen.com> | 2016-09-14 15:08:24 -0400 |
---|---|---|
committer | samantharitter <samantha.ritter@10gen.com> | 2016-09-30 15:25:05 -0400 |
commit | d2d1b2bae272e786bcd6e79e4c5057672e971183 (patch) | |
tree | 152c8787d0d25493b8c520769d33f1141b4a6267 /src/mongo/shell/shell_utils_extended.cpp | |
parent | a218beb0edc46d85ef90702eff79602b94a72a07 (diff) | |
download | mongo-d2d1b2bae272e786bcd6e79e4c5057672e971183.tar.gz |
SERVER-25839 Improve shell 'mkdir' utility
Diffstat (limited to 'src/mongo/shell/shell_utils_extended.cpp')
-rw-r--r-- | src/mongo/shell/shell_utils_extended.cpp | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/src/mongo/shell/shell_utils_extended.cpp b/src/mongo/shell/shell_utils_extended.cpp index 64cfc5773f9..8300d5f3308 100644 --- a/src/mongo/shell/shell_utils_extended.cpp +++ b/src/mongo/shell/shell_utils_extended.cpp @@ -196,8 +196,23 @@ BSONObj mkdir(const BSONObj& args, void* data) { uassert(16834, "mkdir requires a string argument -- mkdir(directory)", args.firstElement().type() == String); - boost::filesystem::create_directories(args.firstElement().String()); - return BSON("" << true); + + // Boost bug 12495 (https://svn.boost.org/trac/boost/ticket/12495): + // create_directories crashes on empty string. We expect mkdir("") to + // fail on the OS level anyway, so catch it here instead. + uassert(40315, "mkdir requires a non-empty string", args.firstElement().String() != ""); + + boost::system::error_code ec; + auto created = boost::filesystem::create_directories(args.firstElement().String(), ec); + + uassert(40316, "mkdir() failed: " + ec.message(), !ec); + + BSONObjBuilder wrapper; + BSONObjBuilder res(wrapper.subobjStart("")); + res.append("exists", true); + res.append("created", created); + res.done(); + return wrapper.obj(); } BSONObj removeFile(const BSONObj& args, void* data) { |