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;