summaryrefslogtreecommitdiff
path: root/src/buildtool/storage
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildtool/storage')
-rw-r--r--src/buildtool/storage/config.hpp14
-rw-r--r--src/buildtool/storage/garbage_collector.cpp9
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;
}