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