libreport/0002-bugzilla-query-bz-version-and-for-4.2-use-id-element.patch
2012-05-14 18:44:06 +02:00

114 lines
3.4 KiB
Diff

From add5f6eed5cae2f0618707ed9c642f692426d8d7 Mon Sep 17 00:00:00 2001
From: Nikola Pajkovsky <npajkovs@redhat.com>
Date: Mon, 14 May 2012 13:53:51 +0200
Subject: [PATCH 2/3] bugzilla: query bz version and for 4.2 use 'id' element
for getting bug number, for others use 'bug_id'
Signed-off-by: Nikola Pajkovsky <npajkovs@redhat.com>
---
src/plugins/reporter-bugzilla.c | 8 ++++++--
src/plugins/rhbz.c | 28 ++++++++++++++++++++++++++--
src/plugins/rhbz.h | 3 ++-
3 files changed, 34 insertions(+), 5 deletions(-)
diff --git a/src/plugins/reporter-bugzilla.c b/src/plugins/reporter-bugzilla.c
index 6584f0f..3b6d168 100644
--- a/src/plugins/reporter-bugzilla.c
+++ b/src/plugins/reporter-bugzilla.c
@@ -168,8 +168,10 @@ int main(int argc, char **argv)
int all_bugs_size = rhbz_array_size(all_bugs);
if (all_bugs_size > 0)
{
- int bug_id = rhbz_bug_id(all_bugs);
+ char *rhbz_ver = rhbz_version(client);
+ int bug_id = rhbz_bug_id(all_bugs, rhbz_ver);
printf("%i", bug_id);
+ free(rhbz_ver);
}
exit(EXIT_SUCCESS);
@@ -357,9 +359,11 @@ int main(int argc, char **argv)
}
else
{
- int bug_id = rhbz_bug_id(all_bugs);
+ char *rhbz_ver = rhbz_version(client);
+ int bug_id = rhbz_bug_id(all_bugs, rhbz_ver);
xmlrpc_DECREF(all_bugs);
bz = rhbz_bug_info(client, bug_id);
+ free(rhbz_ver);
}
}
else
diff --git a/src/plugins/rhbz.c b/src/plugins/rhbz.c
index 24bec16..df2838f 100644
--- a/src/plugins/rhbz.c
+++ b/src/plugins/rhbz.c
@@ -243,8 +243,26 @@ int rhbz_array_size(xmlrpc_value *xml)
return size;
}
+
+char *rhbz_version(struct abrt_xmlrpc *ax)
+{
+ func_entry();
+
+ xmlrpc_value *result;
+ result = abrt_xmlrpc_call(ax, "Bugzilla.version", "()");
+
+ char *version = NULL;
+ if (result)
+ {
+ version = rhbz_bug_read_item("version", result, RHBZ_READ_STR);
+ xmlrpc_DECREF(result);
+ }
+
+ return version;
+}
+
/* die or return bug id; each bug must have bug id otherwise xml is corrupted */
-int rhbz_bug_id(xmlrpc_value* xml)
+int rhbz_bug_id(xmlrpc_value* xml, const char *ver)
{
func_entry();
@@ -259,7 +277,13 @@ int rhbz_bug_id(xmlrpc_value* xml)
if (env.fault_occurred)
abrt_xmlrpc_die(&env);
- bug = rhbz_get_member("id", item);
+ char *id;
+ if (!prefixcmp(ver, "4.2"))
+ id = "id";
+ else
+ id = "bug_id";
+
+ bug = rhbz_get_member(id, item);
xmlrpc_DECREF(item);
if (!bug)
abrt_xmlrpc_die(&env);
diff --git a/src/plugins/rhbz.h b/src/plugins/rhbz.h
index c9023e9..85bcca1 100644
--- a/src/plugins/rhbz.h
+++ b/src/plugins/rhbz.h
@@ -97,7 +97,7 @@ xmlrpc_value *rhbz_get_member(const char *member, xmlrpc_value *xml);
int rhbz_array_size(xmlrpc_value *xml);
-int rhbz_bug_id(xmlrpc_value *xml);
+int rhbz_bug_id(xmlrpc_value *xml, const char *ver);
int rhbz_new_bug(struct abrt_xmlrpc *ax, problem_data_t *problem_data,
const char *release);
@@ -120,6 +120,7 @@ struct bug_info *rhbz_bug_info(struct abrt_xmlrpc *ax, int bug_id);
struct bug_info *rhbz_find_origin_bug_closed_duplicate(struct abrt_xmlrpc *ax,
struct bug_info *bi);
+char *rhbz_version(struct abrt_xmlrpc *ax);
#ifdef __cplusplus
}
--
1.7.10.1