[PATCH 2/9] diff-merges: refactor set_diff_merges()
- From
Sergey Organov <sorganov@gmail.com>
- Date
- Apr 7, 2021, 22:56 UTC
- Message-ID
- <20210407225608.14611-3-sorganov@gmail.com>
- In-Reply-To
- <20210407225608.14611-1-sorganov@gmail.com>
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@gmail.com> --- 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