-/*
+/*a
Copyright (C) 2011 jeanfi@gmail.com
This program is free software; you can redistribute it and/or modify
#include <stdio.h>
#include <string.h>
+#include "cache.h"
#include "html.h"
#include "lp_ws.h"
#include "config.h"
+#include "ppastats.h"
+int debug;
static const char *program_name;
-static void display_published_binaries(const char *owner, const char *ppa)
+static void display_published_binaries(const char *owner,
+ const char *ppa,
+ const char *package_status)
{
- struct binary_package_publishing_history **e_cur, **list;
- char *archive_url = get_archive_url(owner, ppa);
+ struct ppa_stats *ppastats;
+ struct package_stats **packages;
+ struct version_stats **versions;
+ struct distro_stats **distros;
+ struct arch_stats **archs;
- list = get_binary_package_publishing_history_list(archive_url);
- free(archive_url);
+ ppastats = create_ppa_stats(owner, ppa, package_status);
+ packages = ppastats->packages;
+ while (packages && *packages) {
+ struct package_stats *p = *packages;
- if (!list) {
- fprintf(stderr, "Failed to retrieve PPA information\n");
- exit(EXIT_FAILURE);
- }
+ printf("%s (%d)\n", p->name, p->download_count);
+
+ versions = p->versions;
+
+ while (*versions) {
+ printf("\t%s (%d)\n", (*versions)->version,
+ (*versions)->download_count);
+
+ distros = (*versions)->distros;
+
+ while (*distros) {
+ printf("\t\t%s (%d)\n",
+ (*distros)->name,
+ (*distros)->download_count);
+
+ archs = (*distros)->archs;
+
+ while (*archs) {
+ printf("\t\t\t%s (%d)\n",
+ (*archs)->name,
+ (*archs)->download_count);
+
+ archs++;
+ }
- e_cur = list;
- while (*e_cur) {
- struct binary_package_publishing_history *binary;
- struct distro_arch_series *dist;
+ distros++;
+ }
- binary = *e_cur;
- dist = get_distro_arch_series(binary->distro_arch_series_link);
+ versions++;
+ }
- printf("%s %s %s %d\n",
- dist->display_name,
- binary->binary_package_name,
- binary->binary_package_version,
- get_download_count(binary->self_link));
- e_cur++;
+ packages++;
}
- binary_package_publishing_history_list_free(list);
+ ppa_stats_free(ppastats);
}
static struct option long_options[] = {
{"version", no_argument, 0, 'v'},
{"help", no_argument, 0, 'h'},
- {"html", no_argument, 0, 't'},
+ {"output-dir", required_argument, 0, 'o'},
+ {"debug", no_argument, 0, 'd'},
+ {"status", required_argument, 0, 's'},
+ {"skip-js-css", no_argument, 0, 'S'},
{0, 0, 0, 0}
};
static void print_help()
{
- printf("Usage: %s [OPTION]...\n", program_name);
+ printf("Usage: %s [OPTION]... PPA_OWNER PPA_NAME\n", program_name);
puts("ppastats is a command application"
- " for generating PPA statistics.");
+ " for generating PPA statistics.\n");
+
+ puts("Prints number of downloads for each published packages of a PPA "
+ "or generates an HTML page containing a graph representation.");
puts("");
puts("Options:");
puts("");
puts("\
- -t, --html \
-generates an HTML output.");
+ -o, --output-dir=[PATH] \
+generates HTML pages into 'PATH'.");
+ puts("\
+ -s, --status=[STATUS] retrieves only package of the given status\n\
+ (possible values are: Pending, Published, \n\
+ Superseded, Deleted or Obsolete).");
+
+ puts("\
+ -S, --skip-js-css skip installation of js and css files");
puts("");
printf("Report bugs to: %s\n", PACKAGE_BUGREPORT);
char *owner, *ppa;
int optc;
int output_html = 0;
+ char *package_status = NULL;
int cmdok = 1;
+ char *output_dir = NULL;
+ int install_static_files = 1;
program_name = argv[0];
- while ((optc = getopt_long(argc, argv, "vht", long_options,
+ while ((optc = getopt_long(argc, argv, "vho:ds:S", long_options,
NULL)) != -1) {
switch (optc) {
- case 't':
+ case 'o':
output_html = 1;
+ output_dir = strdup(optarg);
+ break;
+ case 'd':
+ debug = 1;
break;
case 'h':
print_help();
case 'v':
print_version();
exit(EXIT_SUCCESS);
+ case 's':
+ if (optarg)
+ package_status = strdup(optarg);
+ break;
+ case 'S':
+ install_static_files = 0;
+ break;
default:
cmdok = 0;
break;
ppa = argv[optind+1];
if (output_html)
- ppa_to_html(owner, ppa);
+ ppa_to_html(owner, ppa, package_status, output_dir,
+ install_static_files);
else
- display_published_binaries(owner, ppa);
+ display_published_binaries(owner, ppa, package_status);
+
+ /* for valgrind.... */
+ free(package_status);
+ free(output_dir);
+ lp_ws_cleanup();
+ cache_cleanup();
exit(EXIT_SUCCESS);
}