--- libreport.spec.in | 4 ++-- po/POTFILES.in | 4 ++-- src/gui-wizard-gtk/wizard.c | 9 ++++++-- src/include/run_event.h | 8 +++++++ src/include/workflow.h | 1 + src/lib/run_event.c | 23 ++++++++++++++++++++ src/lib/workflow.c | 41 ++++++++++++++++++++++++++++++++++++ src/workflows/Makefile.am | 8 +++---- src/workflows/report_Fedora.xml.in | 13 ------------ src/workflows/report_Upload.xml.in | 11 ---------- src/workflows/report_fedora.conf | 2 +- src/workflows/workflow_Fedora.xml.in | 13 ++++++++++++ src/workflows/workflow_Upload.xml.in | 11 ++++++++++ 13 files changed, 113 insertions(+), 35 deletions(-) delete mode 100644 src/workflows/report_Fedora.xml.in delete mode 100644 src/workflows/report_Upload.xml.in create mode 100644 src/workflows/workflow_Fedora.xml.in create mode 100644 src/workflows/workflow_Upload.xml.in
diff --git a/libreport.spec.in b/libreport.spec.in index 78f690e..3c915f6 100644 --- a/libreport.spec.in +++ b/libreport.spec.in @@ -403,11 +403,11 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{_bindir}/reporter-upload %{_sysconfdir}/libreport/events/report_Uploader.xml %config(noreplace) %{_sysconfdir}/libreport/events.d/uploader_event.conf -%{_sysconfdir}/libreport/workflows/report_Upload.xml +%{_sysconfdir}/libreport/workflows/workflow_Upload.xml
%files fedora %defattr(-,root,root,-) -%{_sysconfdir}/libreport/workflows/report_Fedora.xml +%{_sysconfdir}/libreport/workflows/workflow_Fedora.xml %config(noreplace) %{_sysconfdir}/libreport/workflows.d/report_fedora.conf
%changelog diff --git a/po/POTFILES.in b/po/POTFILES.in index 2dfe09e..b310941 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -40,5 +40,5 @@ src/plugins/report_uReport.xml.in src/plugins/rhbz.c src/plugins/ureport.c src/report-newt/report-newt.c -src/workflows/report_Fedora.xml.in -src/workflows/report_Upload.xml.in +src/workflows/workflow_Fedora.xml.in +src/workflows/workflow_Upload.xml.in diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 0891756..2907611 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -2464,10 +2464,15 @@ static void set_auto_event_chain(GtkButton *button, gpointer user_data) static void add_workflow_buttons(GtkBox *box, GHashTable *workflows, GCallback func) { gtk_container_foreach(GTK_CONTAINER(box), &remove_child_widget, NULL); - GList *keys = g_hash_table_get_keys(g_workflow_list); + + GHashTable *workflow_table = load_workflow_config_data_from_list( + list_possible_events_glist(g_dump_dir_name, "workflow"), + WORKFLOWS_DIR); + + GList *keys = g_hash_table_get_keys(workflow_table); while(keys) { - workflow_t *w = g_hash_table_lookup(g_workflow_list, keys->data); + workflow_t *w = g_hash_table_lookup(workflow_table, keys->data); char *btn_label = xasprintf("<b>%s</b>\n%s", wf_get_screen_name(w), wf_get_description(w)); GtkWidget *button = gtk_button_new_with_label(btn_label); GList *children = gtk_container_get_children(GTK_CONTAINER(button)); diff --git a/src/include/run_event.h b/src/include/run_event.h index bf94b5c..0afebc6 100644 --- a/src/include/run_event.h +++ b/src/include/run_event.h @@ -223,6 +223,14 @@ int run_event_stdio_ask_yes_no_yesforever(const char *msg, const char *key, void */ char *run_event_stdio_ask_password(const char *msg, void *param);
+/* + * Returns a list of possible events for given problem directory + * + * @param problem_dir_name the name of the problem directory + * @param pfx the prefix of the events "report", "workflow" + */ +GList *list_possible_events_glist(const char *problem_dir_name, + const char *pfx); #ifdef __cplusplus } #endif diff --git a/src/include/workflow.h b/src/include/workflow.h index e60d6b5..db8c65d 100644 --- a/src/include/workflow.h +++ b/src/include/workflow.h @@ -43,5 +43,6 @@ void wf_set_screen_name(workflow_t *w, const char* screen_name); void wf_set_description(workflow_t *w, const char* description); void wf_set_long_desc(workflow_t *w, const char* long_desc); void wf_add_event(workflow_t *w, event_config_t *ec); +GHashTable *load_workflow_config_data_from_list(GList *wf_names, const char *path);
#endif diff --git a/src/lib/run_event.c b/src/lib/run_event.c index c8ccfa5..a60913e 100644 --- a/src/lib/run_event.c +++ b/src/lib/run_event.c @@ -684,6 +684,29 @@ char *list_possible_events(struct dump_dir *dd, const char *dump_dir_name, const return strbuf_free_nobuf(result); }
+GList *list_possible_events_glist(const char *problem_dir_name, + const char *pfx) +{ + struct dump_dir *dd = dd_opendir(problem_dir_name, DD_OPEN_READONLY); + GList *l = NULL; + char *events = list_possible_events(dd, problem_dir_name, pfx); + char *start = events; + char *end = strchr(events, '\n'); + + while(end) + { + *end = '\0'; + l = g_list_append(l, xstrdup(start)); + start = end + 1; + end = strchr(start, '\n'); + } + + dd_close(dd); + free(events); + + return l; +} + void run_event_stdio_alert(const char *msg, void *param) { alert(msg); diff --git a/src/lib/workflow.c b/src/lib/workflow.c index 1fba64c..35fa904 100644 --- a/src/lib/workflow.c +++ b/src/lib/workflow.c @@ -72,6 +72,47 @@ workflow_t *get_workflow(const char *name) return g_hash_table_lookup(g_workflow_list, name); }
+static gint file_obj_cmp(file_obj_t *file, const char *filename) +{ + gint cmp = strcmp(file->filename, filename); + return cmp; +} + +static void load_workflow_config(const char *name, + GList *available_wfs, + GHashTable *wf_list) +{ + GList *wf_file = g_list_find_custom(available_wfs, name, (GCompareFunc)file_obj_cmp); + if (wf_file) + { + file_obj_t *file = (file_obj_t *)wf_file->data; + workflow_t *workflow = new_workflow(file->filename); + load_workflow_description_from_file(workflow, file->fullpath); + VERB1 log("Adding '%s' to workflows\n", file->filename); + g_hash_table_insert(wf_list, file->filename, workflow); + } +} + +GHashTable *load_workflow_config_data_from_list(GList *wf_names, + const char *path) +{ + GList *wfs = wf_names; + GHashTable *wf_list = g_hash_table_new_full( + g_str_hash, + g_str_equal, + g_free, + (GDestroyNotify) free_workflow + ); + GList *workflow_files = get_file_list(path, "xml"); + while(wfs) + { + load_workflow_config((const char *)wfs->data, workflow_files, wf_list); + wfs = g_list_next(wfs); + } + + return wf_list; +} + GHashTable *load_workflow_config_data(const char *path) { if (g_workflow_list) diff --git a/src/workflows/Makefile.am b/src/workflows/Makefile.am index 3cd0797..98fa1a4 100644 --- a/src/workflows/Makefile.am +++ b/src/workflows/Makefile.am @@ -1,8 +1,8 @@ workflowsdir = $(WORKFLOWS_DIR)
dist_workflows_DATA = \ - report_Fedora.xml \ - report_Upload.xml + workflow_Fedora.xml \ + workflow_Upload.xml
workflowsconfdir = $(WORKFLOWS_CONF_DIR)
@@ -12,5 +12,5 @@ dist_workflowsconf_DATA =\ @INTLTOOL_XML_RULE@
EXTRA_DIST = \ - report_Fedora.xml.in \ - report_Upload.xml.in + workflow_Fedora.xml.in \ + workflow_Upload.xml.in diff --git a/src/workflows/report_Fedora.xml.in b/src/workflows/report_Fedora.xml.in deleted file mode 100644 index f9df177..0000000 --- a/src/workflows/report_Fedora.xml.in +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<workflow> - <_name>Report to Fedora</_name> - <_description>Process the report using the Fedora infrastructure</_description> - - <events> - <event>report_uReport</event> - <event>collect_*</event> - <event>analyze_CCpp</event> - <event>report_Bugzilla</event> - <event>post_report</event> - </events> -</workflow> diff --git a/src/workflows/report_Upload.xml.in b/src/workflows/report_Upload.xml.in deleted file mode 100644 index 3965f99..0000000 --- a/src/workflows/report_Upload.xml.in +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<workflow> - <_name>Upload the problem data to a server</_name> - <_description>Analyze the problem locally and upload the data via scp or ftp</_description> - - <events> - <event>collect_*</event> - <event>analyze_CCpp</event> - <event>report_Uploader</event> - </events> -</workflow> \ No newline at end of file diff --git a/src/workflows/report_fedora.conf b/src/workflows/report_fedora.conf index 9dd86ce..8c58f12 100644 --- a/src/workflows/report_fedora.conf +++ b/src/workflows/report_fedora.conf @@ -1,3 +1,3 @@ -EVENT=report_Fedora analyzer=CCpp +EVENT=workflow_Fedora analyzer=CCpp # this is just a meta event which consists of other events # the list is defined in the xml file diff --git a/src/workflows/workflow_Fedora.xml.in b/src/workflows/workflow_Fedora.xml.in new file mode 100644 index 0000000..f9df177 --- /dev/null +++ b/src/workflows/workflow_Fedora.xml.in @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<workflow> + <_name>Report to Fedora</_name> + <_description>Process the report using the Fedora infrastructure</_description> + + <events> + <event>report_uReport</event> + <event>collect_*</event> + <event>analyze_CCpp</event> + <event>report_Bugzilla</event> + <event>post_report</event> + </events> +</workflow> diff --git a/src/workflows/workflow_Upload.xml.in b/src/workflows/workflow_Upload.xml.in new file mode 100644 index 0000000..3965f99 --- /dev/null +++ b/src/workflows/workflow_Upload.xml.in @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<workflow> + <_name>Upload the problem data to a server</_name> + <_description>Analyze the problem locally and upload the data via scp or ftp</_description> + + <events> + <event>collect_*</event> + <event>analyze_CCpp</event> + <event>report_Uploader</event> + </events> +</workflow> \ No newline at end of file
It works! Push it!
On Monday 10 of December 2012 10:19:39 Jiri Moskovcak wrote:
libreport.spec.in | 4 ++-- po/POTFILES.in | 4 ++-- src/gui-wizard-gtk/wizard.c | 9 ++++++-- src/include/run_event.h | 8 +++++++ src/include/workflow.h | 1 + src/lib/run_event.c | 23 ++++++++++++++++++++ src/lib/workflow.c | 41 ++++++++++++++++++++++++++++++++++++ src/workflows/Makefile.am | 8 +++---- src/workflows/report_Fedora.xml.in | 13 ------------ src/workflows/report_Upload.xml.in | 11 ---------- src/workflows/report_fedora.conf | 2 +- src/workflows/workflow_Fedora.xml.in | 13 ++++++++++++ src/workflows/workflow_Upload.xml.in | 11 ++++++++++ 13 files changed, 113 insertions(+), 35 deletions(-) delete mode 100644 src/workflows/report_Fedora.xml.in delete mode 100644 src/workflows/report_Upload.xml.in create mode 100644 src/workflows/workflow_Fedora.xml.in create mode 100644 src/workflows/workflow_Upload.xml.in
diff --git a/libreport.spec.in b/libreport.spec.in index 78f690e..3c915f6 100644 --- a/libreport.spec.in +++ b/libreport.spec.in @@ -403,11 +403,11 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : %{_bindir}/reporter-upload %{_sysconfdir}/libreport/events/report_Uploader.xml %config(noreplace) %{_sysconfdir}/libreport/events.d/uploader_event.conf -%{_sysconfdir}/libreport/workflows/report_Upload.xml +%{_sysconfdir}/libreport/workflows/workflow_Upload.xml
%files fedora %defattr(-,root,root,-) -%{_sysconfdir}/libreport/workflows/report_Fedora.xml +%{_sysconfdir}/libreport/workflows/workflow_Fedora.xml %config(noreplace) %{_sysconfdir}/libreport/workflows.d/report_fedora.conf
%changelog diff --git a/po/POTFILES.in b/po/POTFILES.in index 2dfe09e..b310941 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -40,5 +40,5 @@ src/plugins/report_uReport.xml.in src/plugins/rhbz.c src/plugins/ureport.c src/report-newt/report-newt.c -src/workflows/report_Fedora.xml.in -src/workflows/report_Upload.xml.in +src/workflows/workflow_Fedora.xml.in +src/workflows/workflow_Upload.xml.in diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c index 0891756..2907611 100644 --- a/src/gui-wizard-gtk/wizard.c +++ b/src/gui-wizard-gtk/wizard.c @@ -2464,10 +2464,15 @@ static void set_auto_event_chain(GtkButton *button, gpointer user_data) static void add_workflow_buttons(GtkBox *box, GHashTable *workflows, GCallback func) { gtk_container_foreach(GTK_CONTAINER(box), &remove_child_widget, NULL);
- GList *keys = g_hash_table_get_keys(g_workflow_list);
- GHashTable *workflow_table = load_workflow_config_data_from_list(
list_possible_events_glist(g_dump_dir_name, "workflow"),
WORKFLOWS_DIR);
- GList *keys = g_hash_table_get_keys(workflow_table); while(keys) {
workflow_t *w = g_hash_table_lookup(g_workflow_list, keys->data);
workflow_t *w = g_hash_table_lookup(workflow_table, keys->data); char *btn_label = xasprintf("<b>%s</b>\n%s", wf_get_screen_name(w), wf_get_description(w)); GtkWidget *button = gtk_button_new_with_label(btn_label); GList *children = gtk_container_get_children(GTK_CONTAINER(button));
diff --git a/src/include/run_event.h b/src/include/run_event.h index bf94b5c..0afebc6 100644 --- a/src/include/run_event.h +++ b/src/include/run_event.h @@ -223,6 +223,14 @@ int run_event_stdio_ask_yes_no_yesforever(const char *msg, const char *key, void */ char *run_event_stdio_ask_password(const char *msg, void *param);
+/*
- Returns a list of possible events for given problem directory
- @param problem_dir_name the name of the problem directory
- @param pfx the prefix of the events "report", "workflow"
- */
+GList *list_possible_events_glist(const char *problem_dir_name,
const char *pfx);
#ifdef __cplusplus } #endif diff --git a/src/include/workflow.h b/src/include/workflow.h index e60d6b5..db8c65d 100644 --- a/src/include/workflow.h +++ b/src/include/workflow.h @@ -43,5 +43,6 @@ void wf_set_screen_name(workflow_t *w, const char* screen_name); void wf_set_description(workflow_t *w, const char* description); void wf_set_long_desc(workflow_t *w, const char* long_desc); void wf_add_event(workflow_t *w, event_config_t *ec); +GHashTable *load_workflow_config_data_from_list(GList *wf_names, const char *path);
#endif diff --git a/src/lib/run_event.c b/src/lib/run_event.c index c8ccfa5..a60913e 100644 --- a/src/lib/run_event.c +++ b/src/lib/run_event.c @@ -684,6 +684,29 @@ char *list_possible_events(struct dump_dir *dd, const char *dump_dir_name, const return strbuf_free_nobuf(result); }
+GList *list_possible_events_glist(const char *problem_dir_name,
const char *pfx)
+{
- struct dump_dir *dd = dd_opendir(problem_dir_name, DD_OPEN_READONLY);
- GList *l = NULL;
- char *events = list_possible_events(dd, problem_dir_name, pfx);
- char *start = events;
- char *end = strchr(events, '\n');
- while(end)
- {
*end = '\0';
l = g_list_append(l, xstrdup(start));
start = end + 1;
end = strchr(start, '\n');
- }
- dd_close(dd);
- free(events);
- return l;
+}
void run_event_stdio_alert(const char *msg, void *param) { alert(msg); diff --git a/src/lib/workflow.c b/src/lib/workflow.c index 1fba64c..35fa904 100644 --- a/src/lib/workflow.c +++ b/src/lib/workflow.c @@ -72,6 +72,47 @@ workflow_t *get_workflow(const char *name) return g_hash_table_lookup(g_workflow_list, name); }
+static gint file_obj_cmp(file_obj_t *file, const char *filename) +{
- gint cmp = strcmp(file->filename, filename);
- return cmp;
+}
+static void load_workflow_config(const char *name,
GList *available_wfs,
GHashTable *wf_list)
+{
- GList *wf_file = g_list_find_custom(available_wfs, name, (GCompareFunc)file_obj_cmp);
- if (wf_file)
- {
file_obj_t *file = (file_obj_t *)wf_file->data;
workflow_t *workflow = new_workflow(file->filename);
load_workflow_description_from_file(workflow, file->fullpath);
VERB1 log("Adding '%s' to workflows\n", file->filename);
g_hash_table_insert(wf_list, file->filename, workflow);
- }
+}
+GHashTable *load_workflow_config_data_from_list(GList *wf_names,
const char *path)
+{
- GList *wfs = wf_names;
- GHashTable *wf_list = g_hash_table_new_full(
g_str_hash,
g_str_equal,
g_free,
(GDestroyNotify) free_workflow
);
- GList *workflow_files = get_file_list(path, "xml");
- while(wfs)
- {
load_workflow_config((const char *)wfs->data, workflow_files, wf_list);
wfs = g_list_next(wfs);
- }
- return wf_list;
+}
GHashTable *load_workflow_config_data(const char *path) { if (g_workflow_list) diff --git a/src/workflows/Makefile.am b/src/workflows/Makefile.am index 3cd0797..98fa1a4 100644 --- a/src/workflows/Makefile.am +++ b/src/workflows/Makefile.am @@ -1,8 +1,8 @@ workflowsdir = $(WORKFLOWS_DIR)
dist_workflows_DATA = \
- report_Fedora.xml \
- report_Upload.xml
- workflow_Fedora.xml \
- workflow_Upload.xml
workflowsconfdir = $(WORKFLOWS_CONF_DIR)
@@ -12,5 +12,5 @@ dist_workflowsconf_DATA =\ @INTLTOOL_XML_RULE@
EXTRA_DIST = \
- report_Fedora.xml.in \
- report_Upload.xml.in
- workflow_Fedora.xml.in \
- workflow_Upload.xml.in
diff --git a/src/workflows/report_Fedora.xml.in b/src/workflows/report_Fedora.xml.in deleted file mode 100644 index f9df177..0000000 --- a/src/workflows/report_Fedora.xml.in +++ /dev/null @@ -1,13 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<workflow>
- <_name>Report to Fedora</_name>
- <_description>Process the report using the Fedora infrastructure</_description>
<events>
<event>report_uReport</event>
<event>collect_*</event>
<event>analyze_CCpp</event>
<event>report_Bugzilla</event>
<event>post_report</event>
</events>
-</workflow> diff --git a/src/workflows/report_Upload.xml.in b/src/workflows/report_Upload.xml.in deleted file mode 100644 index 3965f99..0000000 --- a/src/workflows/report_Upload.xml.in +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<workflow>
- <_name>Upload the problem data to a server</_name>
- <_description>Analyze the problem locally and upload the data via scp or ftp</_description>
<events>
<event>collect_*</event>
<event>analyze_CCpp</event>
<event>report_Uploader</event>
</events>
-</workflow> \ No newline at end of file diff --git a/src/workflows/report_fedora.conf b/src/workflows/report_fedora.conf index 9dd86ce..8c58f12 100644 --- a/src/workflows/report_fedora.conf +++ b/src/workflows/report_fedora.conf @@ -1,3 +1,3 @@ -EVENT=report_Fedora analyzer=CCpp +EVENT=workflow_Fedora analyzer=CCpp # this is just a meta event which consists of other events # the list is defined in the xml file diff --git a/src/workflows/workflow_Fedora.xml.in b/src/workflows/workflow_Fedora.xml.in new file mode 100644 index 0000000..f9df177 --- /dev/null +++ b/src/workflows/workflow_Fedora.xml.in @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="UTF-8" ?> +<workflow>
- <_name>Report to Fedora</_name>
- <_description>Process the report using the Fedora infrastructure</_description>
<events>
<event>report_uReport</event>
<event>collect_*</event>
<event>analyze_CCpp</event>
<event>report_Bugzilla</event>
<event>post_report</event>
</events>
+</workflow> diff --git a/src/workflows/workflow_Upload.xml.in b/src/workflows/workflow_Upload.xml.in new file mode 100644 index 0000000..3965f99 --- /dev/null +++ b/src/workflows/workflow_Upload.xml.in @@ -0,0 +1,11 @@ +<?xml version="1.0" encoding="UTF-8"?> +<workflow>
- <_name>Upload the problem data to a server</_name>
- <_description>Analyze the problem locally and upload the data via scp or ftp</_description>
<events>
<event>collect_*</event>
<event>analyze_CCpp</event>
<event>report_Uploader</event>
</events>
+</workflow> \ No newline at end of file
crash-catcher@lists.fedorahosted.org