Merge branch 'fc/git-prompt-script'
[gitweb.git] / builtin / log.c
index 656bddfb03877a71e767d2a478b2a9e40ab2a8c7..4f1b42a685ff76a64e7c8386007ca450c5032cb1 100644 (file)
@@ -21,6 +21,7 @@
 #include "parse-options.h"
 #include "branch.h"
 #include "streaming.h"
+#include "version.h"
 
 /* Set a default date-time format for git log ("log.date" config variable) */
 static const char *default_date_mode = NULL;
@@ -663,7 +664,8 @@ static FILE *realstdout = NULL;
 static const char *output_directory = NULL;
 static int outdir_offset;
 
-static int reopen_stdout(struct commit *commit, struct rev_info *rev, int quiet)
+static int reopen_stdout(struct commit *commit, const char *subject,
+                        struct rev_info *rev, int quiet)
 {
        struct strbuf filename = STRBUF_INIT;
        int suffix_len = strlen(fmt_patch_suffix) + 1;
@@ -677,7 +679,7 @@ static int reopen_stdout(struct commit *commit, struct rev_info *rev, int quiet)
                        strbuf_addch(&filename, '/');
        }
 
-       get_patch_filename(commit, rev->nr, fmt_patch_suffix, &filename);
+       get_patch_filename(commit, subject, rev->nr, fmt_patch_suffix, &filename);
 
        if (!quiet)
                fprintf(realstdout, "%s\n", filename.buf + outdir_offset);
@@ -739,7 +741,8 @@ static void gen_message_id(struct rev_info *info, char *base)
 {
        struct strbuf buf = STRBUF_INIT;
        strbuf_addf(&buf, "%s.%lu.git.%s", base,
-                   (unsigned long) time(NULL), ident_default_email());
+                   (unsigned long) time(NULL),
+                   git_committer_info(IDENT_NO_NAME|IDENT_NO_DATE|IDENT_STRICT));
        info->message_id = strbuf_detach(&buf, NULL);
 }
 
@@ -778,7 +781,6 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
        const char *encoding = "UTF-8";
        struct diff_options opts;
        int need_8bit_cte = 0;
-       struct commit *commit = NULL;
        struct pretty_print_context pp = {0};
 
        if (rev->commit_format != CMIT_FMT_EMAIL)
@@ -786,31 +788,10 @@ static void make_cover_letter(struct rev_info *rev, int use_stdout,
 
        committer = git_committer_info(0);
 
-       if (!numbered_files) {
-               /*
-                * We fake a commit for the cover letter so we get the filename
-                * desired.
-                */
-               commit = xcalloc(1, sizeof(*commit));
-               commit->buffer = xmalloc(400);
-               snprintf(commit->buffer, 400,
-                       "tree 0000000000000000000000000000000000000000\n"
-                       "parent %s\n"
-                       "author %s\n"
-                       "committer %s\n\n"
-                       "cover letter\n",
-                       sha1_to_hex(head->object.sha1), committer, committer);
-       }
-
-       if (!use_stdout && reopen_stdout(commit, rev, quiet))
+       if (!use_stdout &&
+           reopen_stdout(NULL, numbered_files ? NULL : "cover-letter", rev, quiet))
                return;
 
-       if (commit) {
-
-               free(commit->buffer);
-               free(commit);
-       }
-
        log_write_email_headers(rev, head, &pp.subject, &pp.after_subject,
                                &need_8bit_cte);
 
@@ -1167,7 +1148,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        if (do_signoff) {
                const char *committer;
                const char *endpos;
-               committer = git_committer_info(IDENT_ERROR_ON_NO_NAME);
+               committer = git_committer_info(IDENT_STRICT);
                endpos = strchr(committer, '>');
                if (!endpos)
                        die(_("bogus committer info %s"), committer);
@@ -1405,8 +1386,8 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                        gen_message_id(&rev, sha1_to_hex(commit->object.sha1));
                }
 
-               if (!use_stdout && reopen_stdout(numbered_files ? NULL : commit,
-                                                &rev, quiet))
+               if (!use_stdout &&
+                   reopen_stdout(numbered_files ? NULL : commit, NULL, &rev, quiet))
                        die(_("Failed to create output files"));
                shown = log_tree_commit(&rev, commit);
                free(commit->buffer);