]> git.ipfire.org Git - thirdparty/elfutils.git/commitdiff
debuginfod: optimize regular expressions in groom()
authorJosef Cejka <jcejka@suse.de>
Wed, 3 Aug 2022 11:33:21 +0000 (13:33 +0200)
committerFrank Ch. Eigler <fche@redhat.com>
Wed, 3 Aug 2022 14:25:11 +0000 (10:25 -0400)
Check if applying of -I and -X during grooming is enabled
before the regular expressions are matched.

Signed-off-by: Josef Cejka <jcejka@suse.de>
debuginfod/ChangeLog
debuginfod/debuginfod.cxx

index 2ff63e22feb8d609a045a49dca721498a33e4def..a8b5d7f43574b6b793c54c0209a585785f3ef084 100644 (file)
@@ -1,3 +1,7 @@
+2022-08-02  Josef Cejka <jcejka@suse.de>
+
+       * debuginfod.cxx (groom): Don't evaluate regex unless needed.
+
 2022-07-29  Josef Cejka <jcejka@suse.de>
 
        * debuginfod.cxx: Create db indexes for fast delete while grooming.
index 303ffe00c272db17c4671f80ccbf1a56377f9f53..a089d0bd4621a7247d8a9912aba6d5c64bc9f677 100644 (file)
@@ -3580,11 +3580,17 @@ void groom()
       int64_t fileid = sqlite3_column_int64 (files, 1);
       const char* filename = ((const char*) sqlite3_column_text (files, 2) ?: "");
       struct stat s;
-      bool reg_include = !regexec (&file_include_regex, filename, 0, 0, 0);
-      bool reg_exclude = !regexec (&file_exclude_regex, filename, 0, 0, 0);
+      bool regex_file_drop = 0;
+
+      if (regex_groom)
+        {
+          bool reg_include = !regexec (&file_include_regex, filename, 0, 0, 0);
+          bool reg_exclude = !regexec (&file_exclude_regex, filename, 0, 0, 0);
+          regex_file_drop = reg_exclude && !reg_include;
+        }
 
       rc = stat(filename, &s);
-      if ( (regex_groom && reg_exclude && !reg_include) ||  rc < 0 || (mtime != (int64_t) s.st_mtime) )
+      if ( regex_file_drop ||  rc < 0 || (mtime != (int64_t) s.st_mtime) )
         {
           if (verbose > 2)
             obatched(clog) << "groom: stale file=" << filename << " mtime=" << mtime << endl;