| @@ -39,20 +39,20 @@ | |||
| "depends": {} | |||
| } | |||
| }, | |||
| "neo-buffer": { | |||
| "0.1.0": { | |||
| "neo-sqlite3": { | |||
| "0.2.2": { | |||
| "git": { | |||
| "url": "https://github.com/vector-of-bool/neo-buffer.git", | |||
| "ref": "develop" | |||
| "url": "https://github.com/vector-of-bool/neo-sqlite3.git", | |||
| "ref": "0.2.2" | |||
| }, | |||
| "depends": {} | |||
| } | |||
| }, | |||
| "neo-sqlite3": { | |||
| "0.2.2": { | |||
| "neo-fun": { | |||
| "0.1.0": { | |||
| "git": { | |||
| "url": "https://github.com/vector-of-bool/neo-sqlite3.git", | |||
| "ref": "0.2.2" | |||
| "url": "https://github.com/vector-of-bool/neo-fun.git", | |||
| "ref": "0.1.0" | |||
| }, | |||
| "depends": {} | |||
| } | |||
| @@ -4,7 +4,7 @@ Uses: spdlog/spdlog | |||
| Uses: Microsoft/wil | |||
| Uses: Niebler/range-v3 | |||
| Uses: nlohmann/json | |||
| Uses: neo/buffer | |||
| Uses: neo/sqlite3 | |||
| Uses: neo/fun | |||
| Uses: semver/semver | |||
| Uses: pubgrub/pubgrub | |||
| @@ -1,12 +1,12 @@ | |||
| Name: dds | |||
| Version: 0.1.0 | |||
| Depends: neo-buffer 0.1.0 | |||
| Depends: spdlog 1.4.2 | |||
| Depends: ms-wil 2019.11.10 | |||
| Depends: range-v3 0.10.0 | |||
| Depends: nlohmann-json 3.7.1 | |||
| Depends: neo-sqlite3 0.2.2 | |||
| Depends: neo-fun 0.1.0 | |||
| Depends: semver 0.2.1 | |||
| Depends: pubgrub 0.1.2 | |||
| @@ -65,7 +65,8 @@ msvc_deps_info dds::parse_msvc_output_for_deps(std::string_view output, std::str | |||
| return {deps, cleaned_output}; | |||
| } | |||
| void dds::update_deps_info(database& db, const file_deps_info& deps) { | |||
| void dds::update_deps_info(neo::output<database> db_, const file_deps_info& deps) { | |||
| database& db = db_; | |||
| db.store_file_command(deps.output, {deps.command, deps.command_output}); | |||
| db.forget_inputs_of(deps.output); | |||
| for (auto&& inp : deps.inputs) { | |||
| @@ -75,8 +76,7 @@ void dds::update_deps_info(database& db, const file_deps_info& deps) { | |||
| } | |||
| deps_rebuild_info dds::get_rebuild_info(const database& db, path_ref output_path) { | |||
| std::unique_lock lk{db.mutex()}; | |||
| auto cmd_ = db.command_of(output_path); | |||
| auto cmd_ = db.command_of(output_path); | |||
| if (!cmd_) { | |||
| return {}; | |||
| } | |||
| @@ -29,6 +29,8 @@ | |||
| #include <dds/util/fs.hpp> | |||
| #include <neo/out.hpp> | |||
| #include <string> | |||
| #include <string_view> | |||
| #include <vector> | |||
| @@ -120,7 +122,7 @@ msvc_deps_info parse_msvc_output_for_deps(std::string_view output, std::string_v | |||
| * @param db The database to update | |||
| * @param info The dependency information to store | |||
| */ | |||
| void update_deps_info(database& db, const file_deps_info& info); | |||
| void update_deps_info(neo::output<database> db, const file_deps_info& info); | |||
| /** | |||
| * The information that is pertinent to the rebuild of a file. This will contain a list of inputs | |||
| @@ -264,7 +264,7 @@ bool dds::detail::compile_all(const ref_vector<const compile_file_plan>& compile | |||
| // Update compile dependency information | |||
| auto tr = env.db.transaction(); | |||
| for (auto& info : all_new_deps) { | |||
| update_deps_info(env.db, info); | |||
| update_deps_info(neo::into(env.db), info); | |||
| } | |||
| // Return whether or not there were any failures. | |||
| @@ -28,7 +28,6 @@ struct input_file_info { | |||
| class database { | |||
| neo::sqlite3::database _db; | |||
| mutable neo::sqlite3::statement_cache _stmt_cache{_db}; | |||
| mutable std::shared_mutex _mutex; | |||
| explicit database(neo::sqlite3::database db); | |||
| database(const database&) = delete; | |||
| @@ -39,8 +38,6 @@ public: | |||
| static database open(const std::string& db_path); | |||
| static database open(path_ref db_path) { return open(db_path.string()); } | |||
| auto& mutex() const noexcept { return _mutex; } | |||
| neo::sqlite3::transaction_guard transaction() noexcept { | |||
| return neo::sqlite3::transaction_guard(_db); | |||
| } | |||
| @@ -5,6 +5,8 @@ | |||
| #include <dds/util/flock.hpp> | |||
| #include <dds/util/fs.hpp> | |||
| #include <neo/fwd.hpp> | |||
| #include <functional> | |||
| #include <optional> | |||
| #include <set> | |||
| @@ -74,7 +76,7 @@ public: | |||
| } | |||
| auto repo = _open_for_directory(writeable, dirpath); | |||
| return std::invoke((Func &&) fn, std::move(repo)); | |||
| return std::invoke(NEO_FWD(fn), std::move(repo)); | |||
| } | |||
| static fs::path default_local_path() noexcept; | |||
| @@ -27,23 +27,6 @@ lm::library& usage_requirement_map::add(std::string ns, std::string name) { | |||
| return inserted->second; | |||
| } | |||
| void usage_requirement_map::apply(shared_compile_file_rules rules, | |||
| std::string ns, | |||
| std::string name) const { | |||
| auto reqs = get(ns, name); | |||
| if (!reqs) { | |||
| throw std::runtime_error( | |||
| fmt::format("Unable to resolve usage requirements for '{}/{}'", ns, name)); | |||
| } | |||
| for (auto&& use : reqs->uses) { | |||
| apply(rules, use.namespace_, use.name); | |||
| } | |||
| extend(rules.include_dirs(), reqs->include_paths); | |||
| extend(rules.defs(), reqs->preproc_defs); | |||
| } | |||
| usage_requirement_map usage_requirement_map::from_lm_index(const lm::index& idx) noexcept { | |||
| usage_requirement_map ret; | |||
| for (const auto& pkg : idx.packages) { | |||
| @@ -4,6 +4,8 @@ | |||
| #include <libman/index.hpp> | |||
| #include <libman/library.hpp> | |||
| #include <neo/out.hpp> | |||
| #include <map> | |||
| #include <string> | |||
| @@ -40,7 +42,6 @@ public: | |||
| lm::library& add(std::string ns, std::string name); | |||
| void add(std::string ns, std::string name, lm::library lib) { add(ns, name) = lib; } | |||
| void apply(shared_compile_file_rules, std::string ns, std::string name) const; | |||
| std::vector<fs::path> link_paths(const lm::usage&) const; | |||
| std::vector<fs::path> include_paths(const lm::usage& req) const; | |||
| @@ -1,5 +1,7 @@ | |||
| #pragma once | |||
| #include <neo/fwd.hpp> | |||
| #include <chrono> | |||
| #include <utility> | |||
| @@ -28,15 +30,15 @@ public: | |||
| }; | |||
| template <typename Duration = stopwatch::duration, typename Func> | |||
| auto timed(Func&& fn) noexcept(noexcept(((Func &&)(fn))())) { | |||
| auto timed(Func&& fn) noexcept(noexcept(NEO_FWD(fn)())) { | |||
| stopwatch sw; | |||
| using result_type = decltype(((Func &&)(fn))()); | |||
| using result_type = decltype(NEO_FWD(fn)()); | |||
| if constexpr (std::is_void_v<result_type>) { | |||
| ((Func &&)(fn))(); | |||
| NEO_FWD(fn)(); | |||
| auto elapsed = sw.elapsed_as<Duration>(); | |||
| return std::pair(elapsed, nullptr); | |||
| } else { | |||
| decltype(auto) value = ((Func &&)(fn))(); | |||
| decltype(auto) value = NEO_FWD(fn)(); | |||
| auto elapsed = sw.elapsed_as<Duration>(); | |||
| return std::pair<Duration, decltype(value)>(elapsed, ((decltype(value)&&)value)); | |||
| } | |||
| @@ -1,3 +0,0 @@ | |||
| #pragma once | |||
| #include <spdlog/fmt/fmt.h> | |||
| @@ -1,8 +1,9 @@ | |||
| #include "./index.hpp" | |||
| #include <libman/fmt.hpp> | |||
| #include <libman/parse.hpp> | |||
| #include <spdlog/fmt/fmt.h> | |||
| using namespace lm; | |||
| lm::index index::from_file(path_ref fpath) { | |||
| @@ -1,8 +1,9 @@ | |||
| #include "./package.hpp" | |||
| #include <libman/fmt.hpp> | |||
| #include <libman/parse.hpp> | |||
| #include <spdlog/fmt/fmt.h> | |||
| using namespace lm; | |||
| package package::from_file(path_ref fpath) { | |||