]> git.ipfire.org Git - thirdparty/git.git/blob - diff-merges.c
diff-merges: new function diff_merges_suppress()
[thirdparty/git.git] / diff-merges.c
1 #include "diff-merges.h"
2
3 #include "revision.h"
4
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
13 /*
14 * Public functions. They are in the order they are called.
15 */
16
17 void diff_merges_init_revs(struct rev_info *revs)
18 {
19 revs->ignore_merges = -1;
20 }
21
22 int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
23 {
24 int argcount = 1;
25 const char *optarg;
26 const char *arg = argv[0];
27
28 if (!strcmp(arg, "-m")) {
29 /*
30 * To "diff-index", "-m" means "match missing", and to the "log"
31 * family of commands, it means "show full diff for merges". Set
32 * both fields appropriately.
33 */
34 revs->ignore_merges = 0;
35 revs->match_missing = 1;
36 } else if (!strcmp(arg, "-c")) {
37 revs->diff = 1;
38 revs->dense_combined_merges = 0;
39 revs->combine_merges = 1;
40 } else if (!strcmp(arg, "--cc")) {
41 revs->diff = 1;
42 revs->dense_combined_merges = 1;
43 revs->combine_merges = 1;
44 } else if (!strcmp(arg, "--no-diff-merges")) {
45 suppress(revs);
46 } else if (!strcmp(arg, "--combined-all-paths")) {
47 revs->diff = 1;
48 revs->combined_all_paths = 1;
49 } else if ((argcount = parse_long_opt("diff-merges", argv, &optarg))) {
50 if (!strcmp(optarg, "off")) {
51 suppress(revs);
52 } else {
53 die(_("unknown value for --diff-merges: %s"), optarg);
54 }
55 } else
56 argcount = 0;
57
58 return argcount;
59 }
60
61 void diff_merges_suppress(struct rev_info *revs)
62 {
63 suppress(revs);
64 }
65
66 void diff_merges_default_to_first_parent(struct rev_info *revs)
67 {
68 if (revs->ignore_merges < 0) /* No -m */
69 revs->ignore_merges = 0;
70 }
71
72 void diff_merges_default_to_dense_combined(struct rev_info *revs)
73 {
74 if (revs->ignore_merges < 0) { /* No -m */
75 revs->ignore_merges = 0;
76 if (!revs->combine_merges) { /* No -c/--cc" */
77 revs->combine_merges = 1;
78 revs->dense_combined_merges = 1;
79 }
80 }
81 }
82
83 void diff_merges_setup_revs(struct rev_info *revs)
84 {
85 if (revs->combine_merges && revs->ignore_merges < 0)
86 revs->ignore_merges = 0;
87 if (revs->ignore_merges < 0)
88 revs->ignore_merges = 1;
89 if (revs->combined_all_paths && !revs->combine_merges)
90 die("--combined-all-paths makes no sense without -c or --cc");
91 }