aboutsummaryrefslogtreecommitdiff
path: root/bbot
diff options
context:
space:
mode:
Diffstat (limited to 'bbot')
-rw-r--r--bbot/worker/worker.cxx39
1 files changed, 27 insertions, 12 deletions
diff --git a/bbot/worker/worker.cxx b/bbot/worker/worker.cxx
index b759760..8c22796 100644
--- a/bbot/worker/worker.cxx
+++ b/bbot/worker/worker.cxx
@@ -96,20 +96,35 @@ catch (const system_error& e)
}
static void
-mk_p (tracer& t, string* log, const dir_path& d)
-try
+#ifndef _WIN32
+mk_p (tracer& t, string* log, const dir_path& d, bool sudo = false)
{
- if (verb >= 3)
- t << "mkdir -p " << d;
-
- if (log != nullptr)
- *log += "mkdir -p " + d.representation () + '\n';
+ if (sudo)
+ {
+ if (log != nullptr)
+ *log += "sudo mkdir -p " + d.representation () + '\n';
- try_mkdir_p (d);
-}
-catch (const system_error& e)
+ run_io (t, 0, 1, 2, "sudo", "mkdir", "-p", d);
+ }
+ else
+#else
+mk_p (tracer& t, string* log, const dir_path& d, bool = false)
{
- fail << "unable to create directory " << d << ": " << e << endf;
+#endif
+ try
+ {
+ if (verb >= 3)
+ t << "mkdir -p " << d;
+
+ if (log != nullptr)
+ *log += "mkdir -p " + d.representation () + '\n';
+
+ try_mkdir_p (d);
+ }
+ catch (const system_error& e)
+ {
+ fail << "unable to create directory " << d << ": " << e << endf;
+ }
}
static void
@@ -4405,7 +4420,7 @@ build (size_t argc, const char* argv[])
config_install_root (step_id::bbot_sys_install));
if (ir)
- mk_p (trace, &r.log, *ir);
+ mk_p (trace, &r.log, *ir, true /* sudo */);
if (!module_pkg)
{