]>
Commit | Line | Data |
---|---|---|
a37eec63 SO |
1 | #include "diff-merges.h" |
2 | ||
3 | #include "revision.h" | |
4 | ||
09322b1d SO |
5 | static void suppress(struct rev_info *revs) |
6 | { | |
7 | revs->ignore_merges = 1; | |
8 | revs->first_parent_merges = 0; | |
9 | revs->combine_merges = 0; | |
10 | revs->dense_combined_merges = 0; | |
11 | } | |
12 | ||
3b6c17b5 SO |
13 | static void set_dense_combined(struct rev_info *revs) |
14 | { | |
15 | revs->combine_merges = 1; | |
16 | revs->dense_combined_merges = 1; | |
17 | } | |
18 | ||
19 | ||
564a4fc8 SO |
20 | /* |
21 | * Public functions. They are in the order they are called. | |
22 | */ | |
23 | ||
18f09473 | 24 | void diff_merges_init_revs(struct rev_info *revs) |
a37eec63 SO |
25 | { |
26 | revs->ignore_merges = -1; | |
27 | } | |
28 | ||
18f09473 | 29 | int diff_merges_parse_opts(struct rev_info *revs, const char **argv) |
a37eec63 SO |
30 | { |
31 | int argcount = 1; | |
32 | const char *optarg; | |
33 | const char *arg = argv[0]; | |
34 | ||
35 | if (!strcmp(arg, "-m")) { | |
36 | /* | |
37 | * To "diff-index", "-m" means "match missing", and to the "log" | |
38 | * family of commands, it means "show full diff for merges". Set | |
39 | * both fields appropriately. | |
40 | */ | |
41 | revs->ignore_merges = 0; | |
42 | revs->match_missing = 1; | |
43 | } else if (!strcmp(arg, "-c")) { | |
44 | revs->diff = 1; | |
45 | revs->dense_combined_merges = 0; | |
46 | revs->combine_merges = 1; | |
47 | } else if (!strcmp(arg, "--cc")) { | |
48 | revs->diff = 1; | |
3b6c17b5 | 49 | set_dense_combined(revs); |
a37eec63 | 50 | } else if (!strcmp(arg, "--no-diff-merges")) { |
09322b1d | 51 | suppress(revs); |
a37eec63 SO |
52 | } else if (!strcmp(arg, "--combined-all-paths")) { |
53 | revs->diff = 1; | |
54 | revs->combined_all_paths = 1; | |
55 | } else if ((argcount = parse_long_opt("diff-merges", argv, &optarg))) { | |
56 | if (!strcmp(optarg, "off")) { | |
09322b1d | 57 | suppress(revs); |
a37eec63 SO |
58 | } else { |
59 | die(_("unknown value for --diff-merges: %s"), optarg); | |
60 | } | |
61 | } else | |
62 | argcount = 0; | |
63 | ||
64 | return argcount; | |
65 | } | |
66 | ||
09322b1d SO |
67 | void diff_merges_suppress(struct rev_info *revs) |
68 | { | |
69 | suppress(revs); | |
70 | } | |
71 | ||
4f54544d | 72 | void diff_merges_default_to_first_parent(struct rev_info *revs) |
a37eec63 | 73 | { |
7acf0d06 | 74 | if (revs->ignore_merges < 0) /* No -m */ |
a37eec63 | 75 | revs->ignore_merges = 0; |
3291eea3 SO |
76 | if (!revs->combine_merges) /* No -c/--cc" */ |
77 | revs->first_parent_merges = 1; | |
a37eec63 SO |
78 | } |
79 | ||
18f09473 | 80 | void diff_merges_default_to_dense_combined(struct rev_info *revs) |
a37eec63 | 81 | { |
7acf0d06 | 82 | if (revs->ignore_merges < 0) { /* No -m */ |
a37eec63 | 83 | revs->ignore_merges = 0; |
7acf0d06 | 84 | if (!revs->combine_merges) { /* No -c/--cc" */ |
a37eec63 SO |
85 | revs->combine_merges = 1; |
86 | revs->dense_combined_merges = 1; | |
87 | } | |
88 | } | |
89 | } | |
564a4fc8 | 90 | |
3b6c17b5 SO |
91 | void diff_merges_set_dense_combined_if_unset(struct rev_info *revs) |
92 | { | |
93 | if (!revs->combine_merges) | |
94 | set_dense_combined(revs); | |
95 | } | |
96 | ||
564a4fc8 SO |
97 | void diff_merges_setup_revs(struct rev_info *revs) |
98 | { | |
99 | if (revs->combine_merges && revs->ignore_merges < 0) | |
100 | revs->ignore_merges = 0; | |
101 | if (revs->ignore_merges < 0) | |
102 | revs->ignore_merges = 1; | |
103 | if (revs->combined_all_paths && !revs->combine_merges) | |
104 | die("--combined-all-paths makes no sense without -c or --cc"); | |
105 | } |