Split set_diff_merges() into separate parsing and execution functions, the former to be reused later in the series for parsing of configuration values. Signed-off-by: Sergey Organov <sorganov@xxxxxxxxx> --- diff-merges.c | 41 ++++++++++++++++++++++++----------------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/diff-merges.c b/diff-merges.c index 0887a07cfc67..93ede09fb36f 100644 --- a/diff-merges.c +++ b/diff-merges.c @@ -3,6 +3,9 @@ #include "revision.h" typedef void (*diff_merges_setup_func_t)(struct rev_info *); +static void set_separate(struct rev_info *revs); + +static diff_merges_setup_func_t set_to_default = set_separate; static void suppress(struct rev_info *revs) { @@ -21,8 +24,6 @@ static void set_separate(struct rev_info *revs) revs->separate_merges = 1; } -static diff_merges_setup_func_t set_to_default = set_separate; - static void set_first_parent(struct rev_info *revs) { set_separate(revs); @@ -54,29 +55,35 @@ static void set_dense_combined(struct rev_info *revs) revs->dense_combined_merges = 1; } -static void set_diff_merges(struct rev_info *revs, const char *optarg) +static diff_merges_setup_func_t func_by_opt(const char *optarg) { - if (!strcmp(optarg, "off") || !strcmp(optarg, "none")) { - suppress(revs); - /* Return early to leave revs->merges_need_diff unset */ - return; - } - + if (!strcmp(optarg, "off") || !strcmp(optarg, "none")) + return suppress; if (!strcmp(optarg, "1") || !strcmp(optarg, "first-parent")) - set_first_parent(revs); + return set_first_parent; else if (!strcmp(optarg, "m") || !strcmp(optarg, "separate")) - set_separate(revs); + return set_separate; else if (!strcmp(optarg, "c") || !strcmp(optarg, "combined")) - set_combined(revs); + return set_combined; else if (!strcmp(optarg, "cc") || !strcmp(optarg, "dense-combined")) - set_dense_combined(revs); + return set_dense_combined; else if (!strcmp(optarg, "def")) - set_to_default(revs); - else + return set_to_default; + return NULL; +} + +static void set_diff_merges(struct rev_info *revs, const char *optarg) +{ + diff_merges_setup_func_t func = func_by_opt(optarg); + + if (!func) die(_("unknown value for --diff-merges: %s"), optarg); - /* The flag is cleared by set_xxx() functions, so don't move this up */ - revs->merges_need_diff = 1; + func(revs); + + /* NOTE: the merges_need_diff flag is cleared by func() call */ + if (func != suppress) + revs->merges_need_diff = 1; } /* -- 2.25.1