filter out duplicated arch-independant packages
authorJean-Philippe Orsini <jeanfi@gmail.com>
Wed, 18 May 2011 08:27:56 +0000 (08:27 +0000)
committerJean-Philippe Orsini <jeanfi@gmail.com>
Wed, 18 May 2011 08:27:56 +0000 (08:27 +0000)
src/lp.c
src/lp.h
src/lp_json.c
src/ppastats.c

index adb1e2b..f3d0610 100644 (file)
--- a/src/lp.c
+++ b/src/lp.c
@@ -70,7 +70,8 @@ struct binary_package_publishing_history *
 binary_package_publishing_history_new(const char *binary_package_name,
                                      const char *binary_package_version,
                                      const char *distro_arch_series_link,
-                                     const char *self_link)
+                                     const char *self_link,
+                                     int architecture_specific)
 {
        struct binary_package_publishing_history *b;
 
@@ -80,6 +81,7 @@ binary_package_publishing_history_new(const char *binary_package_name,
        b->binary_package_version = strdup(binary_package_version);
        b->distro_arch_series_link = strdup(distro_arch_series_link);
        b->self_link = strdup(self_link);
+       b->architecture_specific = architecture_specific;
 
        return b;
 }
index 49c648f..f105dc9 100644 (file)
--- a/src/lp.h
+++ b/src/lp.h
@@ -36,6 +36,7 @@ struct binary_package_publishing_history {
        char *binary_package_version;
        char *distro_arch_series_link;
        char *self_link;
+       int architecture_specific;
 };
 
 struct distro_arch_series {
@@ -79,7 +80,8 @@ struct binary_package_publishing_history *
 binary_package_publishing_history_new(const char *binary_package_name,
                                      const char *binary_package_version,
                                      const char *distro_arch_series_link,
-                                     const char *self_link);
+                                     const char *self_link,
+                                     int architecture_specific);
 
 void binary_package_publishing_history_list_free
 (struct binary_package_publishing_history **list);
index 1c31ccb..2279220 100644 (file)
@@ -25,6 +25,7 @@
 #include <stdio.h>
 
 #include "lp_json.h"
+#include "lp_ws.h"
 
 struct binary_package_publishing_history *
 json_object_to_binary_package_publishing_history(json_object *o)
@@ -33,6 +34,7 @@ json_object_to_binary_package_publishing_history(json_object *o)
        const char *binary_package_version;
        const char *distro_arch_series_link;
        const char *self_link;
+       int architecture_specific;
 
        binary_package_name = json_object_get_string
                (json_object_object_get(o, "binary_package_name"));
@@ -46,10 +48,17 @@ json_object_to_binary_package_publishing_history(json_object *o)
        self_link = json_object_get_string
                (json_object_object_get(o, "self_link"));
 
+       if (json_object_get_boolean
+           (json_object_object_get(o, "architecture_specific")))
+               architecture_specific = 1;
+       else
+               architecture_specific = 0;
+
        return binary_package_publishing_history_new(binary_package_name,
                                                     binary_package_version,
                                                     distro_arch_series_link,
-                                                    self_link);
+                                                    self_link,
+                                                    architecture_specific);
 }
 
 struct distro_arch_series *json_object_to_distro_arch_series(json_object *o)
@@ -113,8 +122,10 @@ struct binary_package_publishing_history * *
 json_object_to_binary_package_publishing_history_list(json_object *o)
 {
        json_object *o_entries;
-       int i, n;
+       int i, n, i2;
        struct binary_package_publishing_history **entries;
+       struct binary_package_publishing_history *h;
+       const struct distro_arch_series *distro;
 
        o_entries = json_object_object_get(o, "entries");
 
@@ -126,11 +137,24 @@ json_object_to_binary_package_publishing_history_list(json_object *o)
        entries = malloc
                (sizeof(struct binary_package_publishing_history *)*(n+1));
 
-       for (i = 0; i < n; i++) {
-               entries[i] = json_object_to_binary_package_publishing_history
+       for (i = 0, i2 = 0; i < n; i++) {
+               h = json_object_to_binary_package_publishing_history
                        (json_object_array_get_idx(o_entries, i));
+
+               if (!h->architecture_specific) {
+                       distro = get_distro_arch_series
+                               (h->distro_arch_series_link);
+
+                       if (!distro->is_nominated_arch_indep) {
+                               binary_package_publishing_history_free(h);
+                               continue ;
+                       }
+               }
+
+               entries[i2] = h;
+               i2++;
        }
-       entries[n] = NULL;
+       entries[i2] = NULL;
 
        return entries;
 }
index baca55c..56a8942 100644 (file)
@@ -181,6 +181,7 @@ create_ppa_stats(const char *owner,
                        = get_distro_arch_series(h->distro_arch_series_link);
                distro_series
                        = get_distro_series(arch_series->distroseries_link);
+
                count = get_download_count(h->self_link);
 
                package = get_package_stats(ppastats, package_name);