|
Jiri Moskovcak |
578f7c7 |
From 625a3500d1292068ce5f8cfc56253c4d6d6defea Mon Sep 17 00:00:00 2001
|
|
Jiri Moskovcak |
578f7c7 |
From: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Jiri Moskovcak |
578f7c7 |
Date: Tue, 30 Aug 2011 14:05:40 +0200
|
|
Jiri Moskovcak |
578f7c7 |
Subject: [PATCH 2/2] wizard: support shell glob patterns in .xml item
|
|
Jiri Moskovcak |
578f7c7 |
selectors
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
We used to support "*" only. Example:
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
<requires-items>backtrace</requires-items>
|
|
Jiri Moskovcak |
578f7c7 |
<exclude-items-by-default/>
|
|
Jiri Moskovcak |
578f7c7 |
<exclude-items-always>*</exclude-items-always>
|
|
Jiri Moskovcak |
578f7c7 |
<exclude-binary-items>yes</exclude-binary-items>
|
|
Jiri Moskovcak |
578f7c7 |
<include-items-by-default/>
|
|
Jiri Moskovcak |
578f7c7 |
<minimal-rating>0</minimal-rating>
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
The patch below adds support for patterns like *.txt, abc*
|
|
Jiri Moskovcak |
578f7c7 |
As a consequence, special-casing code is removed.
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
|
|
Jiri Moskovcak |
578f7c7 |
---
|
|
Jiri Moskovcak |
578f7c7 |
src/gui-wizard-gtk/wizard.c | 24 ++++++------------------
|
|
Jiri Moskovcak |
578f7c7 |
src/include/internal_libreport.h | 2 ++
|
|
Jiri Moskovcak |
578f7c7 |
src/lib/is_in_comma_separated_list.c | 20 ++++++++++++++++++++
|
|
Jiri Moskovcak |
578f7c7 |
src/lib/problem_data.c | 2 +-
|
|
Jiri Moskovcak |
578f7c7 |
4 files changed, 29 insertions(+), 19 deletions(-)
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
|
|
Jiri Moskovcak |
578f7c7 |
index a814278..c313bcb 100644
|
|
Jiri Moskovcak |
578f7c7 |
--- a/src/gui-wizard-gtk/wizard.c
|
|
Jiri Moskovcak |
578f7c7 |
+++ b/src/gui-wizard-gtk/wizard.c
|
|
Jiri Moskovcak |
578f7c7 |
@@ -1846,18 +1846,6 @@ static void on_page_prepare(GtkAssistant *assistant, GtkWidget *page, gpointer u
|
|
Jiri Moskovcak |
578f7c7 |
/* Based on selected reporter, update item checkboxes */
|
|
Jiri Moskovcak |
578f7c7 |
event_config_t *cfg = get_event_config(g_reporter_events_selected ? g_reporter_events_selected : "");
|
|
Jiri Moskovcak |
578f7c7 |
//log("%s: event:'%s', cfg:'%p'", __func__, g_reporter_events_selected, cfg);
|
|
Jiri Moskovcak |
578f7c7 |
- int allowed_by_reporter = 1;
|
|
Jiri Moskovcak |
578f7c7 |
- int default_by_reporter = 1;
|
|
Jiri Moskovcak |
578f7c7 |
- if (cfg)
|
|
Jiri Moskovcak |
578f7c7 |
- {
|
|
Jiri Moskovcak |
578f7c7 |
- /* Default settings are... */
|
|
Jiri Moskovcak |
578f7c7 |
- if (cfg->ec_exclude_items_always && strcmp(cfg->ec_exclude_items_always, "*") == 0)
|
|
Jiri Moskovcak |
578f7c7 |
- allowed_by_reporter = 0;
|
|
Jiri Moskovcak |
578f7c7 |
- default_by_reporter = allowed_by_reporter;
|
|
Jiri Moskovcak |
578f7c7 |
- if (cfg->ec_exclude_items_by_default && strcmp(cfg->ec_exclude_items_by_default, "*") == 0)
|
|
Jiri Moskovcak |
578f7c7 |
- default_by_reporter = 0;
|
|
Jiri Moskovcak |
578f7c7 |
- }
|
|
Jiri Moskovcak |
578f7c7 |
-
|
|
Jiri Moskovcak |
578f7c7 |
GHashTableIter iter;
|
|
Jiri Moskovcak |
578f7c7 |
char *name;
|
|
Jiri Moskovcak |
578f7c7 |
struct problem_item *item;
|
|
Jiri Moskovcak |
578f7c7 |
@@ -1865,28 +1853,28 @@ static void on_page_prepare(GtkAssistant *assistant, GtkWidget *page, gpointer u
|
|
Jiri Moskovcak |
578f7c7 |
while (g_hash_table_iter_next(&iter, (void**)&name, (void**)&item))
|
|
Jiri Moskovcak |
578f7c7 |
{
|
|
Jiri Moskovcak |
578f7c7 |
/* Decide whether item is allowed, required, and what's the default */
|
|
Jiri Moskovcak |
578f7c7 |
- item->allowed_by_reporter = allowed_by_reporter;
|
|
Jiri Moskovcak |
578f7c7 |
+ item->allowed_by_reporter = 1;
|
|
Jiri Moskovcak |
578f7c7 |
if (cfg)
|
|
Jiri Moskovcak |
578f7c7 |
{
|
|
Jiri Moskovcak |
578f7c7 |
- if (is_in_comma_separated_list(name, cfg->ec_exclude_items_always))
|
|
Jiri Moskovcak |
578f7c7 |
+ if (is_in_comma_separated_list_of_glob_patterns(name, cfg->ec_exclude_items_always))
|
|
Jiri Moskovcak |
578f7c7 |
item->allowed_by_reporter = 0;
|
|
Jiri Moskovcak |
578f7c7 |
if ((item->flags & CD_FLAG_BIN) && cfg->ec_exclude_binary_items)
|
|
Jiri Moskovcak |
578f7c7 |
item->allowed_by_reporter = 0;
|
|
Jiri Moskovcak |
578f7c7 |
}
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
- item->default_by_reporter = item->allowed_by_reporter ? default_by_reporter : 0;
|
|
Jiri Moskovcak |
578f7c7 |
+ item->default_by_reporter = item->allowed_by_reporter;
|
|
Jiri Moskovcak |
578f7c7 |
if (cfg)
|
|
Jiri Moskovcak |
578f7c7 |
{
|
|
Jiri Moskovcak |
578f7c7 |
- if (is_in_comma_separated_list(name, cfg->ec_exclude_items_by_default))
|
|
Jiri Moskovcak |
578f7c7 |
+ if (is_in_comma_separated_list_of_glob_patterns(name, cfg->ec_exclude_items_by_default))
|
|
Jiri Moskovcak |
578f7c7 |
item->default_by_reporter = 0;
|
|
Jiri Moskovcak |
578f7c7 |
- if (is_in_comma_separated_list(name, cfg->ec_include_items_by_default))
|
|
Jiri Moskovcak |
578f7c7 |
+ if (is_in_comma_separated_list_of_glob_patterns(name, cfg->ec_include_items_by_default))
|
|
Jiri Moskovcak |
578f7c7 |
item->allowed_by_reporter = item->default_by_reporter = 1;
|
|
Jiri Moskovcak |
578f7c7 |
}
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
item->required_by_reporter = 0;
|
|
Jiri Moskovcak |
578f7c7 |
if (cfg)
|
|
Jiri Moskovcak |
578f7c7 |
{
|
|
Jiri Moskovcak |
578f7c7 |
- if (is_in_comma_separated_list(name, cfg->ec_requires_items))
|
|
Jiri Moskovcak |
578f7c7 |
+ if (is_in_comma_separated_list_of_glob_patterns(name, cfg->ec_requires_items))
|
|
Jiri Moskovcak |
578f7c7 |
item->default_by_reporter = item->allowed_by_reporter = item->required_by_reporter = 1;
|
|
Jiri Moskovcak |
578f7c7 |
}
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
diff --git a/src/include/internal_libreport.h b/src/include/internal_libreport.h
|
|
Jiri Moskovcak |
578f7c7 |
index 1fee5a3..afaf911 100644
|
|
Jiri Moskovcak |
578f7c7 |
--- a/src/include/internal_libreport.h
|
|
Jiri Moskovcak |
578f7c7 |
+++ b/src/include/internal_libreport.h
|
|
Jiri Moskovcak |
578f7c7 |
@@ -236,6 +236,8 @@ bool is_in_string_list(const char *name, char **v);
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
#define is_in_comma_separated_list libreport_is_in_comma_separated_list
|
|
Jiri Moskovcak |
578f7c7 |
bool is_in_comma_separated_list(const char *value, const char *list);
|
|
Jiri Moskovcak |
578f7c7 |
+#define is_in_comma_separated_list_of_glob_patterns libreport_is_in_comma_separated_list_of_glob_patterns
|
|
Jiri Moskovcak |
578f7c7 |
+bool is_in_comma_separated_list_of_glob_patterns(const char *value, const char *list);
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
/* Frees every element'd data using free(),
|
|
Jiri Moskovcak |
578f7c7 |
* then frees list itself using g_list_free(list):
|
|
Jiri Moskovcak |
578f7c7 |
diff --git a/src/lib/is_in_comma_separated_list.c b/src/lib/is_in_comma_separated_list.c
|
|
Jiri Moskovcak |
578f7c7 |
index 0afaf7b..6bec243 100644
|
|
Jiri Moskovcak |
578f7c7 |
--- a/src/lib/is_in_comma_separated_list.c
|
|
Jiri Moskovcak |
578f7c7 |
+++ b/src/lib/is_in_comma_separated_list.c
|
|
Jiri Moskovcak |
578f7c7 |
@@ -16,6 +16,7 @@
|
|
Jiri Moskovcak |
578f7c7 |
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
Jiri Moskovcak |
578f7c7 |
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
Jiri Moskovcak |
578f7c7 |
*/
|
|
Jiri Moskovcak |
578f7c7 |
+#include <fnmatch.h>
|
|
Jiri Moskovcak |
578f7c7 |
#include "internal_libreport.h"
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
bool is_in_comma_separated_list(const char *value, const char *list)
|
|
Jiri Moskovcak |
578f7c7 |
@@ -34,3 +35,22 @@ bool is_in_comma_separated_list(const char *value, const char *list)
|
|
Jiri Moskovcak |
578f7c7 |
}
|
|
Jiri Moskovcak |
578f7c7 |
return false;
|
|
Jiri Moskovcak |
578f7c7 |
}
|
|
Jiri Moskovcak |
578f7c7 |
+
|
|
Jiri Moskovcak |
578f7c7 |
+bool is_in_comma_separated_list_of_glob_patterns(const char *value, const char *list)
|
|
Jiri Moskovcak |
578f7c7 |
+{
|
|
Jiri Moskovcak |
578f7c7 |
+ if (!list)
|
|
Jiri Moskovcak |
578f7c7 |
+ return false;
|
|
Jiri Moskovcak |
578f7c7 |
+ while (*list)
|
|
Jiri Moskovcak |
578f7c7 |
+ {
|
|
Jiri Moskovcak |
578f7c7 |
+ const char *comma = strchrnul(list, ',');
|
|
Jiri Moskovcak |
578f7c7 |
+ char *pattern = xstrndup(list, comma - list);
|
|
Jiri Moskovcak |
578f7c7 |
+ int match = !fnmatch(pattern, value, /*flags:*/ 0);
|
|
Jiri Moskovcak |
578f7c7 |
+ free(pattern);
|
|
Jiri Moskovcak |
578f7c7 |
+ if (match)
|
|
Jiri Moskovcak |
578f7c7 |
+ return true;
|
|
Jiri Moskovcak |
578f7c7 |
+ if (!*comma)
|
|
Jiri Moskovcak |
578f7c7 |
+ break;
|
|
Jiri Moskovcak |
578f7c7 |
+ list = comma + 1;
|
|
Jiri Moskovcak |
578f7c7 |
+ }
|
|
Jiri Moskovcak |
578f7c7 |
+ return false;
|
|
Jiri Moskovcak |
578f7c7 |
+}
|
|
Jiri Moskovcak |
578f7c7 |
diff --git a/src/lib/problem_data.c b/src/lib/problem_data.c
|
|
Jiri Moskovcak |
578f7c7 |
index 7ff1d59..33227ed 100644
|
|
Jiri Moskovcak |
578f7c7 |
--- a/src/lib/problem_data.c
|
|
Jiri Moskovcak |
578f7c7 |
+++ b/src/lib/problem_data.c
|
|
Jiri Moskovcak |
578f7c7 |
@@ -433,10 +433,10 @@ static char **build_exclude_vector(const char *comma_separated_list)
|
|
Jiri Moskovcak |
578f7c7 |
|
|
Jiri Moskovcak |
578f7c7 |
problem_data_t *create_problem_data_for_reporting(const char *dump_dir_name)
|
|
Jiri Moskovcak |
578f7c7 |
{
|
|
Jiri Moskovcak |
578f7c7 |
- char **exclude_items = build_exclude_vector(getenv("EXCLUDE_FROM_REPORT"));
|
|
Jiri Moskovcak |
578f7c7 |
struct dump_dir *dd = dd_opendir(dump_dir_name, /*flags:*/ 0);
|
|
Jiri Moskovcak |
578f7c7 |
if (!dd)
|
|
Jiri Moskovcak |
578f7c7 |
return NULL; /* dd_opendir already emitted error msg */
|
|
Jiri Moskovcak |
578f7c7 |
+ char **exclude_items = build_exclude_vector(getenv("EXCLUDE_FROM_REPORT"));
|
|
Jiri Moskovcak |
578f7c7 |
problem_data_t *problem_data = new_problem_data();
|
|
Jiri Moskovcak |
578f7c7 |
load_problem_data_from_dump_dir(problem_data, dd, exclude_items);
|
|
Jiri Moskovcak |
578f7c7 |
dd_close(dd);
|
|
Jiri Moskovcak |
578f7c7 |
--
|
|
Jiri Moskovcak |
578f7c7 |
1.7.6.1
|
|
Jiri Moskovcak |
578f7c7 |
|