libreport/0003-search-only-by-duphash-for-selinux.patch

102 lines
4.0 KiB
Diff

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