From 3cb2a7937b281516bde876e5884fbe5ec552ec9b Mon Sep 17 00:00:00 2001 From: Karen Arutyunov Date: Thu, 19 Sep 2019 22:33:15 +0300 Subject: Revert previous commit erroneously pushed to master instead of dev branch --- mod/mod-builds.cxx | 78 ++++++++++++++++-------------------------------------- 1 file changed, 23 insertions(+), 55 deletions(-) (limited to 'mod/mod-builds.cxx') diff --git a/mod/mod-builds.cxx b/mod/mod-builds.cxx index d446133..71e7f7b 100644 --- a/mod/mod-builds.cxx +++ b/mod/mod-builds.cxx @@ -13,8 +13,7 @@ #include #include // to_string() -#include // path_match(), path_pattern(), literal(), - // path_pattern_iterator +#include // path_match() #include // to_result_status(), to_string(result_status) @@ -67,66 +66,32 @@ init (scanner& s) options_->root (dir_path ("/")); } -// Transform the wildcard to the SIMILAR TO-pattern. +// Transform the wildcard to the LIKE-pattern. // static string -transform (const string& pattern) +transform (const string& s) { - if (pattern.empty ()) + if (s.empty ()) return "%"; string r; - for (const path_pattern_char& pc: path_pattern_iterator (pattern)) + for (char c: s) { - switch (pc.type) + switch (c) { - case path_pattern_char_type::question_mark: r += '_'; break; - case path_pattern_char_type::star: r += '%'; break; - case path_pattern_char_type::bracket_expr: - { - size_t n (r.size ()); - r.append (pc.begin, pc.end); - - // Translate the inverse character, if present. - // - if (r[n + 1] == '!') - r[n + 1] = '^'; - - break; - } - case path_pattern_char_type::literal: - { - char c (literal (pc)); - - // Note that '.' is not a special character for SIMILAR TO. - // - switch (c) - { - case '\\': - case '%': - case '_': - case '|': - case '+': - case '{': - case '(': r += '\\'; break; - } - - r += c; - break; - } + case '*': c = '%'; break; + case '?': c = '_'; break; + case '\\': + case '%': + case '_': r += '\\'; break; } + + r += c; } return r; } -template -static inline query -match (const C qc, const string& pattern) -{ - return qc + "SIMILAR TO" + query::_val (transform (pattern)); -} - template static inline query build_query (const brep::cstrings* configs, @@ -159,7 +124,8 @@ build_query (const brep::cstrings* configs, // Package name. // if (!params.name ().empty ()) - q = q && match (pid.name, params.name ()); + q = q && pid.name.like (package_name (transform (params.name ()), + package_name::raw_string)); // Package version. // @@ -201,17 +167,17 @@ build_query (const brep::cstrings* configs, // Build configuration name. // if (!params.configuration ().empty ()) - q = q && match (qb::id.configuration, params.configuration ()); + q = q && qb::id.configuration.like (transform (params.configuration ())); // Build machine name. // if (!params.machine ().empty ()) - q = q && match (qb::machine, params.machine ()); + q = q && qb::machine.like (transform (params.machine ())); // Build target. // if (!params.target ().empty ()) - q = q && match (qb::target, params.target ()); + q = q && qb::target.like (transform (params.target ())); // Build result. // @@ -284,7 +250,8 @@ package_query (const brep::params::builds& params, // Package name. // if (!params.name ().empty ()) - q = q && match (qp::id.name, params.name ()); + q = q && qp::id.name.like ( + package_name (transform (params.name ()), package_name::raw_string)); // Package version. // @@ -499,8 +466,9 @@ handle (request& rq, response& rs) // We will not display hidden configurations, unless the configuration is // specified explicitly. // - bool exclude_hidden (params.configuration ().empty () || - path_pattern (params.configuration ())); + bool exclude_hidden ( + params.configuration ().empty () || + params.configuration ().find_first_of ("*?") != string::npos); cstrings conf_names; -- cgit v1.1