67 lines
3.6 KiB
Bash
67 lines
3.6 KiB
Bash
#!/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
|