|
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 |
|