int exec_stats(int argc, char **argv) { struct pkgdb *db = NULL; int64_t flatsize = 0; char size[7]; int retcode = EX_OK; int ch; while ((ch = getopt(argc, argv, "q")) != -1) { switch (ch) { case 'q': quiet = true; break; default: usage_stats(); return (EX_USAGE); } } argc -= optind; argv += optind; if (argc > 2) { usage_stats(); return (EX_USAGE); } if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) { return (EX_IOERR); } printf("Local package database:\n"); printf("\tInstalled packages: %" PRId64 "\n", pkgdb_stats(db, PKG_STATS_LOCAL_COUNT)); flatsize = pkgdb_stats(db, PKG_STATS_LOCAL_SIZE); humanize_number(size, sizeof(flatsize), flatsize, "B", HN_AUTOSCALE, 0); printf("\tDisk space occupied: %s\n\n", size); printf("Remote package database(s):\n"); printf("\tNumber of repositories: %" PRId64 "\n", pkgdb_stats(db, PKG_STATS_REMOTE_REPOS)); printf("\tPackages available: %" PRId64 "\n", pkgdb_stats(db, PKG_STATS_REMOTE_COUNT)); printf("\tUnique packages: %" PRId64 "\n", pkgdb_stats(db, PKG_STATS_REMOTE_UNIQUE)); flatsize = pkgdb_stats(db, PKG_STATS_REMOTE_SIZE); humanize_number(size, sizeof(flatsize), flatsize, "B", HN_AUTOSCALE, 0); printf("\tTotal size of packages: %s\n", size); pkgdb_close(db); return (retcode); }
int exec_stats(int argc, char **argv) { struct pkgdb *db = NULL; int64_t flatsize = 0; unsigned int opt = 0; char size[7]; int ch; bool show_bytes = false; struct option longopts[] = { { "bytes", no_argument, NULL, 'b' }, { "local", no_argument, NULL, 'l' }, { "quiet", no_argument, NULL, 'q' }, { "remote", no_argument, NULL, 'r' }, { NULL, 0, NULL, 0 }, }; while ((ch = getopt_long(argc, argv, "+blqr", longopts, NULL)) != -1) { switch (ch) { case 'b': show_bytes = true; break; case 'l': opt |= STATS_LOCAL; break; case 'q': quiet = true; break; case 'r': opt |= STATS_REMOTE; break; default: usage_stats(); return (EX_USAGE); } } argc -= optind; argv += optind; /* default is to show everything we have */ if (opt == 0) opt |= (STATS_LOCAL | STATS_REMOTE); if (pkgdb_open(&db, PKGDB_REMOTE) != EPKG_OK) { return (EX_IOERR); } if (pkgdb_obtain_lock(db, PKGDB_LOCK_READONLY) != EPKG_OK) { pkgdb_close(db); warnx("Cannot get a read lock on a database, it is locked by another process"); return (EX_TEMPFAIL); } if (opt & STATS_LOCAL) { printf("Local package database:\n"); printf("\tInstalled packages: %" PRId64 "\n", pkgdb_stats(db, PKG_STATS_LOCAL_COUNT)); flatsize = pkgdb_stats(db, PKG_STATS_LOCAL_SIZE); if (show_bytes) printf("\tDisk space occupied: %" PRId64 "\n\n", flatsize); else { humanize_number(size, sizeof(size), flatsize, "B", HN_AUTOSCALE, 0); printf("\tDisk space occupied: %s\n\n", size); } } if ((opt & STATS_REMOTE) && pkg_repos_total_count() > 0) { printf("Remote package database(s):\n"); printf("\tNumber of repositories: %" PRId64 "\n", pkgdb_stats(db, PKG_STATS_REMOTE_REPOS)); printf("\tPackages available: %" PRId64 "\n", pkgdb_stats(db, PKG_STATS_REMOTE_COUNT)); printf("\tUnique packages: %" PRId64 "\n", pkgdb_stats(db, PKG_STATS_REMOTE_UNIQUE)); flatsize = pkgdb_stats(db, PKG_STATS_REMOTE_SIZE); if (show_bytes) printf("\tTotal size of packages: %" PRId64 "\n", flatsize); else { humanize_number(size, sizeof(size), flatsize, "B", HN_AUTOSCALE, 0); printf("\tTotal size of packages: %s\n", size); } } pkgdb_release_lock(db, PKGDB_LOCK_READONLY); pkgdb_close(db); return (EX_OK); }