[LIBREPORT PATCH] bugzilla: make rhbz_new_bug() more legible

Jakub Filak jfilak at redhat.com
Thu May 30 09:50:05 UTC 2013


Related to rhbz#963020

Signed-off-by: Jakub Filak <jfilak at redhat.com>
---
 src/lib/abrt_xmlrpc.c | 69 ++++++++++++++++++++++++++++++++++++++
 src/lib/abrt_xmlrpc.h | 11 ++++++
 src/plugins/rhbz.c    | 92 +++++++++++++--------------------------------------
 3 files changed, 103 insertions(+), 69 deletions(-)

diff --git a/src/lib/abrt_xmlrpc.c b/src/lib/abrt_xmlrpc.c
index 545f6b8..b531d25 100644
--- a/src/lib/abrt_xmlrpc.c
+++ b/src/lib/abrt_xmlrpc.c
@@ -141,6 +141,75 @@ xmlrpc_value *abrt_xmlrpc_call_full_va(xmlrpc_env *env, struct abrt_xmlrpc *ax,
     return result;
 }
 
+xmlrpc_value *abrt_xmlrpc_array_new(xmlrpc_env *env)
+{
+    xmlrpc_value *params = xmlrpc_array_new(env);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+
+    return params;
+}
+
+void abrt_xmlrpc_array_append_string(xmlrpc_env *env, xmlrpc_value *array, const char *value)
+{
+    xmlrpc_value *val = xmlrpc_string_new(env, value);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+
+    xmlrpc_array_append_item(env, array, val);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+
+    xmlrpc_DECREF(val);
+}
+
+xmlrpc_value *abrt_xmlrpc_params_new(xmlrpc_env *env)
+{
+    xmlrpc_value *params = xmlrpc_struct_new(env);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+
+    return params;
+}
+
+void abrt_xmlrpc_params_add_string(xmlrpc_env *env, xmlrpc_value *params, const char *name, const char *value)
+{
+    xmlrpc_value *val = xmlrpc_string_new(env, value);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+
+    xmlrpc_struct_set_value(env, params, name, val);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+
+    xmlrpc_DECREF(val);
+}
+
+void abrt_xmlrpc_params_add_array(xmlrpc_env *env, xmlrpc_value *params, const char *name, xmlrpc_value *value)
+{
+    xmlrpc_struct_set_value(env, params, name, value);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+}
+
+xmlrpc_value *abrt_xmlrpc_call_params(xmlrpc_env *env, struct abrt_xmlrpc *ax, const char *method, xmlrpc_value *params)
+{
+    xmlrpc_value *array = xmlrpc_array_new(env);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+
+    xmlrpc_array_append_item(env, array, params);
+    if (env->fault_occurred)
+        abrt_xmlrpc_die(env);
+
+    xmlrpc_value *result = NULL;
+    xmlrpc_client_call2(env, ax->ax_client, ax->ax_server_info, method,
+                        array, &result);
+
+    xmlrpc_DECREF(array);
+    return result;
+}
+
 xmlrpc_value *abrt_xmlrpc_call_full(xmlrpc_env *env, struct abrt_xmlrpc *ax,
                                     const char *method, const char *format, ...)
 {
diff --git a/src/lib/abrt_xmlrpc.h b/src/lib/abrt_xmlrpc.h
index 1e1070c..945a887 100644
--- a/src/lib/abrt_xmlrpc.h
+++ b/src/lib/abrt_xmlrpc.h
@@ -35,6 +35,14 @@ struct abrt_xmlrpc {
     xmlrpc_server_info *ax_server_info;
 };
 
+xmlrpc_value *abrt_xmlrpc_array_new(xmlrpc_env *env);
+void abrt_xmlrpc_array_append_string(xmlrpc_env *env, xmlrpc_value *array, const char *value);
+
+xmlrpc_value *abrt_xmlrpc_params_new(xmlrpc_env *env);
+void abrt_xmlrpc_params_add_string(xmlrpc_env *env, xmlrpc_value *params, const char *name, const char *value);
+void abrt_xmlrpc_params_add_array(xmlrpc_env *env, xmlrpc_value *params, const char *name, xmlrpc_value *value);
+
+
 struct abrt_xmlrpc *abrt_xmlrpc_new_client(const char *url, int ssl_verify);
 void abrt_xmlrpc_free_client(struct abrt_xmlrpc *ax);
 void abrt_xmlrpc_die(xmlrpc_env *env) __attribute__((noreturn));
@@ -44,6 +52,9 @@ void abrt_xmlrpc_error(xmlrpc_env *env);
 xmlrpc_value *abrt_xmlrpc_call(struct abrt_xmlrpc *ax,
                                const char *method, const char *format, ...);
 
+xmlrpc_value *abrt_xmlrpc_call_params(xmlrpc_env *env, struct abrt_xmlrpc *ax,
+                               const char *method, xmlrpc_value *params);
+
 xmlrpc_value *abrt_xmlrpc_call_full(xmlrpc_env *enf, struct abrt_xmlrpc *ax,
                                    const char *method, const char *format, ...);
 
diff --git a/src/plugins/rhbz.c b/src/plugins/rhbz.c
index 6f81166..2138c5f 100644
--- a/src/plugins/rhbz.c
+++ b/src/plugins/rhbz.c
@@ -585,86 +585,40 @@ int rhbz_new_bug(struct abrt_xmlrpc *ax,
         buf[3] = '\0';
     }
 
-    xmlrpc_value* result = NULL;
     char *status_whiteboard = xasprintf("abrt_hash:%s", duphash);
 
-    if (!group)
-    {
-        if (arch)
-        {
-            result = abrt_xmlrpc_call(ax, "Bug.create", "({s:s,s:s,s:s,s:s,s:s,s:s,s:s})",
-                                      "product", product,
-                                      "component", component,
-                                      "version", version,
-                                      "summary", (summary ? summary : bzsummary),
-                                      "description", bzcomment,
-                                      "status_whiteboard", status_whiteboard,
-                                      "platform", arch
-            );
-        }
-        else
-        {
-            result = abrt_xmlrpc_call(ax, "Bug.create", "({s:s,s:s,s:s,s:s,s:s,s:s})",
-                                      "product", product,
-                                      "component", component,
-                                      "version", version,
-                                      "summary", (summary ? summary : bzsummary),
-                                      "description", bzcomment,
-                                      "status_whiteboard", status_whiteboard
-            );
-        }
-    }
-    else
-    {
-        xmlrpc_env env;
-        xmlrpc_env_init(&env);
+    xmlrpc_env env;
+    xmlrpc_env_init(&env);
 
-        xmlrpc_value *xmlrpc_groups = xmlrpc_array_new(&env);
-        if (env.fault_occurred)
-            abrt_xmlrpc_die(&env);
+    xmlrpc_value *params = abrt_xmlrpc_params_new(&env);
 
-        for (GList *l = group; l; l = l->next)
-        {
-            xmlrpc_value *s = xmlrpc_string_new(&env, (char *) l->data);
-            if (env.fault_occurred)
-                abrt_xmlrpc_die(&env);
+    abrt_xmlrpc_params_add_string(&env, params, "product", product);
+    abrt_xmlrpc_params_add_string(&env, params, "component", component);
+    abrt_xmlrpc_params_add_string(&env, params, "version", version);
+    abrt_xmlrpc_params_add_string(&env, params, "summary", (summary ? summary : bzsummary));
+    abrt_xmlrpc_params_add_string(&env, params, "description", bzcomment);
+    abrt_xmlrpc_params_add_string(&env, params, "status_whiteboard", status_whiteboard);
 
-            xmlrpc_array_append_item(&env, xmlrpc_groups, s);
-            if (env.fault_occurred)
-                abrt_xmlrpc_die(&env);
+    if(arch)
+        abrt_xmlrpc_params_add_string(&env, params, "platform", arch);
 
-            xmlrpc_DECREF(s);
-        }
+    if (group)
+    {
+        xmlrpc_value *xmlrpc_groups = abrt_xmlrpc_array_new(&env);
 
-        if (arch)
-        {
-            result = abrt_xmlrpc_call(ax, "Bug.create", "({s:s,s:s,s:s,s:s,s:s,s:s,s:s,s:A})",
-                                      "product", product,
-                                      "component", component,
-                                      "version", version,
-                                      "summary", (summary ? summary : bzsummary),
-                                      "description", bzcomment,
-                                      "status_whiteboard", status_whiteboard,
-                                      "platform", arch,
-                                      "groups", xmlrpc_groups
-            );
+        for (GList *l = group; l; l = l->next)
+            abrt_xmlrpc_array_append_string(&env, xmlrpc_groups, l->data);
+
+        abrt_xmlrpc_params_add_array(&env, params, "groups", xmlrpc_groups);
 
-        }
-        else
-        {
-            result = abrt_xmlrpc_call(ax, "Bug.create", "({s:s,s:s,s:s,s:s,s:s,s:s,s:A})",
-                                      "product", product,
-                                      "component", component,
-                                      "version", version,
-                                      "summary", (summary ? summary : bzsummary),
-                                      "description", bzcomment,
-                                      "status_whiteboard", status_whiteboard,
-                                      "groups", xmlrpc_groups
-            );
-        }
         xmlrpc_DECREF(xmlrpc_groups);
     }
 
+    xmlrpc_value* result = abrt_xmlrpc_call_params(&env, ax, "Bug.create", params);
+
+    xmlrpc_DECREF(params);
+    xmlrpc_env_clean(&env);
+
     free(status_whiteboard);
     free(summary);
 
-- 
1.8.1.4



More information about the Crash-catcher mailing list