Jiri 8ad42fe
From 8bf23a12caac293637060b09f733f57f839a4a71 Mon Sep 17 00:00:00 2001
Jiri 8ad42fe
From: Nikola Pajkovsky <npajkovs@redhat.com>
Jiri 8ad42fe
Date: Wed, 30 Nov 2011 19:18:20 +0100
Jiri 8ad42fe
Subject: [PATCH 3/6] search only by duphash for selinux
Jiri 8ad42fe
Jiri 8ad42fe
selinux guy's almost always move filled bug from component selinux-policy
Jiri 8ad42fe
to right component.
Jiri 8ad42fe
Jiri 8ad42fe
bugzilla client is looking for duplicate bug by sending xmlrpc query
Jiri 8ad42fe
Jiri 8ad42fe
"ALL whiteboard:<hash> component:<name> [product:<product>]"
Jiri 8ad42fe
Jiri 8ad42fe
so if bug is moved from component selinux-policy to other, then query
Jiri 8ad42fe
returns NULL and creates a new bug.
Jiri 8ad42fe
Jiri 8ad42fe
Signed-off-by: Nikola Pajkovsky <npajkovs@redhat.com>
Jiri 8ad42fe
---
Jiri 8ad42fe
 src/plugins/reporter-bugzilla.c |   25 ++++++++++++++++++-------
Jiri 8ad42fe
 src/plugins/rhbz.c              |   21 ++++++++++++---------
Jiri 8ad42fe
 2 files changed, 30 insertions(+), 16 deletions(-)
Jiri 8ad42fe
Jiri 8ad42fe
diff --git a/src/plugins/reporter-bugzilla.c b/src/plugins/reporter-bugzilla.c
Jiri 8ad42fe
index 4739c2e..b6356f9 100644
Jiri 8ad42fe
--- a/src/plugins/reporter-bugzilla.c
Jiri 8ad42fe
+++ b/src/plugins/reporter-bugzilla.c
Jiri 8ad42fe
@@ -280,11 +280,22 @@ int main(int argc, char **argv)
Jiri 8ad42fe
     free(version);
Jiri 8ad42fe
 
Jiri 8ad42fe
     log(_("Checking for duplicates"));
Jiri 8ad42fe
-    xmlrpc_value *result;
Jiri 8ad42fe
-    if (strcmp(product, "Fedora") == 0)
Jiri 8ad42fe
-        result = rhbz_search_duphash(client, component, product, duphash);
Jiri 8ad42fe
-    else
Jiri 8ad42fe
-        result = rhbz_search_duphash(client, component, NULL, duphash);
Jiri 8ad42fe
+
Jiri 8ad42fe
+    /*
Jiri 8ad42fe
+      selinux guy's almost always move filled bug from component selinux-policy
Jiri 8ad42fe
+      to right component.
Jiri 8ad42fe
+
Jiri 8ad42fe
+      bugzilla client is looking for duplicate bug by sending xmlrpc query
Jiri 8ad42fe
+
Jiri 8ad42fe
+      "ALL whiteboard:<hash>  component:<name>  [product:<product>]"
Jiri 8ad42fe
+
Jiri 8ad42fe
+      so if bug is moved from component selinux-policy to other, then query
Jiri 8ad42fe
+      returns NULL and creates a new bug.
Jiri 8ad42fe
+    */
Jiri 8ad42fe
+    const char *product_substitute = (!strcmp(product, "Fedora")) ? product : NULL;
Jiri 8ad42fe
+    const char *component_substitute = (!strcmp(component, "selinux-policy")) ? NULL : component;
Jiri 8ad42fe
+    xmlrpc_value *result = rhbz_search_duphash(client, component_substitute,
Jiri 8ad42fe
+                                               product_substitute, duphash);
Jiri 8ad42fe
 
Jiri 8ad42fe
     xmlrpc_value *all_bugs = rhbz_get_member("bugs", result);
Jiri 8ad42fe
     xmlrpc_DECREF(result);
Jiri 8ad42fe
@@ -310,8 +321,8 @@ int main(int argc, char **argv)
Jiri 8ad42fe
             /* found something, but its a different product */
Jiri 8ad42fe
             free_bug_info(bz);
Jiri 8ad42fe
 
Jiri 8ad42fe
-            xmlrpc_value *result = rhbz_search_duphash(client, component,
Jiri 8ad42fe
-                                                       product, duphash);
Jiri 8ad42fe
+            xmlrpc_value *result = rhbz_search_duphash(client, component_substitute,
Jiri 8ad42fe
+                                                       product_substitute, duphash);
Jiri 8ad42fe
             xmlrpc_value *all_bugs = rhbz_get_member("bugs", result);
Jiri 8ad42fe
             xmlrpc_DECREF(result);
Jiri 8ad42fe
 
Jiri 8ad42fe
diff --git a/src/plugins/rhbz.c b/src/plugins/rhbz.c
Jiri 8ad42fe
index 6b71202..3662816 100644
Jiri 8ad42fe
--- a/src/plugins/rhbz.c
Jiri 8ad42fe
+++ b/src/plugins/rhbz.c
Jiri 8ad42fe
@@ -116,17 +116,20 @@ void rhbz_login(struct abrt_xmlrpc *ax, const char* login, const char* passwd)
Jiri 8ad42fe
 xmlrpc_value *rhbz_search_duphash(struct abrt_xmlrpc *ax, const char *component,
Jiri 8ad42fe
                                   const char *product, const char *duphash)
Jiri 8ad42fe
 {
Jiri 8ad42fe
-    char *query = NULL;
Jiri 8ad42fe
-    if (!product)
Jiri 8ad42fe
-        query = xasprintf("ALL component:\"%s\" whiteboard:\"%s\"", component, duphash);
Jiri 8ad42fe
-    else
Jiri 8ad42fe
-        query = xasprintf("ALL component:\"%s\" whiteboard:\"%s\" product:\"%s\"",
Jiri 8ad42fe
-                          component, duphash, product);
Jiri 8ad42fe
+    struct strbuf *query = strbuf_new();
Jiri 8ad42fe
+    strbuf_append_strf(query, "ALL whiteboard:\"%s\"", duphash);
Jiri 8ad42fe
+
Jiri 8ad42fe
+    if (product)
Jiri 8ad42fe
+        strbuf_append_strf(query, " product:\"%s\"", product);
Jiri 8ad42fe
 
Jiri 8ad42fe
-    VERB3 log("search for '%s'", query);
Jiri 8ad42fe
+    if (component)
Jiri 8ad42fe
+        strbuf_append_strf(query, " component:\"%s\"", component);
Jiri 8ad42fe
+
Jiri 8ad42fe
+    VERB3 log("search for '%s'", query->buf);
Jiri 8ad42fe
     xmlrpc_value *ret = abrt_xmlrpc_call(ax, "Bug.search", "({s:s})",
Jiri 8ad42fe
-                                         "quicksearch", query);
Jiri 8ad42fe
-    free(query);
Jiri 8ad42fe
+                                         "quicksearch", query->buf);
Jiri 8ad42fe
+    strbuf_free(query);
Jiri 8ad42fe
+
Jiri 8ad42fe
     return ret;
Jiri 8ad42fe
 }
Jiri 8ad42fe
 
Jiri 8ad42fe
-- 
Jiri 8ad42fe
1.7.7.3
Jiri 8ad42fe