Merge branch 'pw/p4-view-updates'
[gitweb.git] / gpg-interface.c
index ff232c8c5d47f42481e3de365442e46967432022..09ab64aa24a1239cdb1ed5259c0b975a89594e9c 100644 (file)
@@ -5,6 +5,7 @@
 #include "sigchain.h"
 
 static char *configured_signing_key;
+static const char *gpg_program = "gpg";
 
 void set_signing_key(const char *key)
 {
@@ -15,9 +16,12 @@ void set_signing_key(const char *key)
 int git_gpg_config(const char *var, const char *value, void *cb)
 {
        if (!strcmp(var, "user.signingkey")) {
+               set_signing_key(value);
+       }
+       if (!strcmp(var, "gpg.program")) {
                if (!value)
                        return config_error_nonbool(var);
-               set_signing_key(value);
+               gpg_program = xstrdup(value);
        }
        return 0;
 }
@@ -46,7 +50,7 @@ int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *sig
        gpg.argv = args;
        gpg.in = -1;
        gpg.out = -1;
-       args[0] = "gpg";
+       args[0] = gpg_program;
        args[1] = "-bsau";
        args[2] = signing_key;
        args[3] = NULL;
@@ -91,20 +95,18 @@ int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *sig
 
 /*
  * Run "gpg" to see if the payload matches the detached signature.
- * gpg_output_to tells where the output from "gpg" should go:
- *   < 0: /dev/null
- *   = 0: standard error of the calling process
- *   > 0: the specified file descriptor
+ * gpg_output, when set, receives the diagnostic output from GPG.
  */
 int verify_signed_buffer(const char *payload, size_t payload_size,
                         const char *signature, size_t signature_size,
                         struct strbuf *gpg_output)
 {
        struct child_process gpg;
-       const char *args_gpg[] = {"gpg", "--verify", "FILE", "-", NULL};
+       const char *args_gpg[] = {NULL, "--verify", "FILE", "-", NULL};
        char path[PATH_MAX];
        int fd, ret;
 
+       args_gpg[0] = gpg_program;
        fd = git_mkstemp(path, PATH_MAX, ".git_vtag_tmpXXXXXX");
        if (fd < 0)
                return error("could not create temporary file '%s': %s",