]> git.ipfire.org Git - thirdparty/git.git/commitdiff
revision: add separate field for "-m" of "diff-index -m"
authorSergey Organov <sorganov@gmail.com>
Mon, 31 Aug 2020 20:14:22 +0000 (23:14 +0300)
committerJunio C Hamano <gitster@pobox.com>
Mon, 31 Aug 2020 20:42:58 +0000 (13:42 -0700)
Add separate 'match_missing' field for diff-index to use and set it when we
encounter "-m" option. This field won't then be cleared when another meaning of
"-m" is reverted (e.g., by "--no-diff-merges"), nor it will be affected by
future option(s) that might drive 'ignore_merges' field.

Use this new field from diff-lib:do_oneway_diff() instead of reusing
'ignore_merges' field.

Signed-off-by: Sergey Organov <sorganov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff-lib.c
revision.c
revision.h

index 50521e2093fc581ce3cedc76b3036a61f31bef35..5d5d3dafab3386920d2c0883d33d06f860f6d11b 100644 (file)
@@ -405,14 +405,8 @@ static void do_oneway_diff(struct unpack_trees_options *o,
        /* if the entry is not checked out, don't examine work tree */
        cached = o->index_only ||
                (idx && ((idx->ce_flags & CE_VALID) || ce_skip_worktree(idx)));
-       /*
-        * Backward compatibility wart - "diff-index -m" does
-        * not mean "do not ignore merges", but "match_missing".
-        *
-        * But with the revision flag parsing, that's found in
-        * "!revs->ignore_merges".
-        */
-       match_missing = !revs->ignore_merges;
+
+       match_missing = revs->match_missing;
 
        if (cached && idx && ce_stage(idx)) {
                struct diff_filepair *pair;
index 96630e31867dd6987b8d5447bcaedb777303679d..73e3d14cc16500d61ab58e7ccf8daef9537a9cf9 100644 (file)
@@ -2344,7 +2344,13 @@ static int handle_revision_opt(struct rev_info *revs, int argc, const char **arg
                revs->diffopt.flags.recursive = 1;
                revs->diffopt.flags.tree_in_recursive = 1;
        } else 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 ((argcount = parse_long_opt("diff-merges", argv, &optarg))) {
                if (!strcmp(optarg, "off")) {
                        revs->ignore_merges = 1;
index c1e5bcf139d7a31d9bf851ada3bc8373f5ab932e..f6bf860d19e5a2997193c25873a5ba82e030f68b 100644 (file)
@@ -188,6 +188,7 @@ struct rev_info {
        unsigned int    diff:1,
                        full_diff:1,
                        show_root_diff:1,
+                       match_missing:1,
                        no_commit_id:1,
                        verbose_header:1,
                        combine_merges:1,