Code

git config: error when editing a repo config and not being in one
[git.git] / builtin-log.c
index 4f438db4c1985ef2d634dfedcb8a7075ce19a9e5..5eaec5d24e6ca70af2879ce9439eb2ba831211b6 100644 (file)
@@ -458,6 +458,7 @@ static void add_header(const char *value)
 #define THREAD_SHALLOW 1
 #define THREAD_DEEP 2
 static int thread = 0;
+static int do_signoff = 0;
 
 static int git_format_config(const char *var, const char *value, void *cb)
 {
@@ -507,6 +508,10 @@ static int git_format_config(const char *var, const char *value, void *cb)
                thread = git_config_bool(var, value) && THREAD_SHALLOW;
                return 0;
        }
+       if (!strcmp(var, "format.signoff")) {
+               do_signoff = git_config_bool(var, value);
+               return 0;
+       }
 
        return git_log_config(var, value, cb);
 }
@@ -607,7 +612,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
                              int nr, struct commit **list, struct commit *head)
 {
        const char *committer;
-       char *head_sha1;
        const char *subject_start = NULL;
        const char *body = "*** SUBJECT HERE ***\n\n*** BLURB HERE ***\n";
        const char *msg;
@@ -624,7 +628,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
                die("Cover letter needs email format");
 
        committer = git_committer_info(0);
-       head_sha1 = sha1_to_hex(head->object.sha1);
 
        if (!numbered_files) {
                /*
@@ -639,7 +642,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
                        "author %s\n"
                        "committer %s\n\n"
                        "cover letter\n",
-                       head_sha1, committer, committer);
+                       sha1_to_hex(head->object.sha1), committer, committer);
        }
 
        if (!use_stdout && reopen_stdout(commit, rev))
@@ -651,7 +654,7 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
                free(commit);
        }
 
-       log_write_email_headers(rev, head_sha1, &subject_start, &extra_headers,
+       log_write_email_headers(rev, head, &subject_start, &extra_headers,
                                &need_8bit_cte);
 
        msg = body;
@@ -820,13 +823,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                }
                else if (!strcmp(argv[i], "--signoff") ||
                         !strcmp(argv[i], "-s")) {
-                       const char *committer;
-                       const char *endpos;
-                       committer = git_committer_info(IDENT_ERROR_ON_NO_NAME);
-                       endpos = strchr(committer, '>');
-                       if (!endpos)
-                               die("bogus committer info %s", committer);
-                       add_signoff = xmemdupz(committer, endpos - committer + 1);
+                       do_signoff = 1;
                }
                else if (!strcmp(argv[i], "--attach")) {
                        rev.mime_boundary = git_version_string;
@@ -873,11 +870,23 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                        cover_letter = 1;
                else if (!strcmp(argv[i], "--no-binary"))
                        no_binary_diff = 1;
+               else if (!prefixcmp(argv[i], "--add-header="))
+                       add_header(argv[i] + 13);
                else
                        argv[j++] = argv[i];
        }
        argc = j;
 
+       if (do_signoff) {
+               const char *committer;
+               const char *endpos;
+               committer = git_committer_info(IDENT_ERROR_ON_NO_NAME);
+               endpos = strchr(committer, '>');
+               if (!endpos)
+                       die("bogus committer info %s", committer);
+               add_signoff = xmemdupz(committer, endpos - committer + 1);
+       }
+
        for (i = 0; i < extra_hdr_nr; i++) {
                strbuf_addstr(&buf, extra_hdr[i]);
                strbuf_addch(&buf, '\n');
@@ -1011,6 +1020,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                const char *msgid = clean_message_id(in_reply_to);
                string_list_append(msgid, rev.ref_message_ids);
        }
+       rev.numbered_files = numbered_files;
+       rev.patch_suffix = fmt_patch_suffix;
        if (cover_letter) {
                if (thread)
                        gen_message_id(&rev, "cover");