diff options
author | Joel Rosdahl <joel@rosdahl.net> | 2022-09-11 15:36:13 +0200 |
---|---|---|
committer | Joel Rosdahl <joel@rosdahl.net> | 2022-09-21 17:06:30 +0200 |
commit | 2e76e1384fbf347a16b752d2cfd1d8b1a794569b (patch) | |
tree | 86c6d8938e25ccbbd3144898cb06ae074ecfc525 /src/core | |
parent | a03f14b7560f12eb28d6da1a60efc2bde4d2faf5 (diff) | |
download | ccache-2e76e1384fbf347a16b752d2cfd1d8b1a794569b.tar.gz |
feat: Print result format version and no of files in --inspect
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/Result.cpp | 29 | ||||
-rw-r--r-- | src/core/Result.hpp | 13 | ||||
-rw-r--r-- | src/core/ResultInspector.cpp | 7 | ||||
-rw-r--r-- | src/core/ResultInspector.hpp | 2 |
4 files changed, 40 insertions, 11 deletions
diff --git a/src/core/Result.cpp b/src/core/Result.cpp index e2733778..e1da6457 100644 --- a/src/core/Result.cpp +++ b/src/core/Result.cpp @@ -176,22 +176,29 @@ Deserializer::Deserializer(nonstd::span<const uint8_t> data) : m_data(data) void Deserializer::visit(Deserializer::Visitor& visitor) const { + Header header; + CacheEntryDataReader reader(m_data); - const auto result_format_version = reader.read_int<uint8_t>(); - if (result_format_version != k_format_version) { + header.format_version = reader.read_int<uint8_t>(); + if (header.format_version != k_format_version) { + visitor.on_header(header); throw Error(FMT("Unknown result format version: {} != {}", - result_format_version, + header.format_version, k_format_version)); } - const auto n_files = reader.read_int<uint8_t>(); - if (n_files >= k_max_raw_file_entries) { - throw Error(FMT( - "Too many raw file entries: {} > {}", n_files, k_max_raw_file_entries)); + header.n_files = reader.read_int<uint8_t>(); + if (header.n_files >= k_max_raw_file_entries) { + visitor.on_header(header); + throw Error(FMT("Too many raw file entries: {} > {}", + header.n_files, + k_max_raw_file_entries)); } + visitor.on_header(header); + uint8_t file_number; - for (file_number = 0; file_number < n_files; ++file_number) { + for (file_number = 0; file_number < header.n_files; ++file_number) { const auto marker = reader.read_int<uint8_t>(); switch (marker) { case k_embedded_file_marker: @@ -215,9 +222,9 @@ Deserializer::visit(Deserializer::Visitor& visitor) const } } - if (file_number != n_files) { - throw Error( - FMT("Too few entries (read {}, expected {})", file_number, n_files)); + if (file_number != header.n_files) { + throw Error(FMT( + "Too few entries (read {}, expected {})", file_number, header.n_files)); } } diff --git a/src/core/Result.hpp b/src/core/Result.hpp index 805bcd0f..b1d0fcc7 100644 --- a/src/core/Result.hpp +++ b/src/core/Result.hpp @@ -95,11 +95,19 @@ public: // Read a result from `data`. Deserializer(nonstd::span<const uint8_t> data); + struct Header + { + uint8_t format_version = 0; + uint8_t n_files = 0; + }; + class Visitor { public: virtual ~Visitor() = default; + virtual void on_header(const Header& header); + virtual void on_embedded_file(uint8_t file_number, FileType file_type, nonstd::span<const uint8_t> data) = 0; @@ -118,6 +126,11 @@ private: uint8_t file_number) const; }; +inline void +Deserializer::Visitor::on_header(const Header& /*header*/) +{ +} + // This class knows how to serialize a result cache entry. class Serializer : public core::Serializer { diff --git a/src/core/ResultInspector.cpp b/src/core/ResultInspector.cpp index 3ef88c6f..b27a3f1d 100644 --- a/src/core/ResultInspector.cpp +++ b/src/core/ResultInspector.cpp @@ -29,6 +29,13 @@ ResultInspector::ResultInspector(FILE* stream) : m_stream(stream) } void +ResultInspector::on_header(const Result::Deserializer::Header& header) +{ + PRINT(m_stream, "Result format version: {}\n", header.format_version); + PRINT(m_stream, "Number of files: {}\n", header.n_files); +} + +void ResultInspector::on_embedded_file(uint8_t file_number, Result::FileType file_type, nonstd::span<const uint8_t> data) diff --git a/src/core/ResultInspector.hpp b/src/core/ResultInspector.hpp index 94a9b8c6..9fdd9d32 100644 --- a/src/core/ResultInspector.hpp +++ b/src/core/ResultInspector.hpp @@ -31,6 +31,8 @@ class ResultInspector : public Result::Deserializer::Visitor public: ResultInspector(FILE* stream); + void on_header(const Result::Deserializer::Header& header) override; + void on_embedded_file(uint8_t file_number, Result::FileType file_type, nonstd::span<const uint8_t> data) override; |