19#include <spdlog/spdlog.h>
20#include <absl/container/flat_hash_map.h>
21#include <absl/container/flat_hash_set.h>
23#define STRINGIFY(x) #x
24#define TOSTRING(x) STRINGIFY(x)
41 asio::awaitable<void>
watchdog(std::chrono::steady_clock::time_point&
deadline);
43 asio::awaitable<void>
ensureOnStrand(
const asio::strand<asio::io_context::executor_type> &
strand);
49 const absl::flat_hash_map<std::string, DataT> &
data,
53 std::vector<std::string>
sorted;
54 absl::flat_hash_set<std::string>
visited;
55 absl::flat_hash_set<std::string>
on_stack;
57 std::function<
void(
const std::string&)>
visit = [&](
const std::string& name) {
58 if (
visited.contains(name))
return;
60 spdlog::error(std::format(
"Cycle detected involving : {}", name));
61 throw std::runtime_error(
"Cyclic dependency");
68 spdlog::warn(std::format(
"Missing dependency: {}", name));
87 for (
const auto& [name,
_] :
data) {
std::string currentTimestamp()
Definition utils.cpp:14
std::vector< std::string > topologicalSort(const absl::flat_hash_map< std::string, DataT > &data, std::function< ChildListT< ChildT >(const DataT &)> get_childreen, std::function< std::string(const ChildT &)> get_child_name)
Definition utils.hpp:48
asio::awaitable< void > watchdog(std::chrono::steady_clock::time_point &deadline)
Suspends the coroutine until the given deadline is reached.
Definition utils.cpp:24
asio::awaitable< void > ensureOnStrand(const asio::strand< asio::io_context::executor_type > &strand)
Definition utils.cpp:37
std::string escapeSolSrcQuotes(const std::string &json)
Definition utils.cpp:46
std::string loadBuildTimestamp(const std::filesystem::path &path)
Definition utils.cpp:5
nlohmann::json json
Definition parser.hpp:4