Imported Upstream version 2.27.0
[platform/upstream/git.git] / builtin / log.c
index 83a4a61..d104d5c 100644 (file)
@@ -46,6 +46,7 @@ static int default_abbrev_commit;
 static int default_show_root = 1;
 static int default_follow;
 static int default_show_signature;
+static int default_encode_email_headers = 1;
 static int decoration_style;
 static int decoration_given;
 static int use_mailmap_config = 1;
@@ -151,6 +152,7 @@ static void cmd_log_init_defaults(struct rev_info *rev)
        rev->show_root_diff = default_show_root;
        rev->subject_prefix = fmt_patch_subject_prefix;
        rev->show_signature = default_show_signature;
+       rev->encode_email_headers = default_encode_email_headers;
        rev->diffopt.flags.allow_textconv = 1;
 
        if (default_date_mode)
@@ -164,21 +166,24 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
        int quiet = 0, source = 0, mailmap;
        static struct line_opt_callback_data line_cb = {NULL, NULL, STRING_LIST_INIT_DUP};
        static struct string_list decorate_refs_exclude = STRING_LIST_INIT_NODUP;
+       static struct string_list decorate_refs_exclude_config = STRING_LIST_INIT_NODUP;
        static struct string_list decorate_refs_include = STRING_LIST_INIT_NODUP;
        struct decoration_filter decoration_filter = {&decorate_refs_include,
-                                                     &decorate_refs_exclude};
+                                                     &decorate_refs_exclude,
+                                                     &decorate_refs_exclude_config};
        static struct revision_sources revision_sources;
 
        const struct option builtin_log_options[] = {
                OPT__QUIET(&quiet, N_("suppress diff output")),
                OPT_BOOL(0, "source", &source, N_("show source")),
                OPT_BOOL(0, "use-mailmap", &mailmap, N_("Use mail map file")),
+               OPT_ALIAS(0, "mailmap", "use-mailmap"),
                OPT_STRING_LIST(0, "decorate-refs", &decorate_refs_include,
                                N_("pattern"), N_("only decorate refs that match <pattern>")),
                OPT_STRING_LIST(0, "decorate-refs-exclude", &decorate_refs_exclude,
                                N_("pattern"), N_("do not decorate refs that match <pattern>")),
-               { OPTION_CALLBACK, 0, "decorate", NULL, NULL, N_("decorate options"),
-                 PARSE_OPT_OPTARG, decorate_callback},
+               OPT_CALLBACK_F(0, "decorate", NULL, NULL, N_("decorate options"),
+                              PARSE_OPT_OPTARG, decorate_callback),
                OPT_CALLBACK('L', NULL, &line_cb, "n,m:file",
                             N_("Process line range n,m in file, counting from 1"),
                             log_line_range_callback),
@@ -236,7 +241,19 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix,
        }
 
        if (decoration_style) {
+               const struct string_list *config_exclude =
+                       repo_config_get_value_multi(the_repository,
+                                                   "log.excludeDecoration");
+
+               if (config_exclude) {
+                       struct string_list_item *item;
+                       for_each_string_list_item(item, config_exclude)
+                               string_list_append(&decorate_refs_exclude_config,
+                                                  item->string);
+               }
+
                rev->show_decorations = 1;
+
                load_ref_decorations(&decoration_filter, decoration_style);
        }
 
@@ -438,6 +455,10 @@ static int git_log_config(const char *var, const char *value, void *cb)
                return git_config_string(&fmt_pretty, var, value);
        if (!strcmp(var, "format.subjectprefix"))
                return git_config_string(&fmt_patch_subject_prefix, var, value);
+       if (!strcmp(var, "format.encodeemailheaders")) {
+               default_encode_email_headers = git_config_bool(var, value);
+               return 0;
+       }
        if (!strcmp(var, "log.abbrevcommit")) {
                default_abbrev_commit = git_config_bool(var, value);
                return 0;
@@ -1625,12 +1646,12 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        int creation_factor = -1;
 
        const struct option builtin_format_patch_options[] = {
-               { OPTION_CALLBACK, 'n', "numbered", &numbered, NULL,
+               OPT_CALLBACK_F('n', "numbered", &numbered, NULL,
                            N_("use [PATCH n/m] even with a single patch"),
-                           PARSE_OPT_NOARG, numbered_callback },
-               { OPTION_CALLBACK, 'N', "no-numbered", &numbered, NULL,
+                           PARSE_OPT_NOARG, numbered_callback),
+               OPT_CALLBACK_F('N', "no-numbered", &numbered, NULL,
                            N_("use [PATCH] even with multiple patches"),
-                           PARSE_OPT_NOARG | PARSE_OPT_NONEG, no_numbered_callback },
+                           PARSE_OPT_NOARG | PARSE_OPT_NONEG, no_numbered_callback),
                OPT_BOOL('s', "signoff", &do_signoff, N_("add Signed-off-by:")),
                OPT_BOOL(0, "stdout", &use_stdout,
                            N_("print patches to standard out")),
@@ -1644,21 +1665,21 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                            N_("start numbering patches at <n> instead of 1")),
                OPT_INTEGER('v', "reroll-count", &reroll_count,
                            N_("mark the series as Nth re-roll")),
-               { OPTION_CALLBACK, 0, "rfc", &rev, NULL,
+               OPT_CALLBACK_F(0, "rfc", &rev, NULL,
                            N_("Use [RFC PATCH] instead of [PATCH]"),
-                           PARSE_OPT_NOARG | PARSE_OPT_NONEG, rfc_callback },
+                           PARSE_OPT_NOARG | PARSE_OPT_NONEG, rfc_callback),
                OPT_STRING(0, "cover-from-description", &cover_from_description_arg,
                            N_("cover-from-description-mode"),
                            N_("generate parts of a cover letter based on a branch's description")),
-               { OPTION_CALLBACK, 0, "subject-prefix", &rev, N_("prefix"),
+               OPT_CALLBACK_F(0, "subject-prefix", &rev, N_("prefix"),
                            N_("Use [<prefix>] instead of [PATCH]"),
-                           PARSE_OPT_NONEG, subject_prefix_callback },
-               { OPTION_CALLBACK, 'o', "output-directory", &output_directory,
+                           PARSE_OPT_NONEG, subject_prefix_callback),
+               OPT_CALLBACK_F('o', "output-directory", &output_directory,
                            N_("dir"), N_("store resulting files in <dir>"),
-                           PARSE_OPT_NONEG, output_directory_callback },
-               { OPTION_CALLBACK, 'k', "keep-subject", &rev, NULL,
+                           PARSE_OPT_NONEG, output_directory_callback),
+               OPT_CALLBACK_F('k', "keep-subject", &rev, NULL,
                            N_("don't strip/add [PATCH]"),
-                           PARSE_OPT_NOARG | PARSE_OPT_NONEG, keep_callback },
+                           PARSE_OPT_NOARG | PARSE_OPT_NONEG, keep_callback),
                OPT_BOOL(0, "no-binary", &no_binary_diff,
                         N_("don't output binary diffs")),
                OPT_BOOL(0, "zero-commit", &zero_commit,
@@ -1669,27 +1690,25 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
                              N_("show patch format instead of default (patch + stat)"),
                              1, PARSE_OPT_NONEG),
                OPT_GROUP(N_("Messaging")),
-               { OPTION_CALLBACK, 0, "add-header", NULL, N_("header"),
-                           N_("add email header"), 0, header_callback },
-               { OPTION_CALLBACK, 0, "to", NULL, N_("email"), N_("add To: header"),
-                           0, to_callback },
-               { OPTION_CALLBACK, 0, "cc", NULL, N_("email"), N_("add Cc: header"),
-                           0, cc_callback },
-               { OPTION_CALLBACK, 0, "from", &from, N_("ident"),
+               OPT_CALLBACK(0, "add-header", NULL, N_("header"),
+                           N_("add email header"), header_callback),
+               OPT_CALLBACK(0, "to", NULL, N_("email"), N_("add To: header"), to_callback),
+               OPT_CALLBACK(0, "cc", NULL, N_("email"), N_("add Cc: header"), cc_callback),
+               OPT_CALLBACK_F(0, "from", &from, N_("ident"),
                            N_("set From address to <ident> (or committer ident if absent)"),
-                           PARSE_OPT_OPTARG, from_callback },
+                           PARSE_OPT_OPTARG, from_callback),
                OPT_STRING(0, "in-reply-to", &in_reply_to, N_("message-id"),
                            N_("make first mail a reply to <message-id>")),
-               { OPTION_CALLBACK, 0, "attach", &rev, N_("boundary"),
+               OPT_CALLBACK_F(0, "attach", &rev, N_("boundary"),
                            N_("attach the patch"), PARSE_OPT_OPTARG,
-                           attach_callback },
-               { OPTION_CALLBACK, 0, "inline", &rev, N_("boundary"),
+                           attach_callback),
+               OPT_CALLBACK_F(0, "inline", &rev, N_("boundary"),
                            N_("inline the patch"),
                            PARSE_OPT_OPTARG | PARSE_OPT_NONEG,
-                           inline_callback },
-               { OPTION_CALLBACK, 0, "thread", &thread, N_("style"),
+                           inline_callback),
+               OPT_CALLBACK_F(0, "thread", &thread, N_("style"),
                            N_("enable message threading, styles: shallow, deep"),
-                           PARSE_OPT_OPTARG, thread_callback },
+                           PARSE_OPT_OPTARG, thread_callback),
                OPT_STRING(0, "signature", &signature, N_("signature"),
                            N_("add a signature")),
                OPT_STRING(0, "base", &base_commit, N_("base-commit"),
@@ -1719,6 +1738,7 @@ int cmd_format_patch(int argc, const char **argv, const char *prefix)
        rev.show_notes = show_notes;
        memcpy(&rev.notes_opt, &notes_opt, sizeof(notes_opt));
        rev.commit_format = CMIT_FMT_EMAIL;
+       rev.encode_email_headers = default_encode_email_headers;
        rev.expand_tabs_in_log_default = 0;
        rev.verbose_header = 1;
        rev.diff = 1;