#!/bin/bash set -e cd /work/versioningcpp mkdir -p include/versiond src tests deps/wolfssh cat > CMakeLists.txt <<'EOF' cmake_minimum_required(VERSION 3.20) project(versioningcpp CXX) set(CMAKE_CXX_STANDARD 20) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(SQLite3 REQUIRED) add_library(versiond STATIC src/config.cpp src/db.cpp src/store.cpp src/util.cpp src/ingest.cpp src/monitor.cpp src/maintenance.cpp src/recovery.cpp src/restore.cpp src/stats.cpp src/remote.cpp src/uploader.cpp src/api.cpp src/cli.cpp src/dbsafe.cpp src/filters.cpp src/diff.cpp) target_include_directories(versiond PUBLIC include ${SQLite3_INCLUDE_DIRS}) target_link_libraries(versiond PUBLIC SQLite::SQLite3) add_executable(versiond-cli src/main.cpp) target_link_libraries(versiond-cli PRIVATE versiond) enable_testing() add_executable(versiond-tests tests/test_all.cpp) target_link_libraries(versiond-tests PRIVATE versiond) add_test(NAME all COMMAND versiond-tests) EOF cat > include/versiond/versiond.hpp <<'EOF' #pragma once #include #include #include namespace versiond { struct Config { std::string host="127.0.0.1"; int port=9922; uint64_t max_file_bytes=10485760; std::string data_dir; std::string config_dir; std::string remote_url; std::string remote_user; std::string remote_password; bool verify_tls=true; int keep_days=5; }; Config default_config(); class Db { public: explicit Db(const std::string& p); ~Db(); void exec(const std::string& s); void* handle(); private: void* h_=nullptr; }; class Store { public: explicit Store(const std::string& d); std::string put(const std::string& h,const std::string& d); std::string path_for(const std::string& h); private: std::string dir_; }; std::string sha256_hex(const std::string& d); bool should_ignore(const std::string& p,const std::vector& p2); int cli_main(int argc,char** argv); } EOF for f in config db store util ingest monitor maintenance recovery restore stats remote uploader api cli dbsafe filters diff; do echo "#include \"versiond/versiond.hpp\"" > src/$f.cpp; done echo 'int main(int argc,char** argv){return versiond::cli_main(argc,argv);}' > src/main.cpp echo '#include int main(){return 0;}' > tests/test_all.cpp cat > PLAN.md <<'EOF' # versioningcpp plan source: https://retoor.molodetz.nl/retoor/versioning (python fastapi+sqlite) target: ./versioningcpp native C++20 static, wolfSSL/wolfSSH vendored under deps/ compat: sqlite via libsqlite3 static; http api minimal sockets; sftp via wolfSSH replacing openssl; inotify via inotify API; sha256 vendored picosha2-style. units: each src/versiond/*.py -> src/*.cpp, interfaces preserved. registry: see REGISTRY.md EOF cat > REGISTRY.md <<'EOF' unit,status,source,target,strategy config,todo,src/versiond/config.py,src/config.cpp,native db,todo,src/versiond/db.py,src/db.cpp,native store,todo,src/versiond/store.py,src/store.cpp,native filters,todo,src/versiond/filters.py,src/filters.cpp,native diff,todo,src/versiond/diff.py,src/diff.cpp,native ingest,todo,src/versiond/ingest.py,src/ingest.cpp,native monitor,todo,src/versiond/monitor.py+inotify.py,src/monitor.cpp,native maintenance,todo,src/versiond/maintenance.py,src/maintenance.cpp,native recovery,todo,src/versiond/recovery.py,src/recovery.cpp,native restore,todo,src/versiond/restore.py,src/restore.cpp,native stats,todo,src/versiond/stats.py,src/stats.cpp,native remote,todo,src/versiond/remote.py,src/remote.cpp,transpile+wolfssh uploader,todo,src/versiond/uploader.py,src/uploader.cpp,native api+cli,todo,src/versiond/api.py+cli.py,src/api.cpp+cli.cpp,native dbsafe,todo,src/versiond/dbsafe.py,src/dbsafe.cpp,native EOF echo OK