123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- /* Distributed under the OSI-approved BSD 3-Clause License. See accompanying
- file Copyright.txt or https://cmake.org/licensing for details. */
- #include "cmFileAPICache.h"
- #include <algorithm>
- #include <string>
- #include <utility>
- #include <vector>
- #include <cm3p/json/value.h>
- #include "cmFileAPI.h"
- #include "cmProperty.h"
- #include "cmState.h"
- #include "cmake.h"
- namespace {
- class Cache
- {
- cmFileAPI& FileAPI;
- unsigned long Version;
- cmState* State;
- Json::Value DumpEntries();
- Json::Value DumpEntry(std::string const& name);
- Json::Value DumpEntryProperties(std::string const& name);
- Json::Value DumpEntryProperty(std::string const& name,
- std::string const& prop);
- public:
- Cache(cmFileAPI& fileAPI, unsigned long version);
- Json::Value Dump();
- };
- Cache::Cache(cmFileAPI& fileAPI, unsigned long version)
- : FileAPI(fileAPI)
- , Version(version)
- , State(this->FileAPI.GetCMakeInstance()->GetState())
- {
- static_cast<void>(this->Version);
- }
- Json::Value Cache::Dump()
- {
- Json::Value cache = Json::objectValue;
- cache["entries"] = this->DumpEntries();
- return cache;
- }
- Json::Value Cache::DumpEntries()
- {
- Json::Value entries = Json::arrayValue;
- std::vector<std::string> names = this->State->GetCacheEntryKeys();
- std::sort(names.begin(), names.end());
- for (std::string const& name : names) {
- entries.append(this->DumpEntry(name));
- }
- return entries;
- }
- Json::Value Cache::DumpEntry(std::string const& name)
- {
- Json::Value entry = Json::objectValue;
- entry["name"] = name;
- entry["type"] =
- cmState::CacheEntryTypeToString(this->State->GetCacheEntryType(name));
- entry["value"] = this->State->GetSafeCacheEntryValue(name);
- Json::Value properties = this->DumpEntryProperties(name);
- if (!properties.empty()) {
- entry["properties"] = std::move(properties);
- }
- return entry;
- }
- Json::Value Cache::DumpEntryProperties(std::string const& name)
- {
- Json::Value properties = Json::arrayValue;
- std::vector<std::string> props =
- this->State->GetCacheEntryPropertyList(name);
- std::sort(props.begin(), props.end());
- for (std::string const& prop : props) {
- properties.append(this->DumpEntryProperty(name, prop));
- }
- return properties;
- }
- Json::Value Cache::DumpEntryProperty(std::string const& name,
- std::string const& prop)
- {
- Json::Value property = Json::objectValue;
- property["name"] = prop;
- cmProp p = this->State->GetCacheEntryProperty(name, prop);
- property["value"] = p ? *p : "";
- return property;
- }
- }
- Json::Value cmFileAPICacheDump(cmFileAPI& fileAPI, unsigned long version)
- {
- Cache cache(fileAPI, version);
- return cache.Dump();
- }
|