common/file_util: Fix and deprecate CreateFullPath, add CreateDirs

Fix CreateFullPath to have its intended previous behavior (whatever
that was), and deprecate it in favor of the new CreateDirs function.

Unlike CreateDir, CreateDirs is marked as [[nodiscard]] to avoid new
code ignoring its result value.
This commit is contained in:
ReinUsesLisp 2020-12-09 05:22:16 -03:00
parent 74e078db55
commit 443d8d3a23
2 changed files with 31 additions and 4 deletions

View file

@ -114,20 +114,41 @@ bool CreateDir(const fs::path& path) {
return true;
}
bool CreateFullPath(const fs::path& path) {
bool CreateDirs(const fs::path& path) {
LOG_TRACE(Common_Filesystem, "path {}", path.string());
if (Exists(path)) {
LOG_DEBUG(Common_Filesystem, "path exists {}", path.string());
return true;
}
std::error_code ec;
const bool success = fs::create_directories(path, ec);
if (!success) {
LOG_ERROR(Common_Filesystem, "Unable to create full path: {}", ec.message());
LOG_ERROR(Common_Filesystem, "Unable to create directories: {}", ec.message());
return false;
}
return true;
}
bool CreateFullPath(const fs::path& path) {
LOG_TRACE(Common_Filesystem, "path {}", path);
// Removes trailing slashes and turns any '\' into '/'
const auto new_path = SanitizePath(path.string(), DirectorySeparator::ForwardSlash);
if (new_path.rfind('.') == std::string::npos) {
// The path is a directory
return CreateDirs(new_path);
} else {
// The path is a file
// Creates directory preceding the last '/'
return CreateDirs(new_path.substr(0, new_path.rfind('/')));
}
}
bool Rename(const fs::path& src, const fs::path& dst) {
LOG_TRACE(Common_Filesystem, "{} --> {}", src.string(), dst.string());