summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksim Denisov <denisov.maksim@huawei.com>2024-06-17 10:29:11 +0200
committerMaksim Denisov <denisov.maksim@huawei.com>2024-07-05 12:53:57 +0200
commite8ab0db340f9d3f408c3f4d14b5b39c3a7cc7037 (patch)
treee162272388885730759138d04ef01a96f9a75c82
parent1fe09bf6b97eb03872b54d16035de7cbf604d142 (diff)
downloadjustbuild-e8ab0db340f9d3f408c3f4d14b5b39c3a7cc7037.tar.gz
Remove ConfigData from StorageConfig
...since it is an extra class that overcomplicates the config class.
-rw-r--r--src/buildtool/storage/TARGETS4
-rw-r--r--src/buildtool/storage/config.hpp43
2 files changed, 20 insertions, 27 deletions
diff --git a/src/buildtool/storage/TARGETS b/src/buildtool/storage/TARGETS
index 61546d5d..b5e4326f 100644
--- a/src/buildtool/storage/TARGETS
+++ b/src/buildtool/storage/TARGETS
@@ -3,12 +3,10 @@
, "name": ["config"]
, "hdrs": ["config.hpp"]
, "deps":
- [ ["src/buildtool/common", "common"]
- , ["src/buildtool/execution_api/remote", "config"]
+ [ ["src/buildtool/execution_api/remote", "config"]
, ["@", "gsl", "", "gsl"]
, ["@", "json", "", "json"]
, ["src/buildtool/compatibility", "compatibility"]
- , ["src/buildtool/file_system", "object_type"]
, ["src/buildtool/file_system", "file_system_manager"]
, ["src/buildtool/logging", "logging"]
, ["src/buildtool/logging", "log_level"]
diff --git a/src/buildtool/storage/config.hpp b/src/buildtool/storage/config.hpp
index c1151c3f..cd05fa64 100644
--- a/src/buildtool/storage/config.hpp
+++ b/src/buildtool/storage/config.hpp
@@ -24,18 +24,15 @@
#endif
#include <cstddef>
+#include <exception>
#include <filesystem>
-#include <functional>
#include <string>
-#include <vector>
#include "gsl/gsl"
#include "nlohmann/json.hpp"
-#include "src/buildtool/common/artifact_digest.hpp"
#include "src/buildtool/compatibility/compatibility.hpp"
#include "src/buildtool/execution_api/remote/config.hpp"
#include "src/buildtool/file_system/file_system_manager.hpp"
-#include "src/buildtool/file_system/object_type.hpp"
#include "src/buildtool/logging/log_level.hpp"
#include "src/buildtool/logging/logger.hpp"
#include "src/utils/cpp/gsl.hpp"
@@ -43,17 +40,6 @@
/// \brief Global storage configuration.
class StorageConfig {
- struct ConfigData {
- // Build root directory. All the storage dirs are subdirs of build_root.
- // By default, build_root is set to $HOME/.cache/just.
- // If the user uses --local-build-root PATH,
- // then build_root will be set to PATH.
- std::filesystem::path build_root{kDefaultBuildRoot};
-
- // Number of total storage generations (default: two generations).
- std::size_t num_generations{2};
- };
-
public:
/// \brief Determine user home directory
[[nodiscard]] static auto GetUserHome() noexcept -> std::filesystem::path {
@@ -78,6 +64,11 @@ class StorageConfig {
static inline auto const kDefaultBuildRoot =
GetUserHome() / ".cache" / "just";
+ [[nodiscard]] static auto Instance() noexcept -> StorageConfig& {
+ static StorageConfig config;
+ return config;
+ }
+
[[nodiscard]] static auto SetBuildRoot(
std::filesystem::path const& dir) noexcept -> bool {
if (FileSystemManager::IsRelativePath(dir)) {
@@ -86,24 +77,24 @@ class StorageConfig {
dir.string());
return false;
}
- Data().build_root = dir;
+ Instance().build_root_ = dir;
return true;
}
/// \brief Specifies the number of storage generations.
static auto SetNumGenerations(std::size_t num_generations) noexcept
-> void {
- Data().num_generations = num_generations;
+ Instance().num_generations_ = num_generations;
}
/// \brief Number of storage generations.
[[nodiscard]] static auto NumGenerations() noexcept -> std::size_t {
- return Data().num_generations;
+ return Instance().num_generations_;
}
/// \brief Build directory, defaults to user directory if not set
[[nodiscard]] static auto BuildRoot() noexcept -> std::filesystem::path {
- return Data().build_root;
+ return Instance().build_root_;
}
/// \brief Root directory of all storage generations.
@@ -120,7 +111,7 @@ class StorageConfig {
/// non-compatible protocol types.
[[nodiscard]] static auto GenerationCacheRoot(std::size_t index) noexcept
-> std::filesystem::path {
- ExpectsAudit(index < Data().num_generations);
+ ExpectsAudit(index < Instance().num_generations_);
auto generation = std::string{"generation-"} + std::to_string(index);
return CacheRoot() / generation;
}
@@ -199,10 +190,14 @@ class StorageConfig {
}
private:
- [[nodiscard]] static auto Data() noexcept -> ConfigData& {
- static ConfigData instance{};
- return instance;
- }
+ // Build root directory. All the storage dirs are subdirs of build_root.
+ // By default, build_root is set to $HOME/.cache/just.
+ // If the user uses --local-build-root PATH,
+ // then build_root will be set to PATH.
+ std::filesystem::path build_root_{kDefaultBuildRoot};
+
+ // Number of total storage generations (default: two generations).
+ std::size_t num_generations_{2};
// different folder for different caching protocol
[[nodiscard]] static auto UpdatePathForCompatibility(