summaryrefslogtreecommitdiff
path: root/src/mongo/shell/shell_utils_extended.cpp
diff options
context:
space:
mode:
authorsamantharitter <samantha.ritter@10gen.com>2016-09-14 15:08:24 -0400
committersamantharitter <samantha.ritter@10gen.com>2016-09-30 15:25:05 -0400
commitd2d1b2bae272e786bcd6e79e4c5057672e971183 (patch)
tree152c8787d0d25493b8c520769d33f1141b4a6267 /src/mongo/shell/shell_utils_extended.cpp
parenta218beb0edc46d85ef90702eff79602b94a72a07 (diff)
downloadmongo-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.cpp19
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) {