From 8b7ead9400820969a6133a5c5827b4690099b4d5 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Mon, 13 Mar 2017 13:37:10 +0200 Subject: Filter hidden files/directories in wildcard patterns matches --- build2/parser.cxx | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'build2/parser.cxx') diff --git a/build2/parser.cxx b/build2/parser.cxx index 50fcc06..b7f1930 100644 --- a/build2/parser.cxx +++ b/build2/parser.cxx @@ -2422,22 +2422,32 @@ namespace build2 unique = (i == string::npos || p.find ("**", i + 2) == string::npos); } - //@@ PAT TODO: weed out starting with dot (unless pattern starts - // with dot; last component? intermediate components?). - // function func; if (unique) - func = [a, &append] (path&& m, const string&, bool interm) + func = [a, &append] (path&& m, const string& p, bool interm) { + // Ignore entries that start with a dot unless the pattern that + // matched them also starts with a dot. + // + const string& s (m.string ()); + if (p[0] != '.' && s[path::traits::find_leaf (s)] == '.') + return !interm; + if (!interm) append (move (m).representation (), a); + return true; }; else - func = [a, &include_match] (path&& m, const string&, bool interm) + func = [a, &include_match] (path&& m, const string& p, bool interm) { + const string& s (m.string ()); + if (p[0] != '.' && s[path::traits::find_leaf (s)] == '.') + return !interm; + if (!interm) include_match (move (m).representation (), a); + return true; }; -- cgit v1.1