Matej Habrnal ef5d23
From 084a2aaa6373f178d6bf1ac66c196476d2faa438 Mon Sep 17 00:00:00 2001
Matej Habrnal ef5d23
From: Jakub Filak <jfilak@redhat.com>
Matej Habrnal ef5d23
Date: Tue, 25 Aug 2015 16:03:51 +0200
Matej Habrnal ef5d23
Subject: [PATCH] introduce bodhi2 to abrt-bodhi
Matej Habrnal ef5d23
Matej Habrnal ef5d23
Resolves: rhbz#1256493
Matej Habrnal ef5d23
Matej Habrnal ef5d23
Signed-off-by: Jakub Filak <jfilak@redhat.com>
Matej Habrnal ef5d23
---
Matej Habrnal ef5d23
 configure.ac            |   1 +
Matej Habrnal ef5d23
 src/plugins/Makefile.am |   2 +
Matej Habrnal ef5d23
 src/plugins/bodhi.c     | 197 +++++++++++++++++++++++++++---------------------
Matej Habrnal ef5d23
 3 files changed, 114 insertions(+), 86 deletions(-)
Matej Habrnal ef5d23
Matej Habrnal ef5d23
diff --git a/configure.ac b/configure.ac
Matej Habrnal ef5d23
index b372e12..1013e3b 100644
Matej Habrnal ef5d23
--- a/configure.ac
Matej Habrnal ef5d23
+++ b/configure.ac
Matej Habrnal ef5d23
@@ -376,6 +376,7 @@ PKG_CHECK_MODULES([JSON_C], [json], [
Matej Habrnal ef5d23
 if test -z "$NO_BODHI"
Matej Habrnal ef5d23
 then
Matej Habrnal ef5d23
 PKG_CHECK_MODULES([LIBREPORT_WEB], [libreport-web])
Matej Habrnal ef5d23
+PKG_CHECK_MODULES([HAWKEY], [hawkey])
Matej Habrnal ef5d23
 AM_CONDITIONAL(BUILD_BODHI, true)
Matej Habrnal ef5d23
 else
Matej Habrnal ef5d23
 AM_CONDITIONAL(BUILD_BODHI, false)
Matej Habrnal ef5d23
diff --git a/src/plugins/Makefile.am b/src/plugins/Makefile.am
Matej Habrnal ef5d23
index aa426ff..1c1ff8a 100644
Matej Habrnal ef5d23
--- a/src/plugins/Makefile.am
Matej Habrnal ef5d23
+++ b/src/plugins/Makefile.am
Matej Habrnal ef5d23
@@ -366,10 +366,12 @@ abrt_bodhi_SOURCES = \
Matej Habrnal ef5d23
     $(LIBREPORT_WEB_CFLAGS) \
Matej Habrnal ef5d23
     $(JSON_C_CFLAGS) \
Matej Habrnal ef5d23
     $(RPM_CFLAGS) \
Matej Habrnal ef5d23
+    $(HAWKEY_CFLAGS) \
Matej Habrnal ef5d23
     -D_GNU_SOURCE
Matej Habrnal ef5d23
  abrt_bodhi_LDADD = \
Matej Habrnal ef5d23
     $(JSON_C_LIBS) \
Matej Habrnal ef5d23
     $(RPM_LIBS) \
Matej Habrnal ef5d23
+    $(HAWKEY_LIBS) \
Matej Habrnal ef5d23
     $(LIBREPORT_LIBS) \
Matej Habrnal ef5d23
     $(LIBREPORT_WEB_LIBS)
Matej Habrnal ef5d23
 endif
Matej Habrnal ef5d23
diff --git a/src/plugins/bodhi.c b/src/plugins/bodhi.c
Matej Habrnal ef5d23
index fcdbd83..831f5ff 100644
Matej Habrnal ef5d23
--- a/src/plugins/bodhi.c
Matej Habrnal ef5d23
+++ b/src/plugins/bodhi.c
Matej Habrnal ef5d23
@@ -22,6 +22,7 @@
Matej Habrnal ef5d23
 #include <rpm/rpmcli.h>
Matej Habrnal ef5d23
 #include <rpm/rpmdb.h>
Matej Habrnal ef5d23
 #include <rpm/rpmpgp.h>
Matej Habrnal ef5d23
+#include <hawkey/util.h>
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
 #include <libreport/internal_libreport.h>
Matej Habrnal ef5d23
 #include <libreport/libreport_curl.h>
Matej Habrnal ef5d23
@@ -32,85 +33,103 @@
Matej Habrnal ef5d23
 /* bodhi returns json structure
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
 {
Matej Habrnal ef5d23
-   "num_items":2,
Matej Habrnal ef5d23
-   "title":"2 updats found",
Matej Habrnal ef5d23
-   "tg_flash":null,
Matej Habrnal ef5d23
-   "updates":[
Matej Habrnal ef5d23
-      {
Matej Habrnal ef5d23
-         "status":"stable",
Matej Habrnal ef5d23
-         "close_bugs":true,
Matej Habrnal ef5d23
-         "request":null,
Matej Habrnal ef5d23
-         "date_submitted":"2011-03-18 17:25:14",
Matej Habrnal ef5d23
-         "unstable_karma":-3,
Matej Habrnal ef5d23
-         "submitter":"twaugh",
Matej Habrnal ef5d23
-         "critpath":false,
Matej Habrnal ef5d23
-         "approved":null,
Matej Habrnal ef5d23
-         "stable_karma":2,
Matej Habrnal ef5d23
-         "date_pushed":"2011-03-19 05:34:27",
Matej Habrnal ef5d23
-         "builds":[
Matej Habrnal ef5d23
-            {
Matej Habrnal ef5d23
-               "nvr":"system-config-printer-1.3.2-1.fc15",
Matej Habrnal ef5d23
-               "package":{
Matej Habrnal ef5d23
-                  "suggest_reboot":false,
Matej Habrnal ef5d23
-                  "committers":[
Matej Habrnal ef5d23
-                     "twaugh",
Matej Habrnal ef5d23
-                     "jpopelka"
Matej Habrnal ef5d23
-                  ],
Matej Habrnal ef5d23
-                  "name":"system-config-printer"
Matej Habrnal ef5d23
-               }
Matej Habrnal ef5d23
-            },
Matej Habrnal ef5d23
-            {
Matej Habrnal ef5d23
-            ....
Matej Habrnal ef5d23
-            }
Matej Habrnal ef5d23
-         ],
Matej Habrnal ef5d23
-         "title":"system-config-printer-1.3.2-1.fc15",
Matej Habrnal ef5d23
-         "notes":"This update fixes several bugs and re-enables translations that were accidentally disabled.",
Matej Habrnal ef5d23
-         "date_modified":null,
Matej Habrnal ef5d23
-         "nagged":null,
Matej Habrnal ef5d23
-         "bugs":[
Matej Habrnal ef5d23
-            {
Matej Habrnal ef5d23
-               "bz_id":685098,
Matej Habrnal ef5d23
-               "security":false,
Matej Habrnal ef5d23
-               "parent":false,
Matej Habrnal ef5d23
-               "title":"[abrt] system-config-printer-1.3.1-1.fc15: authconn.py:197:_connect:RuntimeError: failed to connect to server"
Matej Habrnal ef5d23
-            },
Matej Habrnal ef5d23
-            {
Matej Habrnal ef5d23
-            ...
Matej Habrnal ef5d23
-            }
Matej Habrnal ef5d23
-         ],
Matej Habrnal ef5d23
-         "comments":[
Matej Habrnal ef5d23
-            {
Matej Habrnal ef5d23
-               "group":null,
Matej Habrnal ef5d23
-               "karma":0,
Matej Habrnal ef5d23
-               "anonymous":false,
Matej Habrnal ef5d23
-               "author":"bodhi",
Matej Habrnal ef5d23
-               "timestamp":"2011-03-18 17:26:34",
Matej Habrnal ef5d23
-               "text":"This update has been submitted for testing by twaugh. "
Matej Habrnal ef5d23
-            },
Matej Habrnal ef5d23
-            {
Matej Habrnal ef5d23
-            ...
Matej Habrnal ef5d23
-            }
Matej Habrnal ef5d23
-         ],
Matej Habrnal ef5d23
-         "critpath_approved":false,
Matej Habrnal ef5d23
-         "updateid":"FEDORA-2011-3596",
Matej Habrnal ef5d23
-         "karma":0,
Matej Habrnal ef5d23
-         "release":{
Matej Habrnal ef5d23
-            "dist_tag":"dist-f15",
Matej Habrnal ef5d23
-            "id_prefix":"FEDORA",
Matej Habrnal ef5d23
-            "locked":false,
Matej Habrnal ef5d23
-            "name":"F15",
Matej Habrnal ef5d23
-            "long_name":"Fedora 15"
Matej Habrnal ef5d23
-         },
Matej Habrnal ef5d23
-         "type":"bugfix"
Matej Habrnal ef5d23
-      },
Matej Habrnal ef5d23
-      {
Matej Habrnal ef5d23
-      ...
Matej Habrnal ef5d23
-      }
Matej Habrnal ef5d23
-   ]
Matej Habrnal ef5d23
+ "rows_per_page": 20,
Matej Habrnal ef5d23
+    "total": 1,
Matej Habrnal ef5d23
+    "chrome": true,
Matej Habrnal ef5d23
+    "display_user": true,
Matej Habrnal ef5d23
+    "pages": 1,
Matej Habrnal ef5d23
+    "updates": [
Matej Habrnal ef5d23
+       {
Matej Habrnal ef5d23
+        "close_bugs": true,
Matej Habrnal ef5d23
+        "old_updateid": "FEDORA-2015-13720",
Matej Habrnal ef5d23
+        "pushed": true,
Matej Habrnal ef5d23
+        "require_testcases": false,
Matej Habrnal ef5d23
+        "critpath": false,
Matej Habrnal ef5d23
+        "date_approved": null,
Matej Habrnal ef5d23
+        "stable_karma": null,
Matej Habrnal ef5d23
+        "date_pushed": "2015-08-19 04:49:00",
Matej Habrnal ef5d23
+        "requirements": null,
Matej Habrnal ef5d23
+        "severity": "unspecified",
Matej Habrnal ef5d23
+        "title": "hwloc-1.11.0-3.fc22",
Matej Habrnal ef5d23
+        "suggest": "unspecified",
Matej Habrnal ef5d23
+        "require_bugs": false,
Matej Habrnal ef5d23
+        "comments": [
Matej Habrnal ef5d23
+           {
Matej Habrnal ef5d23
+            "bug_feedback": [],
Matej Habrnal ef5d23
+            "user_id": 91,
Matej Habrnal ef5d23
+            "text": "This update has been submitted for testing by jhladky. ",
Matej Habrnal ef5d23
+            "testcase_feedback": [],
Matej Habrnal ef5d23
+            "karma_critpath": 0,
Matej Habrnal ef5d23
+            "update": 21885,
Matej Habrnal ef5d23
+            "update_id": 21885,
Matej Habrnal ef5d23
+            "karma": 0,
Matej Habrnal ef5d23
+            "anonymous": false,
Matej Habrnal ef5d23
+            "timestamp": "2015-08-18 13:38:35",
Matej Habrnal ef5d23
+            "id": 166016,
Matej Habrnal ef5d23
+            "user": {"stacks": [],
Matej Habrnal ef5d23
+                "name": "bodhi",
Matej Habrnal ef5d23
+                "avatar": "https://apps.fedoraproject.org/img/icons/bodhi-24.png"}
Matej Habrnal ef5d23
+           },
Matej Habrnal ef5d23
+           {
Matej Habrnal ef5d23
+           ...
Matej Habrnal ef5d23
+           }
Matej Habrnal ef5d23
+        ],
Matej Habrnal ef5d23
+        "updateid": "FEDORA-2015-13720",
Matej Habrnal ef5d23
+        "cves": [],
Matej Habrnal ef5d23
+        "type": "bugfix",
Matej Habrnal ef5d23
+        "status": "testing",
Matej Habrnal ef5d23
+        "date_submitted": "2015-08-18 13:37:26",
Matej Habrnal ef5d23
+        "unstable_karma": null,
Matej Habrnal ef5d23
+        "submitter": "jhladky",
Matej Habrnal ef5d23
+        "user":
Matej Habrnal ef5d23
+           {
Matej Habrnal ef5d23
+            "stacks": [],
Matej Habrnal ef5d23
+            "buildroot_overrides": [],
Matej Habrnal ef5d23
+            "name": "jhladky",
Matej Habrnal ef5d23
+            "avatar": "https://seccdn.libravatar.org/avatar/b838b78fcf707a13cdaeb1c846d514e614d617cbf2c106718e71cb397607f59b?s=24&d=retro"
Matej Habrnal ef5d23
+           },
Matej Habrnal ef5d23
+        "locked": false,
Matej Habrnal ef5d23
+        "builds": [{"override": null,
Matej Habrnal ef5d23
+            "nvr": "hwloc-1.11.0-3.fc22"}],
Matej Habrnal ef5d23
+        "date_modified": null,
Matej Habrnal ef5d23
+        "test_cases": [],
Matej Habrnal ef5d23
+        "notes": "Fix for BZ1253977",
Matej Habrnal ef5d23
+        "request": null,
Matej Habrnal ef5d23
+        "bugs": [
Matej Habrnal ef5d23
+           {
Matej Habrnal ef5d23
+            "bug_id": 1253977,
Matej Habrnal ef5d23
+            "security": false,
Matej Habrnal ef5d23
+            "feedback": [],
Matej Habrnal ef5d23
+            "parent": false,
Matej Habrnal ef5d23
+            "title": "conflict between hwloc-libs-1.11.0-1.fc22.i686 and hwloc-libs-1.11.0-1.fc22.x86_64"
Matej Habrnal ef5d23
+           }
Matej Habrnal ef5d23
+        ],
Matej Habrnal ef5d23
+        "alias": "FEDORA-2015-13720",
Matej Habrnal ef5d23
+        "karma": 0,
Matej Habrnal ef5d23
+        "release":
Matej Habrnal ef5d23
+           {
Matej Habrnal ef5d23
+            "dist_tag": "f22",
Matej Habrnal ef5d23
+            "name": "F22",
Matej Habrnal ef5d23
+            "testing_tag": "f22-updates-testing",
Matej Habrnal ef5d23
+            "pending_stable_tag": "f22-updates-pending",
Matej Habrnal ef5d23
+            "long_name": "Fedora 22",
Matej Habrnal ef5d23
+            "state": "current",
Matej Habrnal ef5d23
+            "version": "22",
Matej Habrnal ef5d23
+            "override_tag": "f22-override",
Matej Habrnal ef5d23
+            "branch": "f22",
Matej Habrnal ef5d23
+            "id_prefix": "FEDORA",
Matej Habrnal ef5d23
+            "pending_testing_tag": "f22-updates-testing-pending",
Matej Habrnal ef5d23
+            "stable_tag": "f22-updates",
Matej Habrnal ef5d23
+            "candidate_tag": "f22-updates-candidate"
Matej Habrnal ef5d23
+           }
Matej Habrnal ef5d23
+       }
Matej Habrnal ef5d23
+    ],
Matej Habrnal ef5d23
+    "display_request": true,
Matej Habrnal ef5d23
+    "page": 1
Matej Habrnal ef5d23
 }
Matej Habrnal ef5d23
 */
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
-static const char *bodhi_url = "https://admin.fedoraproject.org/updates";
Matej Habrnal ef5d23
+static const char *bodhi_url = "https://bodhi.fedoraproject.org/updates";
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
 struct bodhi {
Matej Habrnal ef5d23
     char *nvr;
Matej Habrnal ef5d23
@@ -202,7 +221,7 @@ static GHashTable *bodhi_parse_json(json_object *json, const char *release)
Matej Habrnal ef5d23
 {
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
     int num_items = 0;
Matej Habrnal ef5d23
-    bodhi_read_value(json, "num_items", &num_items, BODHI_READ_INT);
Matej Habrnal ef5d23
+    bodhi_read_value(json, "total", &num_items, BODHI_READ_INT);
Matej Habrnal ef5d23
     if (num_items <= 0)
Matej Habrnal ef5d23
         return NULL;
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
@@ -241,13 +260,19 @@ static GHashTable *bodhi_parse_json(json_object *json, const char *release)
Matej Habrnal ef5d23
             b = xzalloc(sizeof(struct bodhi));
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
             char *name = NULL;
Matej Habrnal ef5d23
+            long ign_e;
Matej Habrnal ef5d23
+            char *ign_v, *ign_r, *ign_a;
Matej Habrnal ef5d23
+
Matej Habrnal ef5d23
             json_object *build = json_object_array_get_idx(builds_item, k);
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
             bodhi_read_value(build, "nvr", &b->nvr, BODHI_READ_STR);
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
-            json_object *package = NULL;
Matej Habrnal ef5d23
-            bodhi_read_value(build, "package", &package, BODHI_READ_JSON_OBJ);
Matej Habrnal ef5d23
-            bodhi_read_value(package, "name", &name, BODHI_READ_STR);
Matej Habrnal ef5d23
+            if (hy_split_nevra(b->nvr, &name, &ign_e, &ign_v, &ign_r, &ign_a))
Matej Habrnal ef5d23
+                error_msg_and_die("hawkey failed to parse '%s'", b->nvr);
Matej Habrnal ef5d23
+
Matej Habrnal ef5d23
+            free(ign_v);
Matej Habrnal ef5d23
+            free(ign_r);
Matej Habrnal ef5d23
+            free(ign_a);
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
             struct bodhi *bodhi_tbl_item = g_hash_table_lookup(bodhi_table, name);
Matej Habrnal ef5d23
             if (bodhi_tbl_item && rpmvercmp(bodhi_tbl_item->nvr, b->nvr) > 0)
Matej Habrnal ef5d23
@@ -287,7 +312,7 @@ static GHashTable *bodhi_parse_json(json_object *json, const char *release)
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
 static GHashTable *bodhi_query_list(const char *query, const char *release)
Matej Habrnal ef5d23
 {
Matej Habrnal ef5d23
-    char *bodhi_url_bugs = xasprintf("%s/list", bodhi_url);
Matej Habrnal ef5d23
+    char *bodhi_url_bugs = xasprintf("%s/?%s", bodhi_url, query);
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
     post_state_t *post_state = new_post_state(POST_WANT_BODY
Matej Habrnal ef5d23
                                               | POST_WANT_SSL_VERIFY
Matej Habrnal ef5d23
@@ -298,8 +323,8 @@ static GHashTable *bodhi_query_list(const char *query, const char *release)
Matej Habrnal ef5d23
         NULL
Matej Habrnal ef5d23
     };
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
-    post_string(post_state, bodhi_url_bugs, "application/x-www-form-urlencoded",
Matej Habrnal ef5d23
-                     headers, query);
Matej Habrnal ef5d23
+    get(post_state, bodhi_url_bugs, "application/x-www-form-urlencoded",
Matej Habrnal ef5d23
+                     headers);
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
     if (post_state->http_resp_code != 200)
Matej Habrnal ef5d23
     {
Matej Habrnal ef5d23
@@ -397,7 +422,7 @@ int main(int argc, char **argv)
Matej Habrnal ef5d23
     {
Matej Habrnal ef5d23
         if (release)
Matej Habrnal ef5d23
         {
Matej Habrnal ef5d23
-            query = strbuf_append_strf(query, "release=%s&", release);
Matej Habrnal ef5d23
+            query = strbuf_append_strf(query, "releases=%s&", release);
Matej Habrnal ef5d23
         }
Matej Habrnal ef5d23
         else
Matej Habrnal ef5d23
         {
Matej Habrnal ef5d23
@@ -414,7 +439,7 @@ int main(int argc, char **argv)
Matej Habrnal ef5d23
             map_string_t *osinfo = new_map_string();
Matej Habrnal ef5d23
             problem_data_get_osinfo(problem_data, osinfo);
Matej Habrnal ef5d23
             parse_osinfo_for_rhts(osinfo, &product, &version);
Matej Habrnal ef5d23
-            query = strbuf_append_strf(query, "release=f%s&", version);
Matej Habrnal ef5d23
+            query = strbuf_append_strf(query, "releases=f%s&", version);
Matej Habrnal ef5d23
             free(product);
Matej Habrnal ef5d23
             free(version);
Matej Habrnal ef5d23
             free_map_string(osinfo);
Matej Habrnal ef5d23
@@ -424,7 +449,7 @@ int main(int argc, char **argv)
Matej Habrnal ef5d23
     if (argv[optind])
Matej Habrnal ef5d23
     {
Matej Habrnal ef5d23
         char *escaped = g_uri_escape_string(argv[optind], NULL, 0);
Matej Habrnal ef5d23
-        query = strbuf_append_strf(query, "package=%s&", escaped);
Matej Habrnal ef5d23
+        query = strbuf_append_strf(query, "packages=%s&", escaped);
Matej Habrnal ef5d23
         free(escaped);
Matej Habrnal ef5d23
     }
Matej Habrnal ef5d23
 
Matej Habrnal ef5d23
-- 
Matej Habrnal ef5d23
2.5.0
Matej Habrnal ef5d23