gpg: centralize printing signature buffers
authorbrian m. carlson <sandals@crustytoothpaste.net>
Sun, 21 Jun 2015 23:14:41 +0000 (23:14 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 22 Jun 2015 21:20:47 +0000 (14:20 -0700)
The code to handle printing of signature data from a struct
signature_check is very similar between verify-commit and verify-tag.
Place this in a single function. verify-tag retains its special case
behavior of printing the tag even when no valid signature is found.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/verify-commit.c
builtin/verify-tag.c
gpg-interface.c
gpg-interface.h
index e30f7cfbc16c44cd5da8b122c29849a2106d4a2d..016319ada38e9ce45b051c45cb0cdd1075ff6453 100644 (file)
@@ -26,12 +26,7 @@ static int run_gpg_verify(const unsigned char *sha1, const char *buf, unsigned l
        memset(&signature_check, 0, sizeof(signature_check));
 
        ret = check_commit_signature(lookup_commit(sha1), &signature_check);
-
-       if (verbose && signature_check.payload)
-               fputs(signature_check.payload, stdout);
-
-       if (signature_check.gpg_output)
-               fputs(signature_check.gpg_output, stderr);
+       print_signature_buffer(&signature_check, verbose ? GPG_VERIFY_VERBOSE : 0);
 
        signature_check_clear(&signature_check);
        return ret;
index 8750bef016314c91b93e608b86121c63079a3398..d67e3dbd10f651799c8632f65ea043e95b9b4133 100644 (file)
@@ -27,14 +27,15 @@ static int run_gpg_verify(const char *buf, unsigned long size, int verbose)
        memset(&sigc, 0, sizeof(sigc));
 
        len = parse_signature(buf, size);
-       if (verbose)
-               write_in_full(1, buf, len);
 
-       if (size == len)
+       if (size == len) {
+               if (verbose)
+                       write_in_full(1, buf, len);
                return error("no signature found");
+       }
 
        ret = check_signature(buf, len, buf + len, size - len, &sigc);
-       fputs(sigc.gpg_output, stderr);
+       print_signature_buffer(&sigc, verbose ? GPG_VERIFY_VERBOSE : 0);
 
        signature_check_clear(&sigc);
        return ret;
index 77a4da627e227eb191ce99812f53cc7f90479f1f..e764fb625ba251c83eb425221bbc5b3a03ac3f56 100644 (file)
@@ -85,6 +85,15 @@ int check_signature(const char *payload, size_t plen, const char *signature,
        return sigc->result != 'G' && sigc->result != 'U';
 }
 
+void print_signature_buffer(const struct signature_check *sigc, unsigned flags)
+{
+       if (flags & GPG_VERIFY_VERBOSE && sigc->payload)
+               fputs(sigc->payload, stdout);
+
+       if (sigc->gpg_output)
+               fputs(sigc->gpg_output, stderr);
+}
+
 /*
  * Look at GPG signed content (e.g. a signed tag object), whose
  * payload is followed by a detached signature on it.  Return the
index e2aabde305b7d77c27e92bfbbf273a513ae2374f..1207861e7a6d20ef663124a60d0ba755f8abf72f 100644 (file)
@@ -1,6 +1,8 @@
 #ifndef GPG_INTERFACE_H
 #define GPG_INTERFACE_H
 
+#define GPG_VERIFY_VERBOSE     1
+
 struct signature_check {
        char *payload;
        char *gpg_output;
@@ -29,5 +31,6 @@ extern void set_signing_key(const char *);
 extern const char *get_signing_key(void);
 extern int check_signature(const char *payload, size_t plen,
        const char *signature, size_t slen, struct signature_check *sigc);
+void print_signature_buffer(const struct signature_check *sigc, unsigned flags);
 
 #endif