From: Giuliano Procida <gprocida@google.com>
To: Matthias Maennich <maennich@google.com>
Cc: libabigail@sourceware.org, Dodji Seketeli <dodji@seketeli.org>,
kernel-team@android.com
Subject: Re: [PATCH v3 18/21] Refactor suppression property regex parsing.
Date: Mon, 27 Apr 2020 17:59:14 +0100 [thread overview]
Message-ID: <CAGvU0HkbREnxz6AMfTAd-JRwE+dWPfG57VjTk3zGMMcQ2k_WfQ@mail.gmail.com> (raw)
In-Reply-To: <20200427145554.GP159704@google.com>
Hi.
On Mon, 27 Apr 2020 at 15:55, Matthias Maennich <maennich@google.com> wrote:
>
> On Fri, Apr 24, 2020 at 10:21:29AM +0100, Giuliano Procida wrote:
> >This patch introduces a helper function to look up a key in an ini
> >configuration section and get a compiled regex value. All regex
> >look-ups now use this.
> >
> >There are no behavioural changes.
> >
>
> That is an awesome simplification!
>
> I basically have the same comment as before: Getting different data
> types from the ini asks (in my opinion) for a bit generic code.
The generic code comes a bit later. We cannot do everything on a
purely type-driven basis (complications around
has_data_member_inserted* properties), but we can get quite close.
As I note in my comment for 17/21, this is the wrong refactoring. What
the code should look like is (once error handling is there as well):
if (prop prop = section.find_property("foo_regex")) {
regex r;
if (!read_regex(prop, r))
return false;
result.set_foo_regex(r);
}
or
if (prop prop = section.find_property("foo_regex"))
if (!type_driven_magic(prop, &bar_suppression::set_foo_regex))
return false;
for the general case we need (adapter can be "call" in almost all cases):
if (prop prop = section.find_property("foo_regex"))
if (!type_driven_magic(prop, adapter(&bar_suppression::set_foo_regex)))
return false;
And once it's table-driven, it's just:
bar_suppression_table = {
{ "foo_regex", { adapter(&bar_suppression::set_foo_regex), ... } },
...
};
I'm undecided as to whether the type-driven magic (calling the right
function to extract a type from a property) should be with template
specialisation or plain overloading.
> But I am also ok with this version.
>
> Reviewed-by: Matthias Maennich <maennich@google.com>
I'll hold off until further feedback on 17/21 and this one.
Thanks,
Giuliano.
> Cheers,
> Matthias
>
> >Signed-off-by: Giuliano Procida <gprocida@google.com>
> >---
> > src/abg-suppression.cc | 215 ++++++++++++-----------------------------
> > 1 file changed, 61 insertions(+), 154 deletions(-)
> >
> >diff --git a/src/abg-suppression.cc b/src/abg-suppression.cc
> >index 84c9b78f..8b3631fd 100644
> >--- a/src/abg-suppression.cc
> >+++ b/src/abg-suppression.cc
> >@@ -1619,6 +1619,30 @@ maybe_get_string_prop(const ini::config::section& section,
> > return true;
> > }
> >
> >+/// Maybe compile a property to a regex.
> >+///
> >+/// Attempt to find a simple property in an ini section and compile it
> >+/// to a regex.
> >+///
> >+/// @param section the ini section to look in
> >+///
> >+/// @param prop the property name
> >+///
> >+/// @param r the regex to compile into
> >+///
> >+/// @return whether the property was found
> >+static bool
> >+maybe_get_regex_prop(const ini::config::section& section,
> >+ const std::string& name,
> >+ regex_t_sptr& regex)
> >+{
> >+ string str;
> >+ if (!maybe_get_string_prop(section, name, str))
> >+ return false;
> >+ regex = regex::compile(str);
> >+ return true;
> >+}
> >+
> > /// Read a type suppression from an instance of ini::config::section
> > /// and build a @ref type_suppression as a result.
> > ///
> >@@ -1641,45 +1665,23 @@ read_type_suppression(const ini::config::section& section)
> > string label_str;
> > maybe_get_string_prop(section, "label", label_str);
> >
> >- ini::simple_property_sptr file_name_regex_prop =
> >- is_simple_property(section.find_property("file_name_regexp"));
> > regex_t_sptr file_name_regex;
> >- if (file_name_regex_prop)
> >- file_name_regex =
> >- regex::compile(file_name_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "file_name_regexp", file_name_regex);
> >
> >- ini::simple_property_sptr file_name_not_regex_prop =
> >- is_simple_property(section.find_property("file_name_not_regexp"));
> > regex_t_sptr file_name_not_regex;
> >- if (file_name_not_regex_prop)
> >- file_name_not_regex =
> >- regex::compile(file_name_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "file_name_not_regexp", file_name_not_regex);
> >
> >- ini::simple_property_sptr soname_regex_prop =
> >- is_simple_property(section.find_property("soname_regexp"));
> > regex_t_sptr soname_regex;
> >- if (soname_regex_prop)
> >- soname_regex = regex::compile(soname_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "soname_regexp", soname_regex);
> >
> >- ini::simple_property_sptr soname_not_regex_prop =
> >- is_simple_property(section.find_property("soname_not_regexp"));
> > regex_t_sptr soname_not_regex;
> >- if (soname_not_regex_prop)
> >- soname_not_regex =
> >- regex::compile(soname_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "soname_not_regexp", soname_not_regex);
> >
> >- ini::simple_property_sptr name_regex_prop =
> >- is_simple_property(section.find_property("name_regexp"));
> > regex_t_sptr name_regex;
> >- if (name_regex_prop)
> >- name_regex = regex::compile(name_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "name_regexp", name_regex);
> >
> >- ini::simple_property_sptr name_not_regex_prop =
> >- is_simple_property(section.find_property("name_not_regexp"));
> > regex_t_sptr name_not_regex;
> >- if (name_not_regex_prop)
> >- name_not_regex =
> >- regex::compile(name_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "name_not_regexp", name_not_regex);
> >
> > string name_str;
> > maybe_get_string_prop(section, "name", name_str);
> >@@ -1706,12 +1708,8 @@ read_type_suppression(const ini::config::section& section)
> > }
> > }
> >
> >- ini::simple_property_sptr srcloc_not_regexp_prop =
> >- is_simple_property(section.find_property("source_location_not_regexp"));
> > regex_t_sptr srcloc_not_regex;
> >- if (srcloc_not_regexp_prop)
> >- srcloc_not_regex =
> >- regex::compile(srcloc_not_regexp_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "source_location_not_regexp", srcloc_not_regex);
> >
> > std::string type_kind_str;
> > bool consider_type_kind =
> >@@ -3195,85 +3193,47 @@ read_function_suppression(const ini::config::section& section)
> > string label_str;
> > maybe_get_string_prop(section, "label", label_str);
> >
> >- ini::simple_property_sptr file_name_regex_prop =
> >- is_simple_property(section.find_property("file_name_regexp"));
> > regex_t_sptr file_name_regex;
> >- if (file_name_regex_prop)
> >- file_name_regex =
> >- regex::compile(file_name_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "file_name_regexp", file_name_regex);
> >
> >- ini::simple_property_sptr file_name_not_regex_prop =
> >- is_simple_property(section.find_property("file_name_not_regexp"));
> > regex_t_sptr file_name_not_regex;
> >- if (file_name_not_regex_prop)
> >- file_name_not_regex =
> >- regex::compile(file_name_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "file_name_not_regexp", file_name_not_regex);
> >
> >- ini::simple_property_sptr soname_regex_prop =
> >- is_simple_property(section.find_property("soname_regexp"));
> > regex_t_sptr soname_regex;
> >- if (soname_regex_prop)
> >- soname_regex = regex::compile(soname_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "soname_regexp", soname_regex);
> >
> >- ini::simple_property_sptr soname_not_regex_prop =
> >- is_simple_property(section.find_property("soname_not_regexp"));
> > regex_t_sptr soname_not_regex;
> >- if (soname_not_regex_prop)
> >- soname_not_regex =
> >- regex::compile(soname_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "soname_not_regexp", soname_not_regex);
> >
> > string name;
> > maybe_get_string_prop(section, "name", name);
> >
> >- ini::simple_property_sptr name_regex_prop =
> >- is_simple_property(section.find_property("name_regexp"));
> > regex_t_sptr name_regex;
> >- if (name_regex_prop)
> >- name_regex = regex::compile(name_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "name_regexp", name_regex);
> >
> >- ini::simple_property_sptr name_not_regex_prop =
> >- is_simple_property(section.find_property("name_not_regexp"));
> > regex_t_sptr name_not_regex;
> >- if (name_not_regex_prop)
> >- name_not_regex =
> >- regex::compile(name_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "name_not_regexp", name_not_regex);
> >
> > string return_type_name;
> > maybe_get_string_prop(section, "return_type_name", return_type_name);
> >
> >- ini::simple_property_sptr return_type_regex_prop =
> >- is_simple_property(section.find_property("return_type_regexp"));
> > regex_t_sptr return_type_regex;
> >- if (return_type_regex_prop)
> >- return_type_regex =
> >- regex::compile(return_type_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "return_type_regexp", return_type_regex);
> >
> > string sym_name;
> > maybe_get_string_prop(section, "symbol_name", sym_name);
> >
> >- ini::simple_property_sptr sym_name_regex_prop =
> >- is_simple_property(section.find_property("symbol_name_regexp"));
> > regex_t_sptr sym_name_regex;
> >- if (sym_name_regex_prop)
> >- sym_name_regex =
> >- regex::compile(sym_name_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "symbol_name_regexp", sym_name_regex);
> >
> >- ini::simple_property_sptr sym_name_not_regex_prop =
> >- is_simple_property(section.find_property("symbol_name_not_regexp"));
> > regex_t_sptr sym_name_not_regex;
> >- if (sym_name_not_regex_prop)
> >- sym_name_not_regex =
> >- regex::compile(sym_name_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "symbol_name_not_regexp", sym_name_not_regex);
> >
> > string sym_version;
> > maybe_get_string_prop(section, "symbol_version", sym_version);
> >
> >- ini::simple_property_sptr sym_ver_regex_prop =
> >- is_simple_property(section.find_property("symbol_version_regexp"));
> > regex_t_sptr sym_ver_regex;
> >- if (sym_ver_regex_prop)
> >- sym_ver_regex =
> >- regex::compile(sym_ver_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "symbol_version_regexp", sym_ver_regex);
> >
> > string allow_other_aliases;
> > maybe_get_string_prop(section, "allow_other_aliases", allow_other_aliases);
> >@@ -4025,85 +3985,47 @@ read_variable_suppression(const ini::config::section& section)
> > string label_str;
> > maybe_get_string_prop(section, "label", label_str);
> >
> >- ini::simple_property_sptr file_name_regex_prop =
> >- is_simple_property(section.find_property("file_name_regexp"));
> > regex_t_sptr file_name_regex;
> >- if (file_name_regex_prop)
> >- file_name_regex =
> >- regex::compile(file_name_regex_prop->get_value()->as_string());
> >-
> >- ini::simple_property_sptr file_name_not_regex_prop =
> >- is_simple_property(section.find_property("file_name_not_regexp"));
> >- regex_t_sptr file_name_not_regex;
> >- if (file_name_not_regex_prop)
> >- file_name_not_regex =
> >- regex::compile(file_name_not_regex_prop->get_value()->as_string());
> >-
> >- ini::simple_property_sptr soname_regex_prop =
> >- is_simple_property(section.find_property("soname_regexp"));
> >+ maybe_get_regex_prop(section, "file_name_regexp", file_name_regex);
> >+
> >+ regex_t_sptr file_name_not_regex;
> >+ maybe_get_regex_prop(section, "file_name_not_regexp", file_name_not_regex);
> >+
> > regex_t_sptr soname_regex;
> >- if (soname_regex_prop)
> >- soname_regex = regex::compile(soname_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "soname_regexp", soname_regex);
> >
> >- ini::simple_property_sptr soname_not_regex_prop =
> >- is_simple_property(section.find_property("soname_not_regexp"));
> > regex_t_sptr soname_not_regex;
> >- if (soname_not_regex_prop)
> >- soname_not_regex =
> >- regex::compile(soname_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "soname_not_regexp", soname_not_regex);
> >
> > string name_str;
> > maybe_get_string_prop(section, "name", name_str);
> >
> >- ini::simple_property_sptr name_regex_prop =
> >- is_simple_property(section.find_property("name_regexp"));
> > regex_t_sptr name_regex;
> >- if (name_regex_prop)
> >- name_regex = regex::compile(name_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "name_regexp", name_regex);
> >
> >- ini::simple_property_sptr name_not_regex_prop =
> >- is_simple_property(section.find_property("name_not_regexp"));
> > regex_t_sptr name_not_regex;
> >- if (name_not_regex_prop)
> >- name_not_regex =
> >- regex::compile(name_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "name_not_regexp", name_not_regex);
> >
> > string symbol_name;
> > maybe_get_string_prop(section, "symbol_name", symbol_name);
> >
> >- ini::simple_property_sptr sym_name_regex_prop =
> >- is_simple_property(section.find_property("symbol_name_regexp"));
> > regex_t_sptr symbol_name_regex;
> >- if (sym_name_regex_prop)
> >- symbol_name_regex =
> >- regex::compile(sym_name_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "symbol_name_regexp", symbol_name_regex);
> >
> >- ini::simple_property_sptr sym_name_not_regex_prop =
> >- is_simple_property(section.find_property("symbol_name_not_regexp"));
> > regex_t_sptr symbol_name_not_regex;
> >- if (sym_name_not_regex_prop)
> >- symbol_name_not_regex =
> >- regex::compile(sym_name_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "symbol_name_not_regexp", symbol_name_not_regex);
> >
> > string symbol_version;
> > maybe_get_string_prop(section, "symbol_version", symbol_version);
> >
> >- ini::simple_property_sptr sym_version_regex_prop =
> >- is_simple_property(section.find_property("symbol_version_regexp"));
> > regex_t_sptr symbol_version_regex;
> >- if (sym_version_regex_prop)
> >- symbol_version_regex =
> >- regex::compile(sym_version_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "symbol_version_regexp", symbol_version_regex);
> >
> > string type_name_str;
> > maybe_get_string_prop(section, "type_name", type_name_str);
> >
> >- ini::simple_property_sptr type_name_regex_prop =
> >- is_simple_property(section.find_property("type_name_regexp"));
> > regex_t_sptr type_name_regex;
> >- if (type_name_regex_prop)
> >- type_name_regex =
> >- regex::compile(type_name_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "type_name_regexp", type_name_regex);
> >
> > result.reset(new variable_suppression(label_str,
> > name_str,
> >@@ -4246,32 +4168,17 @@ read_file_suppression(const ini::config::section& section)
> > string label_str;
> > maybe_get_string_prop(section, "label", label_str);
> >
> >- ini::simple_property_sptr file_name_regex_prop =
> >- is_simple_property(section.find_property("file_name_regexp"));
> > regex_t_sptr file_name_regex;
> >- if (file_name_regex_prop)
> >- file_name_regex =
> >- regex::compile(file_name_regex_prop->get_value()->as_string());
> >-
> >- ini::simple_property_sptr file_name_not_regex_prop =
> >- is_simple_property(section.find_property("file_name_not_regexp"));
> >- regex_t_sptr file_name_not_regex;
> >- if (file_name_not_regex_prop)
> >- file_name_not_regex =
> >- regex::compile(file_name_not_regex_prop->get_value()->as_string());
> >-
> >- ini::simple_property_sptr soname_regex_prop =
> >- is_simple_property(section.find_property("soname_regexp"));
> >+ maybe_get_regex_prop(section, "file_name_regexp", file_name_regex);
> >+
> >+ regex_t_sptr file_name_not_regex;
> >+ maybe_get_regex_prop(section, "file_name_not_regexp", file_name_not_regex);
> >+
> > regex_t_sptr soname_regex;
> >- if (soname_regex_prop)
> >- soname_regex = regex::compile(soname_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "soname_regexp", soname_regex);
> >
> >- ini::simple_property_sptr soname_not_regex_prop =
> >- is_simple_property(section.find_property("soname_not_regexp"));
> > regex_t_sptr soname_not_regex;
> >- if (soname_not_regex_prop)
> >- soname_not_regex =
> >- regex::compile(soname_not_regex_prop->get_value()->as_string());
> >+ maybe_get_regex_prop(section, "soname_not_regexp", soname_not_regex);
> >
> > result.reset(new file_suppression(label_str,
> > file_name_regex,
> >--
> >2.26.2.303.gf8c07b1a785-goog
> >
next prev parent reply other threads:[~2020-04-27 16:59 UTC|newest]
Thread overview: 120+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-04-23 15:44 [PATCH 00/21] Simplify regex and suppression parsing Giuliano Procida
2020-04-23 15:44 ` [PATCH 01/21] Move regex definitions to own files Giuliano Procida
2020-04-23 15:44 ` [PATCH 02/21] Move libxml bits out of abg-sptr-utils.h Giuliano Procida
2020-04-23 15:44 ` [PATCH 03/21] Simplify generation of symbol whitelist regex Giuliano Procida
2020-04-23 15:44 ` [PATCH 04/21] Escape names used in symbol whitelisting regex Giuliano Procida
2020-04-23 15:44 ` [PATCH 05/21] abg-suppression.cc: More uniform variable naming Giuliano Procida
2020-04-23 15:44 ` [PATCH 06/21] diff suppression: Fix handling of change kinds Giuliano Procida
2020-04-23 15:44 ` [PATCH 07/21] Add POSIX regex wrapper functions Giuliano Procida
2020-04-23 18:07 ` [PATCH v2 " Giuliano Procida
2020-04-23 15:44 ` [PATCH 08/21] Use regex::compile wrapper instead of regcomp Giuliano Procida
2020-04-23 15:44 ` [PATCH 09/21] Use regex::match wrapper instead of regexec Giuliano Procida
2020-04-23 18:02 ` [PATCH v2 " Giuliano Procida
2020-04-23 15:44 ` [PATCH 10/21] Refactor read_parameter_spec_from_string logic Giuliano Procida
2020-04-23 15:44 ` [PATCH 11/21] Compile suppression regexes earlier Giuliano Procida
2020-04-23 15:44 ` [PATCH 12/21] Reduce direct access to suppression priv_ members Giuliano Procida
2020-04-23 15:44 ` [PATCH 13/21] Move match methods from priv to suppression_base Giuliano Procida
2020-04-23 15:44 ` [PATCH 14/21] Remove suppression types' priv class methods Giuliano Procida
2020-04-23 15:44 ` [PATCH 15/21] abg-suppression.cc: More consistent regex matching Giuliano Procida
2020-04-23 15:44 ` [PATCH 16/21] abg-tools-utils.cc: Assert generated regexes OK Giuliano Procida
2020-04-23 15:44 ` [PATCH 17/21] Refactor suppression property string parsing Giuliano Procida
2020-04-23 15:44 ` [PATCH 18/21] Refactor suppression property regex parsing Giuliano Procida
2020-04-23 15:44 ` [PATCH 19/21] Warn if user-supplied regexes fail to compile Giuliano Procida
2020-04-23 18:04 ` [PATCH v2 " Giuliano Procida
2020-04-23 15:44 ` [PATCH 20/21] Default construct suppression types Giuliano Procida
2020-04-23 15:44 ` [PATCH 21/21] Remove unused suppression type priv constructors Giuliano Procida
2020-04-23 18:11 ` [PATCH 00/21] Simplify regex and suppression parsing Giuliano Procida
2020-04-24 8:54 ` Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 00/21]Simplify " Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 01/21] Move regex definitions to own files Giuliano Procida
2020-04-27 10:52 ` Matthias Maennich
2020-04-29 14:19 ` Dodji Seketeli
2020-04-29 14:35 ` Giuliano Procida
2020-05-04 9:19 ` Dodji Seketeli
2020-04-24 9:21 ` [PATCH v3 02/21] Move libxml bits out of abg-sptr-utils.h Giuliano Procida
2020-04-27 10:53 ` Matthias Maennich
2020-04-29 14:30 ` Dodji Seketeli
2020-05-04 9:20 ` Dodji Seketeli
2020-04-24 9:21 ` [PATCH v3 03/21] Simplify generation of symbol whitelist regex Giuliano Procida
2020-04-27 11:01 ` Matthias Maennich
2020-04-27 15:31 ` Giuliano Procida
2020-05-04 9:20 ` Dodji Seketeli
2020-04-24 9:21 ` [PATCH v3 04/21] Escape names used in symbol whitelisting regex Giuliano Procida
2020-04-27 11:14 ` Matthias Maennich
2020-04-27 15:37 ` Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 05/21] abg-suppression.cc: More uniform variable naming Giuliano Procida
2020-04-27 11:17 ` Matthias Maennich
2020-04-24 9:21 ` [PATCH v3 06/21] diff suppression: Fix handling of change kinds Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 07/21] Add POSIX regex wrapper functions Giuliano Procida
2020-04-27 11:23 ` Matthias Maennich
2020-04-24 9:21 ` [PATCH v3 08/21] Use regex::compile wrapper instead of regcomp Giuliano Procida
2020-04-27 11:34 ` Matthias Maennich
2020-04-27 16:01 ` Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 09/21] Use regex::match wrapper instead of regexec Giuliano Procida
2020-04-27 11:38 ` Matthias Maennich
2020-04-24 9:21 ` [PATCH v3 10/21] Refactor read_parameter_spec_from_string logic Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 11/21] Compile suppression regexes earlier Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 12/21] Reduce direct access to suppression priv_ members Giuliano Procida
2020-04-27 11:54 ` Matthias Maennich
2020-04-24 9:21 ` [PATCH v3 13/21] Move match methods from priv to suppression_base Giuliano Procida
2020-04-27 11:55 ` Matthias Maennich
2020-04-24 9:21 ` [PATCH v3 14/21] Remove suppression types' priv class methods Giuliano Procida
2020-04-27 11:57 ` Matthias Maennich
2020-04-24 9:21 ` [PATCH v3 15/21] abg-suppression.cc: More consistent regex matching Giuliano Procida
2020-04-27 12:07 ` Matthias Maennich
2020-04-27 16:18 ` Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 16/21] abg-tools-utils.cc: Assert generated regexes OK Giuliano Procida
2020-04-27 12:08 ` Matthias Maennich
2020-04-27 16:21 ` Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 17/21] Refactor suppression property string parsing Giuliano Procida
2020-04-27 12:17 ` Matthias Maennich
2020-04-27 16:42 ` Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 18/21] Refactor suppression property regex parsing Giuliano Procida
2020-04-27 14:55 ` Matthias Maennich
2020-04-27 16:59 ` Giuliano Procida [this message]
2020-04-24 9:21 ` [PATCH v3 19/21] Warn if user-supplied regexes fail to compile Giuliano Procida
2020-04-27 15:36 ` Matthias Maennich
2020-05-01 8:49 ` Giuliano Procida
2020-04-24 9:21 ` [PATCH v3 20/21] Default construct suppression types Giuliano Procida
2020-04-27 15:40 ` Matthias Maennich
2020-04-24 9:21 ` [PATCH v3 21/21] Remove unused suppression type priv constructors Giuliano Procida
2020-04-27 15:41 ` Matthias Maennich
2020-05-04 12:34 ` [PATCH v4 00/15] Simplify regex and suppression parsing Giuliano Procida
2020-05-04 12:34 ` [PATCH v4 01/15] Tidy #includes in a few files Giuliano Procida
2020-05-04 12:49 ` Matthias Maennich
2020-05-11 13:24 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 02/15] Document ^_^ regex in generate_from_strings Giuliano Procida
2020-05-04 12:49 ` Matthias Maennich
2020-05-11 13:32 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 03/15] Escape names used in symbol whitelisting regex Giuliano Procida
2020-05-04 12:57 ` Matthias Maennich
2020-05-04 16:45 ` [PATCH v5 " Giuliano Procida
2020-05-11 13:59 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 04/15] abg-suppression.cc: More uniform variable naming Giuliano Procida
2020-05-11 14:04 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 05/15] diff suppression: Fix handling of change kinds Giuliano Procida
2020-05-04 13:04 ` Matthias Maennich
2020-05-11 14:15 ` Dodji Seketeli
2020-05-11 15:47 ` Giuliano Procida
2020-05-11 17:53 ` Dodji Seketeli
2020-05-12 9:54 ` Giuliano Procida
2020-05-12 10:14 ` [PATCH v5 05/15] Tidy checks for sufficient suppression properties Giuliano Procida
2020-05-12 16:11 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 06/15] Add POSIX regex wrapper functions Giuliano Procida
2020-05-11 16:37 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 07/15] Use regex::compile wrapper instead of regcomp Giuliano Procida
2020-05-11 16:38 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 08/15] Use regex::match wrapper instead of regexec Giuliano Procida
2020-05-12 16:35 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 09/15] Refactor read_parameter_spec_from_string logic Giuliano Procida
2020-05-13 7:51 ` Dodji Seketeli
2020-05-04 12:34 ` [PATCH v4 10/15] Compile suppression regexes earlier Giuliano Procida
2020-05-04 13:14 ` Matthias Maennich
2020-05-13 8:07 ` Dodji Seketeli
2020-05-13 15:36 ` Giuliano Procida
2020-05-04 12:34 ` [PATCH v4 11/15] Reduce direct access to suppression priv_ members Giuliano Procida
2020-05-04 12:34 ` [PATCH v4 12/15] Move match methods from priv to suppression_base Giuliano Procida
2020-05-04 12:34 ` [PATCH v4 13/15] Remove suppression type priv class methods Giuliano Procida
2020-05-04 12:34 ` [PATCH v4 14/15] abg-suppression.cc: More consistent regex matching Giuliano Procida
2020-05-04 13:17 ` Matthias Maennich
2020-05-04 12:34 ` [PATCH v4 15/15] abg-tools-utils.cc: Assert generated regexes OK Giuliano Procida
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=CAGvU0HkbREnxz6AMfTAd-JRwE+dWPfG57VjTk3zGMMcQ2k_WfQ@mail.gmail.com \
--to=gprocida@google.com \
--cc=dodji@seketeli.org \
--cc=kernel-team@android.com \
--cc=libabigail@sourceware.org \
--cc=maennich@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).