From: Jean-Philippe Orsini Date: Wed, 18 May 2011 08:27:56 +0000 (+0000) Subject: filter out duplicated arch-independant packages X-Git-Tag: v1.3.0~165 X-Git-Url: http://git.wpitchoune.net/gitweb/?p=ppastats.git;a=commitdiff_plain;h=f5fbf6bcfcac7e2b6df90e00f618c642539d013d filter out duplicated arch-independant packages --- diff --git a/src/lp.c b/src/lp.c index adb1e2b..f3d0610 100644 --- 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; } diff --git a/src/lp.h b/src/lp.h index 49c648f..f105dc9 100644 --- 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); diff --git a/src/lp_json.c b/src/lp_json.c index 1c31ccb..2279220 100644 --- a/src/lp_json.c +++ b/src/lp_json.c @@ -25,6 +25,7 @@ #include #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; } diff --git a/src/ppastats.c b/src/ppastats.c index baca55c..56a8942 100644 --- a/src/ppastats.c +++ b/src/ppastats.c @@ -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);