Merge branch 'bn/http-cookiefile-config'
[gitweb.git] / builtin / verify-tag.c
index 53c68fce3ac182db907224d12d89659469f4b9d6..99f8148cf79bac1d636bfe35a93282f3da2ebfd7 100644 (file)
@@ -18,46 +18,6 @@ static const char * const verify_tag_usage[] = {
                NULL
 };
 
-static int run_gpg_verify(const char *buf, unsigned long size, int verbose)
-{
-       int len;
-
-       len = parse_signature(buf, size);
-       if (verbose)
-               write_in_full(1, buf, len);
-
-       if (size == len)
-               return error("no signature found");
-
-       return verify_signed_buffer(buf, len, buf + len, size - len, NULL, NULL);
-}
-
-static int verify_tag(const char *name, int verbose)
-{
-       enum object_type type;
-       unsigned char sha1[20];
-       char *buf;
-       unsigned long size;
-       int ret;
-
-       if (get_sha1(name, sha1))
-               return error("tag '%s' not found.", name);
-
-       type = sha1_object_info(sha1, NULL);
-       if (type != OBJ_TAG)
-               return error("%s: cannot verify a non-tag object of type %s.",
-                               name, typename(type));
-
-       buf = read_sha1_file(sha1, &type, &size);
-       if (!buf)
-               return error("%s: unable to read file.", name);
-
-       ret = run_gpg_verify(buf, size, verbose);
-
-       free(buf);
-       return ret;
-}
-
 static int git_verify_tag_config(const char *var, const char *value, void *cb)
 {
        int status = git_gpg_config(var, value, cb);
@@ -69,8 +29,10 @@ static int git_verify_tag_config(const char *var, const char *value, void *cb)
 int cmd_verify_tag(int argc, const char **argv, const char *prefix)
 {
        int i = 1, verbose = 0, had_error = 0;
+       unsigned flags = 0;
        const struct option verify_tag_options[] = {
                OPT__VERBOSE(&verbose, N_("print tag contents")),
+               OPT_BIT(0, "raw", &flags, N_("print raw gpg status output"), GPG_VERIFY_RAW),
                OPT_END()
        };
 
@@ -81,11 +43,16 @@ int cmd_verify_tag(int argc, const char **argv, const char *prefix)
        if (argc <= i)
                usage_with_options(verify_tag_usage, verify_tag_options);
 
-       /* sometimes the program was terminated because this signal
-        * was received in the process of writing the gpg input: */
-       signal(SIGPIPE, SIG_IGN);
-       while (i < argc)
-               if (verify_tag(argv[i++], verbose))
+       if (verbose)
+               flags |= GPG_VERIFY_VERBOSE;
+
+       while (i < argc) {
+               unsigned char sha1[20];
+               const char *name = argv[i++];
+               if (get_sha1(name, sha1))
+                       had_error = !!error("tag '%s' not found.", name);
+               else if (gpg_verify_tag(sha1, name, flags))
                        had_error = 1;
+       }
        return had_error;
 }