revision: factor out parsing of diff-merge related options

Move all the parsing code related to diffing merges into new parse_diff_merge_opts() function. Signed-off-by: Sergey Organov <sorganov@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Sergey Organov committed Dec 21, 2020 at 18:19 UTC 891e417cbc70495efca4f1333a8bb3c587fb69cb
1 file changed +40 -27
revision.c
+40 -27
@@ -2153,6 +2153,45 @@ static void add_message_grep(struct rev_info *revs, const char *pattern)
2153 add_grep(revs, pattern, GREP_PATTERN_BODY);
2154 }
2155
2156 +static int parse_diff_merge_opts(struct rev_info *revs, const char **argv)
2157 +{
2158 + int argcount = 1;
2159 + const char *optarg;
2160 + const char *arg = argv[0];
2161 +
2162 + if (!strcmp(arg, "-m")) {
2163 + /*
2164 + * To "diff-index", "-m" means "match missing", and to the "log"
2165 + * family of commands, it means "show full diff for merges". Set
2166 + * both fields appropriately.
2167 + */
2168 + revs->ignore_merges = 0;
2169 + revs->match_missing = 1;
2170 + } else if (!strcmp(arg, "-c")) {
2171 + revs->diff = 1;
2172 + revs->dense_combined_merges = 0;
2173 + revs->combine_merges = 1;
2174 + } else if (!strcmp(arg, "--cc")) {
2175 + revs->diff = 1;
2176 + revs->dense_combined_merges = 1;
2177 + revs->combine_merges = 1;
2178 + } else if (!strcmp(arg, "--no-diff-merges")) {
2179 + revs->ignore_merges = 1;
2180 + } else if (!strcmp(arg, "--combined-all-paths")) {
2181 + revs->diff = 1;
2182 + revs->combined_all_paths = 1;
2183 + } else if ((argcount = parse_long_opt("diff-merges", argv, &optarg))) {
2184 + if (!strcmp(optarg, "off")) {
2185 + revs->ignore_merges = 1;
2186 + } else {
2187 + die(_("unknown value for --diff-merges: %s"), optarg);
2188 + }
2189 + } else
2190 + argcount = 0;
2191 +
2192 + return argcount;
2193 +}
2194 +
2195 static int handle_revision_opt(struct rev_info *revs, int argc, const char **argv,
2196 int *unkc, const char **unkv,
2197 const struct setup_revision_opt* opt)
@@ -2349,34 +2388,8 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
2388 revs->diff = 1;
2389 revs->diffopt.flags.recursive = 1;
2390 revs->diffopt.flags.tree_in_recursive = 1;
2352 - } else if (!strcmp(arg, "-m")) {
2353 - /*
2354 - * To "diff-index", "-m" means "match missing", and to the "log"
2355 - * family of commands, it means "show full diff for merges". Set
2356 - * both fields appropriately.
2357 - */
2358 - revs->ignore_merges = 0;
2359 - revs->match_missing = 1;
2360 - } else if ((argcount = parse_long_opt("diff-merges", argv, &optarg))) {
2361 - if (!strcmp(optarg, "off")) {
2362 - revs->ignore_merges = 1;
2363 - } else {
2364 - die(_("unknown value for --diff-merges: %s"), optarg);
2365 - }
2391 + } else if ((argcount = parse_diff_merge_opts(revs, argv))) {
2392 return argcount;
2367 - } else if (!strcmp(arg, "--no-diff-merges")) {
2368 - revs->ignore_merges = 1;
2369 - } else if (!strcmp(arg, "-c")) {
2370 - revs->diff = 1;
2371 - revs->dense_combined_merges = 0;
2372 - revs->combine_merges = 1;
2373 - } else if (!strcmp(arg, "--combined-all-paths")) {
2374 - revs->diff = 1;
2375 - revs->combined_all_paths = 1;
2376 - } else if (!strcmp(arg, "--cc")) {
2377 - revs->diff = 1;
2378 - revs->dense_combined_merges = 1;
2379 - revs->combine_merges = 1;
2393 } else if (!strcmp(arg, "-v")) {
2394 revs->verbose_header = 1;
2395 } else if (!strcmp(arg, "--pretty")) {