From a3338b55da55f467d984ac36e7c3f158b88245b9 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Mon, 27 Oct 2025 16:31:40 +0100 Subject: Dangling changes --- run_and_record/c++/file.hpp | 78 +++++++++++++++++++++++++++++++++++++++++++++ run_and_record/c++/main.cpp | 74 ++++++++++++++++++++++++++---------------- 2 files changed, 124 insertions(+), 28 deletions(-) create mode 100644 run_and_record/c++/file.hpp (limited to 'run_and_record') diff --git a/run_and_record/c++/file.hpp b/run_and_record/c++/file.hpp new file mode 100644 index 0000000..cb3077f --- /dev/null +++ b/run_and_record/c++/file.hpp @@ -0,0 +1,78 @@ +#pragma once + +#include +#include + +namespace kel { +namespace sch { +using namespace saw::schema; +} + +template +saw::error_or simple_write_file(const data& data_, const std::filesystem::path& p){ + saw::data dat; + { + saw::codec cdc; + auto eov = cdc.encode(data_,dat); + if(eov.is_error()){ + return eov; + } + } + + saw::remote file_remote; + auto eo_addr = file_remote.parse_address(p); + if(eo_addr.is_error()){ + return std::move(eo_addr.get_error()); + } + auto& addr = eo_addr.get_value(); + + auto eo_srv = file_remote.template data_listen({*addr}); + if(eo_srv.is_error()){ + return std::move(eo_srv.get_error()); + } + auto& srv = eo_srv.get_value(); + saw::id fid{0u}; + + auto eo_write = srv->send({fid}, dat); + if(eo_write.is_error()){ + return eo_write; + } + + return saw::make_void(); +} + +template +saw::error_or> simple_read_file(const std::filesystem::path& p){ + saw::data dat; + + saw::remote file_remote; + auto eo_addr = file_remote.parse_address(p); + if(eo_addr.is_error()){ + return std::move(eo_addr.get_error()); + } + auto& addr = eo_addr.get_value(); + + auto eo_srv = file_remote.template data_listen({*addr}); + if(eo_srv.is_error()){ + return std::move(eo_srv.get_error()); + } + auto& srv = eo_srv.get_value(); + saw::id fid{0u}; + + auto eo_read = srv->receive({fid}); + if(eo_read.is_error()){ + return eo_read; + } + auto& read = eo_read.get_value(); + + { + saw::codec cdc; + auto eov = cdc.decode(read,dat); + if(eov.is_error()){ + return std::move(eov.get_error()); + } + } + + return dat; +} +} diff --git a/run_and_record/c++/main.cpp b/run_and_record/c++/main.cpp index 9a33f59..7df7cb5 100644 --- a/run_and_record/c++/main.cpp +++ b/run_and_record/c++/main.cpp @@ -1,3 +1,5 @@ +#include "file.hpp" + #include #include @@ -22,6 +24,22 @@ using RarArgs = Args< RarArgsTuple >; +using RarDataFile = Struct< + Member,"command">, + Member< + Array< + Struct< + Member, + Member + > + >, "env">, + Member< + Struct< + Member, + Member + >, + "git"> +>; } /** @@ -58,6 +76,11 @@ saw::error_or run_program(int argc, char** argv){ waitpid(pid,&status,0); } + + /// @todo check status recoverd and write based on that. + /// + /// @todo record ENV used in run. + return saw::make_void(); } @@ -93,40 +116,26 @@ saw::error_or kel_main(int argc, char** argv){ // Grab home variable Check the default config location and try to decode the file saw::data args; + auto eo_home = get_home_env(); + if(eo_home.is_error()){ + return std::move(eov.get_error()); + } + auto& home = eov.get_value(); + + /// @todo Generate unique entry YYYY-MM-DD-HH-SS-MSMS-BIN_NAME-DUMB_HASH ? + auto data_dir = home / ".local" / "kel" / "run_and_record"; + // + { - auto eo_home = get_home_env(); - if(eo_home.is_error()){ - return std::move(eov.get_error()); - } - auto& home = eov.get_value(); auto conf_file = home / ".config" / "kel" / "run_and_record.json"; - saw::remote file_remote; - auto eo_addr = file_remote.parse_address(conf_file); - if(eo_addr.is_error()){ - return std::move(eo_addr.get_error()); - } - auto& addr = eo_addr.get_value(); - auto eo_srv = file_remote.template data_listen({*addr}); - if(eo_srv.is_error()){ - return std::move(eo_srv.get_error()); - } - auto& srv = eo_srv.get_value(); - saw::id fid{0u}; - - auto eo_data = srv->receive({fid}); - if(eo_data.is_error()){ - return std::move(eo_data.get_error()); - } - auto& data = eo_data.get_value(); + auto eo_file = simple_read_file(conf_file); - saw::codec json_cdc; - auto& args_str = args.template get<"arguments">(); - auto eo_dec = json_cdc.decode(data,args_str); - if(eo_dec.is_error()){ - return eo_dec; + if(eo_file.is_error()){ + return std::move(eo_file.get_error()); } + args.template get<"args">() = eo_file.get_value(); } // 0 til i/sep_pos-1 with count of sep_pos @@ -139,6 +148,10 @@ saw::error_or kel_main(int argc, char** argv){ return eov; } } + saw::data data_for_file; + { + auto& env = data_for_file.template get<"env">(); + } // sep_pos+1 til end int argc_prog = argc - (sep_pos+1); { @@ -147,6 +160,11 @@ saw::error_or kel_main(int argc, char** argv){ return eov; } } + { + + } + + return saw::make_void(); } -- cgit v1.2.3