From 5ca55d51b13d805027945fcdd537c2219da9fa89 Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Tue, 8 Mar 2022 23:28:24 +0100 Subject: [PATCH] Check that output directory exists --- .clang-uml | 2 +- src/main.cc | 25 +++++++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/.clang-uml b/.clang-uml index 32bdc7f0..af96bbc5 100644 --- a/.clang-uml +++ b/.clang-uml @@ -16,4 +16,4 @@ diagrams: package_model_class: include!: uml/package_model_class_diagram.yml diagram_model_class: - include!: uml/diagram_model_class_diagram.yml \ No newline at end of file + include!: uml/diagram_model_class_diagram.yml diff --git a/src/main.cc b/src/main.cc index 6f02be90..eb3b0851 100644 --- a/src/main.cc +++ b/src/main.cc @@ -42,6 +42,8 @@ using cx::compilation_database; void print_diagrams_list(const clanguml::config::config &cfg); +bool check_output_directory(const std::string &dir); + int main(int argc, const char *argv[]) { CLI::App app{"Clang-based PlantUML diagram generator for C++"}; @@ -97,6 +99,9 @@ int main(int argc, const char *argv[]) if (output_directory) od = output_directory.value(); + if (!check_output_directory(od)) + return 1; + for (const auto &[name, diagram] : config.diagrams) { // If there are any specific diagram names provided on the command line, // and this diagram is not in that list - skip it @@ -164,6 +169,26 @@ int main(int argc, const char *argv[]) return 0; } +bool check_output_directory(const std::string &dir) +{ + namespace fs = std::filesystem; + using std::cout; + + fs::path output_dir{dir}; + + if (!fs::exists(output_dir)) { + cout << "ERROR: Output directory " << dir << " doesn't exist...\n"; + return false; + } + + if (!fs::is_directory(output_dir)) { + cout << "ERROR: " << dir << " is not a directory...\n"; + return false; + } + + return true; +} + void print_diagrams_list(const clanguml::config::config &cfg) { using std::cout;