[PATCH 1/4] oneline: parse --newlineafter flag
From: John Cai via GitGitGadget <hidden>
Date: 2021-10-29 21:15:34
Subsystem:
the rest · Maintainer:
Linus Torvalds
From: John Cai <redacted> * revision.h: add newlineafter flag type * builtin/log.c: parse newlineafter flag with callback Signed-off-by: John Cai <redacted> --- builtin/log.c | 25 +++++++++++++++++++++++++ revision.h | 4 ++++ 2 files changed, 29 insertions(+)
diff --git a/builtin/log.c b/builtin/log.c
index f75d87e8d7f..3758c73760c 100644
--- a/builtin/log.c
+++ b/builtin/log.c@@ -53,6 +53,7 @@ static int decoration_given; static int use_mailmap_config = 1; static const char *fmt_patch_subject_prefix = "PATCH"; static int fmt_patch_name_max = FORMAT_PATCH_NAME_MAX_DEFAULT; +static int newlineafter = NEWLINEAFTER_NONE; static const char *fmt_pretty; static const char * const builtin_log_usage[] = {
@@ -132,6 +133,27 @@ static int log_line_range_callback(const struct option *option, const char *arg, return 0; } +static int parse_newlineafter(const char *value) +{ + if (!strcmp(value, "decorations")) + return NEWLINEAFTER_DECORATIONS; + + return NEWLINEAFTER_NONE; +} + +static int option_parse_newlineafter(const struct option *opt, + const char *arg, int unset) +{ + int *newlineafter = opt->value; + + if (unset) + *newlineafter = NEWLINEAFTER_NONE; + else + *newlineafter = parse_newlineafter(arg); + + return 0; +} + static void init_log_defaults(void) { init_diff_ui_defaults();
@@ -156,6 +178,7 @@ static void cmd_log_init_defaults(struct rev_info *rev) rev->show_signature = default_show_signature; rev->encode_email_headers = default_encode_email_headers; rev->diffopt.flags.allow_textconv = 1; + rev->newlineafter = NEWLINEAFTER_NONE; if (default_date_mode) parse_date_format(default_date_mode, &rev->date_mode);
@@ -189,6 +212,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix, OPT_CALLBACK('L', NULL, &line_cb, "range:file", N_("trace the evolution of line range <start>,<end> or function :<funcname> in <file>"), log_line_range_callback), + OPT_CALLBACK(0, "newlineafter", &newlineafter, N_("field"), N_("new line after <field>"), option_parse_newlineafter), OPT_END() };
@@ -265,6 +289,7 @@ static void cmd_log_init_finish(int argc, const char **argv, const char *prefix, load_ref_decorations(&decoration_filter, decoration_style); } + rev->newlineafter = newlineafter; if (rev->line_level_traverse) line_log_init(rev, line_cb.prefix, &line_cb.args);
diff --git a/revision.h b/revision.h
index 5578bb4720a..ff0b89c1f40 100644
--- a/revision.h
+++ b/revision.h@@ -243,6 +243,10 @@ struct rev_info { int no_inline; int show_log_size; struct string_list *mailmap; + enum { + NEWLINEAFTER_NONE, + NEWLINEAFTER_DECORATIONS + } newlineafter; /* Filter by commit log message */ struct grep_opt grep_filter;
--
gitgitgadget