Files
versioningcpp/gen.sh
T

67 lines
3.6 KiB
Bash
Raw Normal View History

#!/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 <cstdint>
#include <string>
#include <vector>
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<std::string>& 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 <cassert>
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