From 4953d4988d27a20a5624c6507e15a2c98cb013c9 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sat, 26 Apr 2025 18:05:18 +1200 Subject: [PATCH] Fix segfault :facepalm: --- src/autocomplete.cpp | 20 +++++++++++++++++++- src/servers.cpp | 3 +-- src/services.cpp | 6 +++--- src/services.hpp | 2 +- 4 files changed, 24 insertions(+), 7 deletions(-) diff --git a/src/autocomplete.cpp b/src/autocomplete.cpp index 28dfa32..4d94473 100644 --- a/src/autocomplete.cpp +++ b/src/autocomplete.cpp @@ -2,6 +2,8 @@ #include "servers.hpp" #include "config.hpp" #include "templates.hpp" +#include "services.hpp" +#include "servers.hpp" #include #include @@ -15,10 +17,15 @@ void dropshell::autocomplete(const std::vector &args) // std::cerr << std::endl; if (args.size() < 3) // dropshell autocomplete ??? + { autocomplete_list_commands(); + return; + } std::string cmd = args[2]; + // std::cout<<" cmd = ["< &args) } if (args.size()==5) // we have the command and the server and the service. dropshell autocomplete command server service_name - { + { + std::string service_name = args[4]; + if (cmd=="restore") + { + std::set backups; + std::vector servers = dropshell::get_configured_servers(); + for (auto server : servers) + backups.merge(dropshell::list_backups(server.name, service_name)); + + for (auto backup : backups) + std::cout << backup << std::endl; + } return; // no more autocompletion possible - don't know what the argument is for. } diff --git a/src/servers.cpp b/src/servers.cpp index 6eb5898..6347693 100644 --- a/src/servers.cpp +++ b/src/servers.cpp @@ -188,13 +188,12 @@ void create_server(const std::string &server_name) void get_all_used_commands(std::set &commands) { - std::set template_shell_commands; std::vector servers = get_configured_servers(); for (const auto& server : servers) { std::vector services = dropshell::get_server_services_info(server.name); for (const auto& service : services) - template_shell_commands.merge(dropshell::get_used_commands(server.name, service.service_name)); + commands.merge(dropshell::get_used_commands(server.name, service.service_name)); } } diff --git a/src/services.cpp b/src/services.cpp index 98b48da..40e5548 100644 --- a/src/services.cpp +++ b/src/services.cpp @@ -111,9 +111,9 @@ std::set get_used_commands(const std::string &server_name, const st return commands; } -std::vector list_backups(const std::string &server_name, const std::string &service_name) +std::set list_backups(const std::string &server_name, const std::string &service_name) { - std::vector backups; + std::set backups; if (server_name.empty() || service_name.empty()) return backups; @@ -126,7 +126,7 @@ std::vector list_backups(const std::string &server_name, const std: for (const auto& entry : fs::directory_iterator(backups_dir)) { if (fs::is_regular_file(entry) && entry.path().extension() == ".tgz") if (entry.path().filename().string().find(service_name) != std::string::npos) - backups.push_back(entry.path().filename().string()); + backups.insert(entry.path().filename().string()); } } return backups; diff --git a/src/services.hpp b/src/services.hpp index c2d1932..f37dbb8 100644 --- a/src/services.hpp +++ b/src/services.hpp @@ -19,7 +19,7 @@ namespace dropshell { std::set get_used_commands(const std::string& server_name, const std::string& service_name); // list all backups for a given server and service - std::vector list_backups(const std::string& server_name, const std::string& service_name); + std::set list_backups(const std::string& server_name, const std::string& service_name); bool create_service(const std::string& server_name, const std::string& template_name, const std::string& service_name); } // namespace dropshell