Date: Mon, 21 Jul 2008 11:52:24 GMT From: Anders Nore <andenore@FreeBSD.org> To: Perforce Change Reviews <perforce@FreeBSD.org> Subject: PERFORCE change 145556 for review Message-ID: <200807211152.m6LBqOwp096051@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=145556 Change 145556 by andenore@andenore_laptop on 2008/07/21 11:51:24 Fixed some functionality in pkg_convert and updated man-page. The -e and -p options now support more than one key as argument. Affected files ... .. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/converter.h#3 edit .. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/main.c#4 edit .. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/perform.c#7 edit .. //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/pkg_convert.1#4 edit Differences ... ==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/converter.h#3 (text+ko) ==== ==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/main.c#4 (text+ko) ==== @@ -1,19 +1,30 @@ #include <stdlib.h> #include <lib.h> - -static char Options[] = "vthepk:"; +#include <getopt.h> char *Key = NULL; Boolean CheckExists = FALSE; Boolean Print = FALSE; -Boolean Textual = TRUE; +Boolean Textual = FALSE; + +void usage(void); + +static char opts[] = "vthep"; + +static struct option longopts[] = { + { "verbose", no_argument, NULL, 'v' }, + { "textual", no_argument, NULL, 't' }, + { "help", no_argument, NULL, 'h' }, + { "exist", no_argument, NULL, 'e' }, + { NULL, 0, NULL, 0 } +}; + int main(int argc, char **argv) { char **pkgs; /* null terminated array of installed pkgnames */ int retval, ch, flags; - signal(SIGHUP, cleanup); signal(SIGINT, cleanup); @@ -22,7 +33,8 @@ else flags = O_RDONLY; - while ((ch = getopt(argc, argv, Options)) != -1) { + pkgs = argv; + while ((ch = getopt_long(argc, argv, opts, longopts, NULL)) != -1) { switch(ch) { case 'v': Verbose++; @@ -31,18 +43,15 @@ CheckExists = TRUE; break; case 't': - Textual = FALSE; + Textual = TRUE; break; case 'p': Print = TRUE; break; case '?': - case 'k': - Key = optarg; - break; case 'h': default: - usage(); + usage(); break; } } @@ -52,25 +61,37 @@ } atexit(closeDatabase); - char **dumb; - dumb = malloc(sizeof(char **) * 2); - *dumb = NULL; - pkgs = matchinstalled(MATCH_ALL, dumb, &retval); + /* If we want to convert the whole database */ + if (!CheckExists && !Print) { + char **dumb; + dumb = malloc(sizeof(char **) * 2); + *dumb = NULL; + pkgs = matchinstalled(MATCH_ALL, dumb, &retval); + + if (pkgs != NULL || retval != 0) { + return pkg_perform(pkgs); + } else { + printf("No packages to convert\n"); + return 0; + } + } + + argc -= optind; + argv += optind; - if (pkgs != NULL || retval != 0) { - return pkg_perform(pkgs); - } else { - printf("No packages to convert\n"); - } + pkgs = argv; - return 0; + if (argc == NULL) + return pkg_perform(NULL); + else + return pkg_perform(pkgs); } void usage() { fprintf(stderr, "usage:\t%s\n\t%s\n", - "pkg_convert [-vtep] [-k key]", - "pkg_convert"); + "pkg_convert [-vtep] [keys ...]", + "pkg_convert [-v]"); exit(1); } ==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/perform.c#7 (text+ko) ==== @@ -12,49 +12,65 @@ int pkg_perform(char **pkgs) { - int i, error; - error = 0; - DBT data; + int i, error; + error = 0; + DBT data; - if (CheckExists) { - if (!Key) { - warnx("You must specify a key with -k\n"); - usage(); - exit(1); - } - Boolean exists = dbKeyExists(Key, &data); - if (Textual) { - if (Verbose) - printf("%s exists:\t", Key); - printf("%s\n", exists ? "TRUE" : "FALSE"); - } else { - printf("%s\n", exists ? "1" : "0"); - } - - return 0; + if (CheckExists) { + if (pkgs == NULL) { + warnx("You must specify one or more keys...\n"); + usage(); + exit(1); } - if (Print) { - if (Key != NULL) { - if (dbKeyExists(Key, &data)) - printf("%s -> %s\n", Key, (char *)data.data); - else - printf("%s: does not exist\n", Key); - } else { - DBT key; - while (dbscan(database, &key, &data) == 0) { - printf("%s -> %s\n", (char *)key.data, (char *)data.data); - } - } + if (Verbose) + printf("Exists:\n"); + + while (*pkgs) { + Boolean exists = dbKeyExists(*pkgs, &data); + if (Verbose) + printf("%-12s : ", *pkgs); - return 0; + if (Textual) + printf("%s\n", exists ? "TRUE" : "FALSE"); + else + printf("%s\n", exists ? "1" : "0"); + + *pkgs++; } - for (i=0; pkgs[i] != NULL; i++) { - error += pkg_do(pkgs[i]); + return 0; + } + + if (Print) { + if (pkgs != NULL) { + if (Verbose) + printf("Printing keys:\n"); + while (*pkgs) { + if (dbKeyExists(*pkgs, &data)) + printf("%-18s: %s\n", *pkgs, (char *)data.data); + else + printf("%-18s: (null) does not exist\n", *pkgs); + + *pkgs++; + } + + } else { + if (Verbose) + printf("Printing the whole database\n"); + DBT key; + while (dbscan(database, &key, &data) == 0) { + printf("%-18s : %s\n", (char *)key.data, (char *)data.data); + } } + return 0; + } + + for (i=0; pkgs[i] != NULL; i++) { + error += pkg_do(pkgs[i]); + } - return error; + return error; } ==== //depot/projects/soc2008/andenore_pkginstall/src/usr.sbin/pkg_install/convert/pkg_convert.1#4 (text+ko) ==== @@ -24,6 +24,9 @@ .Sh SYNOPSIS .Nm .Op Fl v +.Op Fl et Ar key +.Op Fl p Ar key + .Sh DESCRIPTION The .Nm @@ -36,8 +39,12 @@ Turn on verbose output. .It Fl e Ar key Checks if key is in database. +.It Fl p Ar key +Prints the data at the key. If a key is not specified, the whole database is +printed. .It Fl t -Turns off textual output for key-check (outputs 1 if key exists 0 if not). +Turns on textual output for key-check (outputs 'true' if key exists 'false' if +not). .El .Sh FILES .Bl -tag -width /var/db/pkg -compact
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200807211152.m6LBqOwp096051>