public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
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
> >

  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).