revision: move diff merges functions to its own diff-merges.c

Create separate diff-merges.c and diff-merges.h files, and move all the code related to handling of diff merges there. 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 a37eec6333db6f38edd21e74812d6c5f215b6e6c
6 files changed +97 -78
Makefile
+1
@@ -872,6 +872,7 @@ LIB_OBJS += date.o
872 LIB_OBJS += decorate.o
873 LIB_OBJS += delta-islands.o
874 LIB_OBJS += diff-delta.o
875 +LIB_OBJS += diff-merges.o
876 LIB_OBJS += diff-lib.o
877 LIB_OBJS += diff-no-index.o
878 LIB_OBJS += diff.o
builtin/log.c
+1
@@ -12,6 +12,7 @@
12 #include "color.h"
13 #include "commit.h"
14 #include "diff.h"
15 +#include "diff-merges.h"
16 #include "revision.h"
17 #include "log-tree.h"
18 #include "builtin.h"
diff-merges.c new
+76
@@ -0,0 +1,76 @@
1 +#include "diff-merges.h"
2 +
3 +#include "revision.h"
4 +
5 +void init_diff_merge_revs(struct rev_info *revs)
6 +{
7 + revs->ignore_merges = -1;
8 +}
9 +
10 +int parse_diff_merge_opts(struct rev_info *revs, const char **argv)
11 +{
12 + int argcount = 1;
13 + const char *optarg;
14 + const char *arg = argv[0];
15 +
16 + if (!strcmp(arg, "-m")) {
17 + /*
18 + * To "diff-index", "-m" means "match missing", and to the "log"
19 + * family of commands, it means "show full diff for merges". Set
20 + * both fields appropriately.
21 + */
22 + revs->ignore_merges = 0;
23 + revs->match_missing = 1;
24 + } else if (!strcmp(arg, "-c")) {
25 + revs->diff = 1;
26 + revs->dense_combined_merges = 0;
27 + revs->combine_merges = 1;
28 + } else if (!strcmp(arg, "--cc")) {
29 + revs->diff = 1;
30 + revs->dense_combined_merges = 1;
31 + revs->combine_merges = 1;
32 + } else if (!strcmp(arg, "--no-diff-merges")) {
33 + revs->ignore_merges = 1;
34 + } else if (!strcmp(arg, "--combined-all-paths")) {
35 + revs->diff = 1;
36 + revs->combined_all_paths = 1;
37 + } else if ((argcount = parse_long_opt("diff-merges", argv, &optarg))) {
38 + if (!strcmp(optarg, "off")) {
39 + revs->ignore_merges = 1;
40 + } else {
41 + die(_("unknown value for --diff-merges: %s"), optarg);
42 + }
43 + } else
44 + argcount = 0;
45 +
46 + return argcount;
47 +}
48 +
49 +void setup_diff_merges_revs(struct rev_info *revs)
50 +{
51 + if (revs->combine_merges && revs->ignore_merges < 0)
52 + revs->ignore_merges = 0;
53 + if (revs->ignore_merges < 0)
54 + revs->ignore_merges = 1;
55 + if (revs->combined_all_paths && !revs->combine_merges)
56 + die("--combined-all-paths makes no sense without -c or --cc");
57 +}
58 +
59 +void rev_diff_merges_first_parent_defaults_to_enable(struct rev_info *revs)
60 +{
61 + if (revs->first_parent_only && revs->ignore_merges < 0)
62 + revs->ignore_merges = 0;
63 +}
64 +
65 +void rev_diff_merges_default_to_dense_combined(struct rev_info *revs)
66 +{
67 + if (revs->ignore_merges < 0) {
68 + /* There was no "-m" variant on the command line */
69 + revs->ignore_merges = 0;
70 + if (!revs->first_parent_only && !revs->combine_merges) {
71 + /* No "--first-parent", "-c", or "--cc" */
72 + revs->combine_merges = 1;
73 + revs->dense_combined_merges = 1;
74 + }
75 + }
76 +}
diff-merges.h new
+18
@@ -0,0 +1,18 @@
1 +#ifndef DIFF_MERGES_H
2 +#define DIFF_MERGES_H
3 +
4 +/*
5 + * diff-merges - utility module to handle command-line options for
6 + * selection of particular diff format of merge commits
7 + * representation.
8 + */
9 +
10 +struct rev_info;
11 +
12 +void init_diff_merge_revs(struct rev_info *revs);
13 +int parse_diff_merge_opts(struct rev_info *revs, const char **argv);
14 +void setup_diff_merges_revs(struct rev_info *revs);
15 +void rev_diff_merges_default_to_dense_combined(struct rev_info *revs);
16 +void rev_diff_merges_first_parent_defaults_to_enable(struct rev_info *revs);
17 +
18 +#endif
revision.c
+1 -75
@@ -5,6 +5,7 @@
5 #include "tree.h"
6 #include "commit.h"
7 #include "diff.h"
8 +#include "diff-merges.h"
9 #include "refs.h"
10 #include "revision.h"
11 #include "repository.h"
@@ -1805,8 +1806,6 @@ static int add_parents_only(struct rev_info *revs, const char *arg_, int flags,
1806 return 1;
1807 }
1808
1808 -static void init_diff_merge_revs(struct rev_info *revs);
1809 -
1809 void repo_init_revisions(struct repository *r,
1810 struct rev_info *revs,
1811 const char *prefix)
@@ -2155,79 +2154,6 @@ static void add_message_grep(struct rev_info *revs, const char *pattern)
2154 add_grep(revs, pattern, GREP_PATTERN_BODY);
2155 }
2156
2158 -static void init_diff_merge_revs(struct rev_info *revs)
2159 -{
2160 - revs->ignore_merges = -1;
2161 -}
2162 -
2163 -static int parse_diff_merge_opts(struct rev_info *revs, const char **argv)
2164 -{
2165 - int argcount = 1;
2166 - const char *optarg;
2167 - const char *arg = argv[0];
2168 -
2169 - if (!strcmp(arg, "-m")) {
2170 - /*
2171 - * To "diff-index", "-m" means "match missing", and to the "log"
2172 - * family of commands, it means "show full diff for merges". Set
2173 - * both fields appropriately.
2174 - */
2175 - revs->ignore_merges = 0;
2176 - revs->match_missing = 1;
2177 - } else if (!strcmp(arg, "-c")) {
2178 - revs->diff = 1;
2179 - revs->dense_combined_merges = 0;
2180 - revs->combine_merges = 1;
2181 - } else if (!strcmp(arg, "--cc")) {
2182 - revs->diff = 1;
2183 - revs->dense_combined_merges = 1;
2184 - revs->combine_merges = 1;
2185 - } else if (!strcmp(arg, "--no-diff-merges")) {
2186 - revs->ignore_merges = 1;
2187 - } else if (!strcmp(arg, "--combined-all-paths")) {
2188 - revs->diff = 1;
2189 - revs->combined_all_paths = 1;
2190 - } else if ((argcount = parse_long_opt("diff-merges", argv, &optarg))) {
2191 - if (!strcmp(optarg, "off")) {
2192 - revs->ignore_merges = 1;
2193 - } else {
2194 - die(_("unknown value for --diff-merges: %s"), optarg);
2195 - }
2196 - } else
2197 - argcount = 0;
2198 -
2199 - return argcount;
2200 -}
2201 -
2202 -static void setup_diff_merges_revs(struct rev_info *revs)
2203 -{
2204 - if (revs->combine_merges && revs->ignore_merges < 0)
2205 - revs->ignore_merges = 0;
2206 - if (revs->ignore_merges < 0)
2207 - revs->ignore_merges = 1;
2208 - if (revs->combined_all_paths && !revs->combine_merges)
2209 - die("--combined-all-paths makes no sense without -c or --cc");
2210 -}
2211 -
2212 -void rev_diff_merges_first_parent_defaults_to_enable(struct rev_info *revs)
2213 -{
2214 - if (revs->first_parent_only && revs->ignore_merges < 0)
2215 - revs->ignore_merges = 0;
2216 -}
2217 -
2218 -void rev_diff_merges_default_to_dense_combined(struct rev_info *revs)
2219 -{
2220 - if (revs->ignore_merges < 0) {
2221 - /* There was no "-m" variant on the command line */
2222 - revs->ignore_merges = 0;
2223 - if (!revs->first_parent_only && !revs->combine_merges) {
2224 - /* No "--first-parent", "-c", or "--cc" */
2225 - revs->combine_merges = 1;
2226 - revs->dense_combined_merges = 1;
2227 - }
2228 - }
2229 -}
2230 -
2157 static int handle_revision_opt(struct rev_info *revs, int argc, const char **argv,
2158 int *unkc, const char **unkv,
2159 const struct setup_revision_opt* opt)
revision.h
-3
@@ -456,7 +456,4 @@ int rewrite_parents(struct rev_info *revs,
456 */
457 struct commit_list *get_saved_parents(struct rev_info *revs, const struct commit *commit);
458
459 -void rev_diff_merges_default_to_dense_combined(struct rev_info *revs);
460 -void rev_diff_merges_first_parent_defaults_to_enable(struct rev_info *revs);
461 -
459 #endif