diff-merges: split 'ignore_merges' field

'ignore_merges' was 3-way field that served two distinct purposes that we now assign to 2 new independent flags: 'separate_merges', and 'explicit_diff_merges'. 'separate_merges' tells that we need to output diff format containing separate diff for every parent (as opposed to 'combine_merges'). 'explicit_diff_merges' tells that at least one of diff-merges options has been explicitly specified on the command line, so no defaults should apply. 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 1a2c4d80501c50fbe96cc0be096273703a5c0d16
3 files changed +23 -26
diff-merges.c
+13 -18
@@ -4,7 +4,7 @@
4
5 static void suppress(struct rev_info *revs)
6 {
7 - revs->ignore_merges = 1;
7 + revs->separate_merges = 0;
8 revs->first_parent_merges = 0;
9 revs->combine_merges = 0;
10 revs->dense_combined_merges = 0;
@@ -23,7 +23,6 @@ static void set_dense_combined(struct rev_info *revs)
23
24 void diff_merges_init_revs(struct rev_info *revs)
25 {
26 - revs->ignore_merges = -1;
26 }
27
28 int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
@@ -39,7 +38,7 @@ int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
38 * family of commands, it means "show full diff for merges". Set
39 * both fields appropriately.
40 */
42 - revs->ignore_merges = 0;
41 + revs->separate_merges = 1;
42 revs->match_missing = 1;
43 } else if (!strcmp(arg, "-c")) {
44 revs->dense_combined_merges = 0;
@@ -57,8 +56,9 @@ int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
56 die(_("unknown value for --diff-merges: %s"), optarg);
57 }
58 } else
60 - argcount = 0;
59 + return 0;
60
61 + revs->explicit_diff_merges = 1;
62 return argcount;
63 }
64
@@ -69,21 +69,16 @@ void diff_merges_suppress(struct rev_info *revs)
69
70 void diff_merges_default_to_first_parent(struct rev_info *revs)
71 {
72 - if (revs->ignore_merges < 0) /* No -m */
73 - revs->ignore_merges = 0;
74 - if (!revs->combine_merges) /* No -c/--cc" */
72 + if (!revs->explicit_diff_merges)
73 + revs->separate_merges = 1;
74 + if (revs->separate_merges)
75 revs->first_parent_merges = 1;
76 }
77
78 void diff_merges_default_to_dense_combined(struct rev_info *revs)
79 {
80 - if (revs->ignore_merges < 0) { /* No -m */
81 - revs->ignore_merges = 0;
82 - if (!revs->combine_merges) { /* No -c/--cc" */
83 - revs->combine_merges = 1;
84 - revs->dense_combined_merges = 1;
85 - }
86 - }
80 + if (!revs->explicit_diff_merges)
81 + set_dense_combined(revs);
82 }
83
84 void diff_merges_set_dense_combined_if_unset(struct rev_info *revs)
@@ -94,10 +89,10 @@ void diff_merges_set_dense_combined_if_unset(struct rev_info *revs)
89
90 void diff_merges_setup_revs(struct rev_info *revs)
91 {
97 - if (revs->combine_merges && revs->ignore_merges < 0)
98 - revs->ignore_merges = 0;
99 - if (revs->ignore_merges < 0)
100 - revs->ignore_merges = 1;
92 + if (revs->combine_merges == 0)
93 + revs->dense_combined_merges = 0;
94 + if (revs->separate_merges == 0)
95 + revs->first_parent_merges = 0;
96 if (revs->combined_all_paths && !revs->combine_merges)
97 die("--combined-all-paths makes no sense without -c or --cc");
98 if (revs->combine_merges) {
log-tree.c
+8 -7
@@ -918,14 +918,15 @@ static int log_tree_diff(struct rev_info *opt, struct commit *commit, struct log
918
919 /* More than one parent? */
920 if (parents->next) {
921 - if (opt->ignore_merges)
922 - return 0;
923 - else if (opt->combine_merges)
921 + if (opt->combine_merges)
922 return do_diff_combined(opt, commit);
925 - else if (!opt->first_parent_merges) {
926 - /* If we show multiple diffs, show the parent info */
927 - log->parent = parents->item;
928 - }
923 + if (opt->separate_merges) {
924 + if (!opt->first_parent_merges) {
925 + /* Show parent info for multiple diffs */
926 + log->parent = parents->item;
927 + }
928 + } else
929 + return 0;
930 }
931
932 showed_log = 0;
revision.h
+2 -1
@@ -191,12 +191,13 @@ struct rev_info {
191 match_missing:1,
192 no_commit_id:1,
193 verbose_header:1,
194 + explicit_diff_merges: 1,
195 + separate_merges: 1,
196 combine_merges:1,
197 combined_all_paths:1,
198 dense_combined_merges:1,
199 first_parent_merges:1,
200 always_show_header:1;
199 - int ignore_merges:2;
201
202 /* Format info */
203 int show_notes;