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")) {