Skip to content
Snippets Groups Projects

Change cleaning strategy of output path

Merged René Paris requested to merge fix/cleaning-of-output-path into develop
1 file
+ 36
6
Compare changes
  • Side-by-side
  • Inline
@@ -199,25 +199,55 @@ void SetupLogging(const std::filesystem::path& executionPath, LogLevel logLevel,
LOG_INTERN(LogLevel::DebugCore) << "\n\n### simulation start ##";
}
bool PrepareDirectoriesAndLogging(const openpass::core::Directories& directories,
LogLevel logLevel,
const std::string& logFileString)
/// @brief Removes all files and directories in the given directory
/// @param dir path to the directory, which shall be cleared (recursive)
/// @returns true on success, false on errors (reported to cerr)
bool ClearDir(const std::filesystem::path& dir) [[nothrow]]
{
namespace fs = std::filesystem;
auto reportError = [](const fs::path& dir, const std::string& additionalInfo)
{ std::cerr << "Failed to clean \"" << dir.string() << "\": " << additionalInfo << '\n'; };
try
{
fs::remove_all(directories.outputDir);
fs::create_directories(directories.outputDir);
fs::create_directory(dir);
for (const auto& entry : fs::directory_iterator(dir))
{
fs::remove_all(entry.path());
}
if (!fs::is_empty(dir))
{
reportError(dir, "Path not empty after calling \"remove_all\".");
return false;
}
}
catch (const fs::filesystem_error& e)
{
throw std::runtime_error(std::string("Error when cleaning output path - ") + e.what());
reportError(dir, e.what());
return false;
}
return true;
}
/// @brief Prepare directories and logging
/// @param directories Directories use by the simulator
/// @param logLevel Selected Loglevel
/// @param logFileString Path to the logfile
/// @returns true on success, false on error
bool PrepareDirectoriesAndLogging(const openpass::core::Directories& directories,
LogLevel logLevel,
const std::string& logFileString)
{
// Setup is done after the output directory has been cleaned
// for the case that logFileString is set to the output folder
// itself, preventing proper cleanup of the output folder
if (!ClearDir(directories.outputDir))
{
return false;
}
SetupLogging(directories.baseDir, logLevel, logFileString);
LOG_INTERN(LogLevel::DebugCore) << "base path: " << directories.baseDir;
LOG_INTERN(LogLevel::DebugCore) << "library path: " << directories.libraryDir;
Loading