]> pd.if.org Git - zpackage/commitdiff
allow partial package ids in packagehash
authorNathan Wagner <nw@hydaspes.if.org>
Fri, 15 Feb 2019 12:04:53 +0000 (12:04 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Fri, 15 Feb 2019 18:25:06 +0000 (18:25 +0000)
Added a -v option to prepend the (found) package id to hashes.

doc/zpm-packagehash.8
src/packagehash.c

index 47601981aa1515beb45e80f25013dfedcda23fd9..7024e829c61529e12418bf71ef674a2b0140c5ba 100644 (file)
@@ -1,25 +1,20 @@
-.TH zpm-packagehash 8 2019-02-14 "ZPM 0.3"
+.TH zpm-packagehash 8 2019-02-15 "ZPM 0.3"
 .SH NAME
 zpm-packagehash \- run packagehash
 .SH SYNOPSIS
-                       case 'f': dbfile = optarg; break;
-                       case 's': set = 1; break;
-                       case 'S': clear = 1; break;
-                       case 'c': check = 1; break;
-                       case 'q': quiet = 1; break;
-                       case 'e': showcurrent = 1; break;
 .B zpm packagehash
 [
 .BI -f " pkgfile"
 ]
 [
-.B -sScqe
+.B -sScqev
 ]
 .RI [ package ] 
 .SH DESCRIPTION
 \fBzpm-packagehash\fR
-calculates, prints, or sets the hash of a package.  The package must
-be specified as a complete package triple.
+calculates, prints, or sets the hash of a package.  The package may
+be specified as a partial package id, which will be looked up as
+if by zpm-findpkg.
 .SH OPTIONS
 .TP
 \-f
@@ -37,6 +32,9 @@ check the package hash against one given as an additional argument
 \-q
 Don't output anything to stdout.
 .TP
+\-v
+When printing hashes, prepend the package id and a space character.
+.TP
 \-e
 Show the current package hash, rather than the calculated one.
 .SH EXAMPLES
@@ -53,3 +51,4 @@ ZPMDB
 Nathan Wagner
 .SH SEE ALSO
 .BR zpm (8)
+.BR zpm-findpkg (8)
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);