]> git.ipfire.org Git - thirdparty/ccache.git/commitdiff
Add --hash-file command, for convenience
authorAnders F Björklund <anders.f.bjorklund@gmail.com>
Sat, 23 Jun 2018 17:09:06 +0000 (19:09 +0200)
committerAnders F Björklund <anders.f.bjorklund@gmail.com>
Sat, 23 Jun 2018 17:30:03 +0000 (19:30 +0200)
src/ccache.c
test/suites/base.bash

index eaa9b308fbee86fa155a711089fd80162cb7454d..4fd25505d3850c4b63ca05ca3feb4c7c4d776bc0 100644 (file)
@@ -3486,12 +3486,14 @@ static int
 ccache_main_options(int argc, char *argv[])
 {
        enum longopts {
-               DUMP_MANIFEST
+               DUMP_MANIFEST,
+               HASH_FILE
        };
        static const struct option options[] = {
                {"cleanup",       no_argument,       0, 'c'},
                {"clear",         no_argument,       0, 'C'},
                {"dump-manifest", required_argument, 0, DUMP_MANIFEST},
+               {"hash-file",     required_argument, 0, HASH_FILE},
                {"help",          no_argument,       0, 'h'},
                {"max-files",     required_argument, 0, 'F'},
                {"max-size",      required_argument, 0, 'M'},
@@ -3502,6 +3504,8 @@ ccache_main_options(int argc, char *argv[])
                {"zero-stats",    no_argument,       0, 'z'},
                {0, 0, 0, 0}
        };
+       struct mdfour md;
+       char *s;
 
        int c;
        while ((c = getopt_long(argc, argv, "cChF:M:o:psVz", options, NULL)) != -1) {
@@ -3510,6 +3514,19 @@ ccache_main_options(int argc, char *argv[])
                        manifest_dump(optarg, stdout);
                        break;
 
+               case HASH_FILE:
+                       initialize();
+                       hash_start(&md);
+                       if (str_eq(optarg, "-")) {
+                               hash_fd(&md, STDIN_FILENO);
+                       } else {
+                               hash_file(&md, optarg);
+                       }
+                       s = hash_result(&md);
+                       puts(s);
+                       free(s);
+                       break;
+
                case 'c': // --cleanup
                        initialize();
                        clean_up_all(conf);
index 307100e84d3888519e20230370186e8f187450b8..e53d40aaffc2009528b0c0ea0081b47c59db7bad 100644 (file)
@@ -913,6 +913,20 @@ EOF
             test_failed "boolean env var '$invalid_val' should be rejected"
         fi
     done
+
+    # -------------------------------------------------------------------------
+    TEST "--hash-file"
+
+    >empty
+    $CCACHE --hash-file empty > hash.out
+    printf "a" | $CCACHE --hash-file - >> hash.out
+
+    if grep '31d6cfe0d16ae931b73c59d7e0c089c0-0' hash.out >/dev/null 2>&1 && \
+       grep 'bde52cb31de33e46245e05fbdbd6fb24-1' hash.out >/dev/null 2>&1; then
+        : OK
+    else
+        test_failed "Unexpected output of --hash-file"
+    fi
 }
 
 # =============================================================================