diff options
author | Maksim Denisov <denisov.maksim@huawei.com> | 2024-06-17 10:29:11 +0200 |
---|---|---|
committer | Maksim Denisov <denisov.maksim@huawei.com> | 2024-07-05 12:53:57 +0200 |
commit | e8ab0db340f9d3f408c3f4d14b5b39c3a7cc7037 (patch) | |
tree | e162272388885730759138d04ef01a96f9a75c82 /src | |
parent | 1fe09bf6b97eb03872b54d16035de7cbf604d142 (diff) | |
download | justbuild-e8ab0db340f9d3f408c3f4d14b5b39c3a7cc7037.tar.gz |
Remove ConfigData from StorageConfig
...since it is an extra class that overcomplicates the config class.
Diffstat (limited to 'src')
-rw-r--r-- | src/buildtool/storage/TARGETS | 4 | ||||
-rw-r--r-- | src/buildtool/storage/config.hpp | 43 |
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( |