@@ -470,11 +470,35 @@ int git_gpg_config(const char *var, const char *value, void *cb)
return 0;
}
+/* Returns the first public key from an ssh-agent to use for signing */
+static char *get_default_ssh_signing_key(void)
+{
+ struct child_process ssh_add = CHILD_PROCESS_INIT;
+ int ret = -1;
+ struct strbuf key_stdout = STRBUF_INIT;
+ struct strbuf **keys;
+
+ strvec_pushl(&ssh_add.args, "ssh-add", "-L", NULL);
+ ret = pipe_command(&ssh_add, NULL, 0, &key_stdout, 0, NULL, 0);
+ if (!ret) {
+ keys = strbuf_split_max(&key_stdout, '\n', 2);
+ if (keys[0])
+ return strbuf_detach(keys[0], NULL);
+ }
+
+ strbuf_release(&key_stdout);
+ return "";
+}
+
const char *get_signing_key(void)
{
if (configured_signing_key)
return configured_signing_key;
- return git_committer_info(IDENT_STRICT|IDENT_NO_DATE);
+ if (!strcmp(use_format->name, "ssh")) {
+ return get_default_ssh_signing_key();
+ } else {
+ return git_committer_info(IDENT_STRICT | IDENT_NO_DATE);
+ }
}
int sign_buffer(struct strbuf *buffer, struct strbuf *signature, const char *signing_key)