2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-03-06 21:13:02 +00:00

chore: use TextFileCheckDirtyOutput for RawTemplater

This commit is contained in:
Jan Laupetin
2026-03-05 19:55:32 +00:00
parent d80cdd9712
commit 5f28bcc58a
3 changed files with 36 additions and 12 deletions

View File

@@ -8,6 +8,7 @@
#include "SetDefineStreamProxy.h"
#include "TemplatingStreamProxy.h"
#include "Utils/ClassUtils.h"
#include "Utils/FileUtils.h"
#include "Utils/Logging/Log.h"
#include <filesystem>
@@ -198,9 +199,9 @@ namespace templating
if (m_first_line)
m_first_line = false;
else
m_output_stream << '\n';
m_output.Stream() << '\n';
m_output_stream << nextLine.m_line;
m_output.Stream() << nextLine.m_line;
}
else
{
@@ -229,19 +230,35 @@ namespace templating
const auto cachedData = m_output_cache.str();
if (!cachedData.empty())
m_output_stream << cachedData;
m_output.Stream() << cachedData;
}
con::info("Templated file \"{}\"", m_output_file);
const auto outputResult = m_output.Close();
switch (outputResult)
{
case utils::TextFileCheckDirtyResult::OUTPUT_WRITTEN:
con::info("Templated file: \"{}\"", m_output_file);
if (buildLogFile)
*buildLogFile << "Templated file \"" << m_output_file << "\"\n";
*buildLogFile << "Templated file: \"" << m_output_file << "\"\n";
break;
case utils::TextFileCheckDirtyResult::OUTPUT_WAS_UP_TO_DATE:
con::info("File was up to date: \"{}\"", m_output_file);
if (buildLogFile)
*buildLogFile << "File was up to date: \"" << m_output_file << "\"\n";
break;
case utils::TextFileCheckDirtyResult::FAILURE:
con::error("Failed to write file: \"{}\"", m_output_file);
if (buildLogFile)
*buildLogFile << "Failed to write file: \"" << m_output_file << "\"\n";
break;
}
m_first_line = true;
m_write_output_to_file = false;
m_output_cache.clear();
m_output_cache.str(std::string());
m_output_stream.close();
return true;
}
@@ -327,7 +344,7 @@ namespace templating
m_write_output_to_file = true;
const auto cachedData = m_output_cache.str();
if (!cachedData.empty())
m_output_stream << cachedData;
m_output.Stream() << cachedData;
m_output_cache.clear();
m_output_cache.str(std::string());
@@ -353,8 +370,8 @@ namespace templating
if (!parentDir.empty())
create_directories(parentDir);
m_output_stream = std::ofstream(m_output_file, std::ios::out | std::ios::binary);
if (!m_output_stream.is_open())
m_output = utils::TextFileCheckDirtyOutput(m_output_file);
if (!m_output.Open())
{
con::error("Failed to open output file \"{}\"", m_output_file);
return false;
@@ -371,12 +388,12 @@ namespace templating
std::string m_filename;
std::string m_output_file;
std::string m_default_output_file;
const fs::path m_output_directory;
fs::path m_output_directory;
bool m_first_line;
bool m_skip_pass;
bool m_write_output_to_file;
std::ofstream m_output_stream;
utils::TextFileCheckDirtyOutput m_output;
std::ostringstream m_output_cache;
};
} // namespace templating

View File

@@ -67,6 +67,12 @@ namespace utils
return true;
}
TextFileCheckDirtyOutput::TextFileCheckDirtyOutput()
: m_open(false),
m_has_existing_file(false)
{
}
TextFileCheckDirtyOutput::TextFileCheckDirtyOutput(fs::path path)
: m_path(std::move(path)),
m_open(false),

View File

@@ -32,6 +32,7 @@ namespace utils
class TextFileCheckDirtyOutput final
{
public:
TextFileCheckDirtyOutput();
explicit TextFileCheckDirtyOutput(std::filesystem::path path);
~TextFileCheckDirtyOutput();
TextFileCheckDirtyOutput(const TextFileCheckDirtyOutput& other) = delete;