diff options
Diffstat (limited to 'src/buildtool/storage')
-rw-r--r-- | src/buildtool/storage/config.hpp | 14 | ||||
-rw-r--r-- | src/buildtool/storage/garbage_collector.cpp | 9 |
2 files changed, 18 insertions, 5 deletions
diff --git a/src/buildtool/storage/config.hpp b/src/buildtool/storage/config.hpp index a5d96e90..ff7c7710 100644 --- a/src/buildtool/storage/config.hpp +++ b/src/buildtool/storage/config.hpp @@ -151,6 +151,20 @@ struct StorageConfig final { class StorageConfig::Builder final { public: + explicit Builder() = default; + + /// \brief Create a configurable builder from an existing config. + /// Useful, for example, to make a copy of an existing config and change + /// the hash type. + [[nodiscard]] static auto Rebuild(StorageConfig const& config) noexcept + -> Builder { + return Builder{} + .SetBuildRoot(config.build_root) + .SetNumGenerations(config.num_generations) + .SetHashType(config.hash_function.GetType()) + .SetBackendDescription(config.backend_description); + } + auto SetBuildRoot(std::filesystem::path value) noexcept -> Builder& { build_root_ = std::move(value); return *this; diff --git a/src/buildtool/storage/garbage_collector.cpp b/src/buildtool/storage/garbage_collector.cpp index fa448552..0f4dcdae 100644 --- a/src/buildtool/storage/garbage_collector.cpp +++ b/src/buildtool/storage/garbage_collector.cpp @@ -220,15 +220,14 @@ auto GarbageCollector::Compactify(StorageConfig const& storage_config, // Compactification must be done for both native and compatible storages. static constexpr std::array kHashes = {HashFunction::Type::GitSHA1, HashFunction::Type::PlainSHA256}; - auto builder = StorageConfig::Builder{} - .SetBuildRoot(storage_config.build_root) - .SetNumGenerations(storage_config.num_generations); return std::all_of( kHashes.begin(), kHashes.end(), - [threshold, &builder](HashFunction::Type hash_type) { - auto const config = builder.SetHashType(hash_type).Build(); + [threshold, &storage_config](HashFunction::Type hash_type) { + auto const config = StorageConfig::Builder::Rebuild(storage_config) + .SetHashType(hash_type) + .Build(); if (not config) { return false; } |