--- /dev/null
+/*a
+ Copyright (C) 2011 jeanfi@gmail.com
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ 02110-1301 USA
+*/
+
+#include <getopt.h>
+#include <stdlib.h>
+#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,
+ const char *package_status)
+{
+ struct ppa_stats *ppastats;
+ struct package_stats **packages;
+ struct version_stats **versions;
+ struct distro_stats **distros;
+ struct arch_stats **archs;
+
+ ppastats = create_ppa_stats(owner, ppa, package_status);
+ packages = ppastats->packages;
+ while (packages && *packages) {
+ struct package_stats *p = *packages;
+
+ 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++;
+ }
+
+ distros++;
+ }
+
+ versions++;
+ }
+
+ packages++;
+ }
+
+ ppa_stats_free(ppastats);
+}
+
+static struct option long_options[] = {
+ {"version", no_argument, 0, 'v'},
+ {"help", no_argument, 0, 'h'},
+ {"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_version()
+{
+ printf("ppastats %s\n", VERSION);
+ printf("Copyright (C) %s jeanfi@gmail.com\n\
+License GPLv2: GNU GPL version 2 or later \
+<http://www.gnu.org/licenses/old-licenses/gpl-2.0.html>\n\
+This is free software: you are free to change and redistribute it.\n\
+There is NO WARRANTY, to the extent permitted by law.\n",
+ "2011");
+}
+
+static void print_help()
+{
+ printf("Usage: %s [OPTION]... PPA_OWNER PPA_NAME\n", program_name);
+
+ puts("ppastats is a command application"
+ " 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("\
+ -h, --help display this help and exit\n\
+ -v, --version display version information and exit");
+
+ puts("");
+
+ puts("\
+ -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);
+ puts("");
+ printf("%s home page: <%s>\n", PACKAGE_NAME, PACKAGE_URL);
+}
+
+
+int main(int argc, char **argv)
+{
+ 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, "vho:ds:S", long_options,
+ NULL)) != -1) {
+ switch (optc) {
+ case 'o':
+ output_html = 1;
+ output_dir = strdup(optarg);
+ break;
+ case 'd':
+ debug = 1;
+ break;
+ case 'h':
+ print_help();
+ exit(EXIT_SUCCESS);
+ 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;
+ }
+ }
+
+ if (!cmdok || optind + 2 != argc) {
+ fprintf(stderr, "Try `%s --help' for more information.\n",
+ program_name);
+ exit(EXIT_FAILURE);
+ }
+
+ owner = argv[optind];
+ ppa = argv[optind+1];
+
+ if (output_html)
+ ppa_to_html(owner, ppa, package_status, output_dir,
+ install_static_files);
+ else
+ display_published_binaries(owner, ppa, package_status);
+
+ /* for valgrind.... */
+ free(package_status);
+ free(output_dir);
+ lp_ws_cleanup();
+ cache_cleanup();
+
+ exit(EXIT_SUCCESS);
+}