From afc8a6c0d51e8c9e24b36d202ba1b6043f8c5bae Mon Sep 17 00:00:00 2001
From: Lars Bilke <lars.bilke@ufz.de>
Date: Tue, 24 Sep 2024 16:43:33 +0200
Subject: [PATCH] [BL] Extracted method BaseLib::createOutputDirectory().

---
 Applications/CLI/ogs.cpp                      | 19 +++--------------
 .../PartitionMesh/PartitionMesh.cpp           | 17 +--------------
 BaseLib/FileTools.cpp                         | 21 +++++++++++++++++++
 BaseLib/FileTools.h                           |  3 +++
 4 files changed, 28 insertions(+), 32 deletions(-)

diff --git a/Applications/CLI/ogs.cpp b/Applications/CLI/ogs.cpp
index 9c44b21ec0e..46c0e3cf81e 100644
--- a/Applications/CLI/ogs.cpp
+++ b/Applications/CLI/ogs.cpp
@@ -11,13 +11,12 @@
  *
  */
 
-#include <algorithm>
 #include <pybind11/pybind11.h>
 #include <spdlog/spdlog.h>
 #include <tclap/CmdLine.h>
 
+#include <algorithm>
 #include <chrono>
-#include <filesystem>
 #include <sstream>
 
 #include "CommandLineArgumentParser.h"
@@ -36,6 +35,7 @@
 #include "Applications/ApplicationsLib/TestDefinition.h"
 #include "BaseLib/DateTools.h"
 #include "BaseLib/Error.h"
+#include "BaseLib/FileTools.h"
 #include "BaseLib/Logging.h"
 #include "BaseLib/RunTime.h"
 #include "InfoLib/GitInfo.h"
@@ -67,20 +67,7 @@ int main(int argc, char* argv[])
     INFO("This is OpenGeoSys-6 version {:s}.",
          GitInfoLib::GitInfo::ogs_version);
 
-    if (cli_arg.outdir.length() > 0)
-    {
-        std::error_code mkdir_err;
-        if (std::filesystem::create_directories(cli_arg.outdir, mkdir_err))
-        {
-            INFO("Output directory {:s} created.", cli_arg.outdir);
-        }
-        else if (mkdir_err.value() != 0)
-        {
-            WARN(
-                "Could not create output directory {:s}. Error code {:d}, {:s}",
-                cli_arg.outdir, mkdir_err.value(), mkdir_err.message());
-        }
-    }
+    BaseLib::createOutputDirectory(cli_arg.outdir);
 
     {
         auto const start_time = std::chrono::system_clock::now();
diff --git a/Applications/Utils/ModelPreparation/PartitionMesh/PartitionMesh.cpp b/Applications/Utils/ModelPreparation/PartitionMesh/PartitionMesh.cpp
index 8556e31d777..daa2aa43cd3 100644
--- a/Applications/Utils/ModelPreparation/PartitionMesh/PartitionMesh.cpp
+++ b/Applications/Utils/ModelPreparation/PartitionMesh/PartitionMesh.cpp
@@ -15,8 +15,6 @@
 #include <spdlog/spdlog.h>
 #include <tclap/CmdLine.h>
 
-#include <filesystem>
-
 #ifdef USE_PETSC
 #include <mpi.h>
 #endif
@@ -118,20 +116,7 @@ int main(int argc, char* argv[])
         });
 
     const auto output_directory = output_directory_arg.getValue();
-    if (output_directory.length() > 0)
-    {
-        std::error_code mkdir_err;
-        if (std::filesystem::create_directories(output_directory, mkdir_err))
-        {
-            INFO("Output directory {:s} created.", output_directory);
-        }
-        else if (mkdir_err.value() != 0)
-        {
-            WARN(
-                "Could not create output directory {:s}. Error code {:d}, {:s}",
-                output_directory, mkdir_err.value(), mkdir_err.message());
-        }
-    }
+    BaseLib::createOutputDirectory(output_directory);
 
     BaseLib::RunTime run_timer;
     run_timer.start();
diff --git a/BaseLib/FileTools.cpp b/BaseLib/FileTools.cpp
index 0afffba2160..060a849d73e 100644
--- a/BaseLib/FileTools.cpp
+++ b/BaseLib/FileTools.cpp
@@ -256,6 +256,27 @@ void removeFiles(std::vector<std::string> const& files)
     }
 }
 
+bool createOutputDirectory(std::string const& dir)
+{
+    if (dir.length() > 0)
+    {
+        std::error_code mkdir_err;
+        if (std::filesystem::create_directories(dir, mkdir_err))
+        {
+            INFO("Output directory {:s} created.", dir);
+        }
+        else if (mkdir_err.value() != 0)
+        {
+            WARN(
+                "Could not create output directory {:s}. Error code {:d}, {:s}",
+                dir, mkdir_err.value(), mkdir_err.message());
+            return false;
+        }
+        return true;
+    }
+    return false;
+}
+
 template <typename T>
 T readBinaryValue(std::istream& in)
 {
diff --git a/BaseLib/FileTools.h b/BaseLib/FileTools.h
index 523e87d10cb..216c40afa8d 100644
--- a/BaseLib/FileTools.h
+++ b/BaseLib/FileTools.h
@@ -153,4 +153,7 @@ void removeFile(std::string const& filename);
 /// Remove files. If a file does not exist nothing will happen, other errors
 /// lead to OGS_FATAL call.
 void removeFiles(std::vector<std::string> const& files);
+
+// Creates the given directory. Returns true on success.
+bool createOutputDirectory(std::string const& dir);
 }  // end namespace BaseLib
-- 
GitLab