]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff-merges: introduce log.diffMerges config variable
authorSergey Organov <sorganov@gmail.com>
Tue, 13 Apr 2021 11:41:17 +0000 (14:41 +0300)
committerJunio C Hamano <gitster@pobox.com>
Sat, 17 Apr 2021 06:38:35 +0000 (23:38 -0700)
New log.diffMerges configuration variable sets the format that
--diff-merges=on will be using. The default is "separate".

t4013: add the following tests for log.diffMerges config:

* Test that wrong values are denied.

* Test that the value of log.diffMerges properly affects both
--diff-merges=on and -m.

t9902: fix completion tests for log.d* to match log.diffMerges.

Added documentation for log.diffMerges.

Signed-off-by: Sergey Organov <sorganov@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Documentation/config/log.txt
builtin/log.c
diff-merges.c
diff-merges.h
t/t4013-diff-various.sh
t/t9902-completion.sh

index 208d5fdcaa6894f6cc10177d8379afac6ff12e37..456eb07800cb1eef63e9d26f96a1ed35b6e65116 100644 (file)
@@ -24,6 +24,11 @@ log.excludeDecoration::
        the config option can be overridden by the `--decorate-refs`
        option.
 
+log.diffMerges::
+       Set default diff format to be used for merge commits. See
+       `--diff-merges` in linkgit:git-log[1] for details.
+       Defaults to `separate`.
+
 log.follow::
        If `true`, `git log` will act as if the `--follow` option was used when
        a single <path> is given.  This has the same limitations as `--follow`,
index f67b67d80ed1e8d7cd95982a8da96b435b8a452b..e52127a9a5e571fd3613f4021b78468e7b8ab780 100644 (file)
@@ -481,6 +481,8 @@ static int git_log_config(const char *var, const char *value, void *cb)
                        decoration_style = 0; /* maybe warn? */
                return 0;
        }
+       if (!strcmp(var, "log.diffmerges"))
+               return diff_merges_config(value);
        if (!strcmp(var, "log.showroot")) {
                default_show_root = git_config_bool(var, value);
                return 0;
index 9d19225b3ec93f6c033a612b152017716dac24e3..f3a9daed7e0519895e4fc4380d05c78b02cb06fa 100644 (file)
@@ -90,6 +90,17 @@ static void set_diff_merges(struct rev_info *revs, const char *optarg)
  * Public functions. They are in the order they are called.
  */
 
+int diff_merges_config(const char *value)
+{
+       diff_merges_setup_func_t func = func_by_opt(value);
+
+       if (!func)
+               return -1;
+
+       set_to_default = func;
+       return 0;
+}
+
 int diff_merges_parse_opts(struct rev_info *revs, const char **argv)
 {
        int argcount = 1;
index 659467c99a4f1cbde781c633af7a87ecc287a435..09d9a6c9a4fbec73c8da8c796a1fed7f3e9a4a33 100644 (file)
@@ -9,6 +9,8 @@
 
 struct rev_info;
 
+int diff_merges_config(const char *value);
+
 int diff_merges_parse_opts(struct rev_info *revs, const char **argv);
 
 void diff_merges_suppress(struct rev_info *revs);
index 26a7b4d19d4de72036c57fc1f8e6b879e2816d12..87def81699bf825135211c4965453be7c08709a1 100755 (executable)
@@ -460,6 +460,29 @@ test_expect_success 'log --diff-merges=on matches --diff-merges=separate' '
        test_cmp expected actual
 '
 
+test_expect_success 'deny wrong log.diffMerges config' '
+       test_config log.diffMerges wrong-value &&
+       test_expect_code 128 git log
+'
+
+test_expect_success 'git config log.diffMerges first-parent' '
+       git log -p --diff-merges=first-parent master >result &&
+       process_diffs result >expected &&
+       test_config log.diffMerges first-parent &&
+       git log -p --diff-merges=on master >result &&
+       process_diffs result >actual &&
+       test_cmp expected actual
+'
+
+test_expect_success 'git config log.diffMerges first-parent vs -m' '
+       git log -p --diff-merges=first-parent master >result &&
+       process_diffs result >expected &&
+       test_config log.diffMerges first-parent &&
+       git log -p -m master >result &&
+       process_diffs result >actual &&
+       test_cmp expected actual
+'
+
 test_expect_success 'log -S requires an argument' '
        test_must_fail git log -S
 '
index 04ce884ef5ac5c728cbe20c74d27fcf849fbd1db..4d732d6d4f818f8160aecb77f7c3f09410643eb2 100755 (executable)
@@ -2306,6 +2306,7 @@ test_expect_success 'git config - variable name' '
        test_completion "git config log.d" <<-\EOF
        log.date Z
        log.decorate Z
+       log.diffMerges Z
        EOF
 '
 
@@ -2327,6 +2328,7 @@ test_expect_success 'git -c - variable name' '
        test_completion "git -c log.d" <<-\EOF
        log.date=Z
        log.decorate=Z
+       log.diffMerges=Z
        EOF
 '
 
@@ -2348,6 +2350,7 @@ test_expect_success 'git clone --config= - variable name' '
        test_completion "git clone --config=log.d" <<-\EOF
        log.date=Z
        log.decorate=Z
+       log.diffMerges=Z
        EOF
 '