These patches introduce capability to configure the default format of output of diffs for merge commits by means of new log.diffMerges configuration variable. The default format is then used by -m, --diff-merges=m, and new --diff-merges=default options. In particular, git config log.diffMerges first-parent will change -m option format from "separate" to "first-parent" that will in turn cause, say, git show -m <merge_commit> to output diff to the first parent only, instead of appending typically large and surprising diff to the second parent at the end of the output. Updates in v1: * Renamed abbreviated value "def" to full "default" * Fixed tests to use "test_config" instead of "git config" * Meld all "git config" changes into single commit that includes code, documentation, and tests, as they are mutually interdependent. Sergey Organov (5): diff-merges: introduce --diff-merges=default diff-merges: refactor set_diff_merges() diff-merges: adapt -m to enable default diff format diff-merges: introduce log.diffMerges config variable doc/diff-options: document new --diff-merges features Documentation/config/log.txt | 5 +++ Documentation/diff-options.txt | 15 ++++++--- builtin/log.c | 2 ++ diff-merges.c | 58 ++++++++++++++++++++++++---------- diff-merges.h | 2 ++ t/t4013-diff-various.sh | 31 ++++++++++++++++++ t/t9902-completion.sh | 3 ++ 7 files changed, 95 insertions(+), 21 deletions(-) Interdiff against v0: diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt index 09b07231b5a4..31e2bacf5252 100644 --- a/Documentation/diff-options.txt +++ b/Documentation/diff-options.txt @@ -34,7 +34,7 @@ endif::git-diff[] endif::git-format-patch[] ifdef::git-log[] ---diff-merges=(off|none|def|first-parent|1|separate|m|combined|c|dense-combined|cc):: +--diff-merges=(off|none|default|first-parent|1|separate|m|combined|c|dense-combined|cc):: --no-diff-merges:: Specify diff format to be used for merge commits. Default is {diff-merges-default} unless `--first-parent` is in use, in which case @@ -45,7 +45,7 @@ ifdef::git-log[] Disable output of diffs for merge commits. Useful to override implied value. + ---diff-merges=def::: +--diff-merges=default::: --diff-merges=m::: -m::: This option makes diff output for merge commits to be shown in diff --git a/diff-merges.c b/diff-merges.c index f68e4376fd63..75630fb8e6b8 100644 --- a/diff-merges.c +++ b/diff-merges.c @@ -67,7 +67,7 @@ static diff_merges_setup_func_t func_by_opt(const char *optarg) return set_combined; else if (!strcmp(optarg, "cc") || !strcmp(optarg, "dense-combined")) return set_dense_combined; - else if (!strcmp(optarg, "m") || !strcmp(optarg, "def")) + else if (!strcmp(optarg, "m") || !strcmp(optarg, "default")) return set_to_default; return NULL; } diff --git a/t/t4013-diff-various.sh b/t/t4013-diff-various.sh index ee4afca06ced..87cab7867135 100755 --- a/t/t4013-diff-various.sh +++ b/t/t4013-diff-various.sh @@ -452,37 +452,34 @@ diff-tree --stat --compact-summary initial mode diff-tree -R --stat --compact-summary initial mode EOF -test_expect_success 'log --diff-merges=def matches --diff-merges=separate' ' +test_expect_success 'log --diff-merges=default matches --diff-merges=separate' ' git log -p --diff-merges=separate master >result && process_diffs result >expected && - git log -p --diff-merges=def master >result && + git log -p --diff-merges=default master >result && process_diffs result >actual && test_cmp expected actual ' test_expect_success 'deny wrong log.diffMerges config' ' - git config log.diffMerges wrong-value && - test_expect_code 128 git log && - git config --unset log.diffMerges + 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 && - git config log.diffMerges first-parent && - git log -p --diff-merges=def master >result && + test_config log.diffMerges first-parent && + git log -p --diff-merges=default master >result && process_diffs result >actual && - git config --unset log.diffMerges && 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 && - git config log.diffMerges first-parent && + test_config log.diffMerges first-parent && git log -p -m master >result && process_diffs result >actual && - git config --unset log.diffMerges && test_cmp expected actual ' -- 2.25.1