From e8fecbac6413d6131db2896bd2cc3fa0b76338ab Mon Sep 17 00:00:00 2001 From: Bartek Kryza Date: Sat, 19 Jun 2021 13:26:31 +0200 Subject: [PATCH] Updated glob dep --- src/puml/class_diagram_generator.h | 2 +- src/puml/sequence_diagram_generator.h | 2 +- thirdparty/glob/glob.hpp | 27 +++++++++++++++++++-------- 3 files changed, 21 insertions(+), 10 deletions(-) diff --git a/src/puml/class_diagram_generator.h b/src/puml/class_diagram_generator.h index 8547299f..c5dcc911 100644 --- a/src/puml/class_diagram_generator.h +++ b/src/puml/class_diagram_generator.h @@ -407,7 +407,7 @@ clanguml::model::class_diagram::diagram generate( std::vector translation_units{}; for (const auto &g : diagram.glob) { spdlog::debug("Processing glob: {}", g); - const auto matches = glob::glob(g); + const auto matches = glob::rglob(g); std::copy(matches.begin(), matches.end(), std::back_inserter(translation_units)); } diff --git a/src/puml/sequence_diagram_generator.h b/src/puml/sequence_diagram_generator.h index 1d717d75..bc6cff1e 100644 --- a/src/puml/sequence_diagram_generator.h +++ b/src/puml/sequence_diagram_generator.h @@ -149,7 +149,7 @@ clanguml::model::sequence_diagram::diagram generate( std::vector translation_units{}; for (const auto &g : diagram.glob) { spdlog::debug("Processing glob: {}", g); - const auto matches = glob::glob(g); + const auto matches = glob::rglob(g); std::copy(matches.begin(), matches.end(), std::back_inserter(translation_units)); } diff --git a/thirdparty/glob/glob.hpp b/thirdparty/glob/glob.hpp index b8bb07ef..3db5844a 100644 --- a/thirdparty/glob/glob.hpp +++ b/thirdparty/glob/glob.hpp @@ -174,8 +174,13 @@ static inline fs::path expand_tilde(fs::path path) { if (path.empty()) return path; - +#ifdef _WIN32 + char *home; + size_t sz; + errno_t err = _dupenv_s(&home, &sz, "USERPROFILE"); +#else const char *home = std::getenv("HOME"); +#endif if (home == nullptr) { throw std::invalid_argument( "error: Unable to expand `~` - HOME environment variable not set."); @@ -199,7 +204,8 @@ static inline bool has_magic(const std::string &pathname) static inline bool is_hidden(const std::string &pathname) { - return pathname[0] == '.'; + return std::regex_match( + pathname, std::regex("^(.*\\/)*\\.[^\\.\\/]+\\/*$")); } static inline bool is_recursive(const std::string &pattern) @@ -232,7 +238,7 @@ static inline std::vector iter_directory( } } } - catch (std::exception &e) { + catch (std::exception &) { // not a directory // do nothing } @@ -263,6 +269,7 @@ static inline std::vector rlistdir( static inline std::vector glob2( const fs::path &dirname, const std::string &pattern, bool dironly) { + // std::cout << "In glob2\n"; std::vector result; assert(is_recursive(pattern)); for (auto &dir : rlistdir(dirname, dironly)) { @@ -277,14 +284,17 @@ static inline std::vector glob2( static inline std::vector glob1( const fs::path &dirname, const std::string &pattern, bool dironly) { + // std::cout << "In glob1\n"; auto names = iter_directory(dirname, dironly); std::vector filtered_names; for (auto &n : names) { if (!is_hidden(n.string())) { filtered_names.push_back(n.filename()); // if (n.is_relative()) { + // // std::cout << "Filtered (Relative): " << n << "\n"; // filtered_names.push_back(fs::relative(n)); // } else { + // // std::cout << "Filtered (Absolute): " << n << "\n"; // filtered_names.push_back(n.filename()); // } } @@ -295,6 +305,7 @@ static inline std::vector glob1( static inline std::vector glob0( const fs::path &dirname, const fs::path &basename, bool /*dironly*/) { + // std::cout << "In glob0\n"; std::vector result; if (basename.empty()) { // 'q*x/' should match only directories. @@ -343,23 +354,23 @@ static inline std::vector glob( if (dirname.empty()) { if (recursive && is_recursive(basename.string())) { - return glob2(dirname, basename, dironly); + return glob2(dirname, basename.string(), dironly); } else { - return glob1(dirname, basename, dironly); + return glob1(dirname, basename.string(), dironly); } } std::vector dirs; if (dirname != fs::path(pathname) && has_magic(dirname.string())) { - dirs = glob(dirname, recursive, true); + dirs = glob(dirname.string(), recursive, true); } else { dirs = {dirname}; } std::function( - const fs::path &, const fs::path &, bool)> + const fs::path &, const std::string &, bool)> glob_in_dir; if (has_magic(basename.string())) { if (recursive && is_recursive(basename.string())) { @@ -374,7 +385,7 @@ static inline std::vector glob( } for (auto &d : dirs) { - for (auto &name : glob_in_dir(d, basename, dironly)) { + for (auto &name : glob_in_dir(d, basename.string(), dironly)) { fs::path subresult = name; if (name.parent_path().empty()) { subresult = d / name;