diff options
author | Sergey Organov <sorganov@gmail.com> | 2020-12-21 18:19:33 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2020-12-22 00:47:30 +0300 |
commit | a37eec6333db6f38edd21e74812d6c5f215b6e6c (patch) | |
tree | 6089be4d5a751e62fdbeb9642f3e67f721d622f1 /diff-merges.c | |
parent | 3d4fd9436337d1688e7e2c2b2da4f7b7e3e8591e (diff) |
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>
Diffstat (limited to 'diff-merges.c')
-rw-r--r-- | diff-merges.c | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/diff-merges.c b/diff-merges.c new file mode 100644 index 0000000000..0204292aa9 --- /dev/null +++ b/diff-merges.c @@ -0,0 +1,76 @@ +#include "diff-merges.h" + +#include "revision.h" + +void init_diff_merge_revs(struct rev_info *revs) +{ + revs->ignore_merges = -1; +} + +int parse_diff_merge_opts(struct rev_info *revs, const char **argv) +{ + int argcount = 1; + const char *optarg; + const char *arg = argv[0]; + + if (!strcmp(arg, "-m")) { + /* + * To "diff-index", "-m" means "match missing", and to the "log" + * family of commands, it means "show full diff for merges". Set + * both fields appropriately. + */ + revs->ignore_merges = 0; + revs->match_missing = 1; + } else if (!strcmp(arg, "-c")) { + revs->diff = 1; + revs->dense_combined_merges = 0; + revs->combine_merges = 1; + } else if (!strcmp(arg, "--cc")) { + revs->diff = 1; + revs->dense_combined_merges = 1; + revs->combine_merges = 1; + } else if (!strcmp(arg, "--no-diff-merges")) { + revs->ignore_merges = 1; + } else if (!strcmp(arg, "--combined-all-paths")) { + revs->diff = 1; + revs->combined_all_paths = 1; + } else if ((argcount = parse_long_opt("diff-merges", argv, &optarg))) { + if (!strcmp(optarg, "off")) { + revs->ignore_merges = 1; + } else { + die(_("unknown value for --diff-merges: %s"), optarg); + } + } else + argcount = 0; + + return argcount; +} + +void setup_diff_merges_revs(struct rev_info *revs) +{ + if (revs->combine_merges && revs->ignore_merges < 0) + revs->ignore_merges = 0; + if (revs->ignore_merges < 0) + revs->ignore_merges = 1; + if (revs->combined_all_paths && !revs->combine_merges) + die("--combined-all-paths makes no sense without -c or --cc"); +} + +void rev_diff_merges_first_parent_defaults_to_enable(struct rev_info *revs) +{ + if (revs->first_parent_only && revs->ignore_merges < 0) + revs->ignore_merges = 0; +} + +void rev_diff_merges_default_to_dense_combined(struct rev_info *revs) +{ + if (revs->ignore_merges < 0) { + /* There was no "-m" variant on the command line */ + revs->ignore_merges = 0; + if (!revs->first_parent_only && !revs->combine_merges) { + /* No "--first-parent", "-c", or "--cc" */ + revs->combine_merges = 1; + revs->dense_combined_merges = 1; + } + } +} |