]> pd.if.org Git - zpackage/blobdiff - src/packagehash.c
allow partial package ids in packagehash
[zpackage] / src / packagehash.c
index 6d5b9128fabb5e4a007305f10637111af24dd649..ee4f67655d4f770327337057748afc7917476b11 100644 (file)
@@ -13,13 +13,14 @@ void usage(void) {
 }
 
 int main(int ac, char **av){
-       int opt;
+       int opt, argn;
        struct zpm pkg;
        char *dbfile;
 
        int set = 0, clear = 0, showcurrent = 0;
-       int check = 0;
-       int quiet = 0;
+       int check = 0, quiet = 0, checkfail = 0, verbose = 0;
+       char hash[ZPM_HASH_STRLEN+1];
+       char *pkgid = 0, *current = 0, *display = hash;
 
        dbfile = getenv("ZPMDB");
        if (!dbfile) {
@@ -31,7 +32,7 @@ int main(int ac, char **av){
         * show current -e
         * check -c
         */ 
-       while ((opt = getopt(ac, av, "f:sScqe")) != -1) {
+       while ((opt = getopt(ac, av, "f:sScqev")) != -1) {
                switch (opt) {
                        case 'f': dbfile = optarg; break;
                        case 's': set = 1; break;
@@ -39,25 +40,25 @@ int main(int ac, char **av){
                        case 'c': check = 1; break;
                        case 'q': quiet = 1; break;
                        case 'e': showcurrent = 1; break;
+                       case 'v': verbose = 1; break;
                        default:
                                  usage();
                                  exit(EXIT_FAILURE);
                                  break;
                }
        }
-       int argn = optind;
+       argn = optind;
 
        if (!dbfile) {
                fprintf(stderr, "must specify db\n");
                return 1;
        }
 
-       char *pkgid = av[argn];
-       char hash[ZPM_HASH_STRLEN+1];
-       char *current = 0, *display = hash;
-       int checkfail = 0;
-
        if (zpm_open(&pkg, dbfile)) {
+               pkgid = zpm_findpkg(&pkg, av[argn], NULL);
+               if (!pkgid) {
+                       exit(EXIT_FAILURE);
+               }
                if (check || showcurrent) {
                        current = zpm_db_string(&pkg, "select hash from packages_pkgid where pkgid = %Q", pkgid);
                }
@@ -81,6 +82,9 @@ int main(int ac, char **av){
 
                zpm_close(&pkg);
                if (display && !quiet) {
+                       if (verbose) {
+                               printf("%s ", pkgid);
+                       }
                        printf("%s\n", display);
                }
                free(current);