{"thread":{"id":"63637","subject":"[PATCH v2 0/2] git pull/merge --compact-summary","startedAt":"2025-06-12T22:25:40Z","lastAt":"2025-06-13T16:38:32Z","messageCount":7,"participants":["Junio C Hamano","Kristoffer Haugsbakk"],"isPatch":true,"patchVersion":2,"patchTotal":2},"messages":[{"id":"520195","messageId":"20250612222537.2426059-1-gitster@pobox.com","threadId":"63637","inReplyTo":null,"subject":"[PATCH v2 0/2] git pull/merge --compact-summary","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-06-12T22:25:35Z","receivedAt":"2025-06-12T22:25:40Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"By default, \"git merge\" and \"git pull\" shows \"git diff --stat @{1}\"\nto show the extent of the changes.  While it gives a good overview,\none thing that is missing in this output is which paths are created\nand/or deleted.\n\nWith these two patches, these commands learn \"--compact-summary\"\ncommand line option and a new value \"compact\" for the existing\nmerge.stat configuration variable, to change that final output to\nuse \"git diff --compact-summary @{1}\" instead.\n\nI sent this out with random fix-ups in separate threads but never\nmade a formal patch series.  Here are the earlier messages:\n\n https://lore.kernel.org/git/xmqq5xh6xlpm.fsf@gitster.g/\n https://lore.kernel.org/git/xmqqfrg6i57t.fsf@gitster.g/\n\nJunio C Hamano (2):\n  merge/pull: --compact-summary\n  merge/pull: extend merge.stat configuration variable to cover\n    --compact-summary\n\n Documentation/config/merge.adoc  | 12 ++++++--\n Documentation/git-merge.adoc     |  2 +-\n Documentation/merge-options.adoc |  3 ++\n builtin/merge.c                  | 53 +++++++++++++++++++++++++++++---\n builtin/pull.c                   |  3 ++\n t/t7600-merge.sh                 | 43 +++++++++++++++++++++++++-\n 6 files changed, 108 insertions(+), 8 deletions(-)\n\n-- \n2.50.0-rc2-255-gd84100c98d\n\n"},{"id":"520196","messageId":"20250612222537.2426059-2-gitster@pobox.com","threadId":"63637","inReplyTo":"20250612222537.2426059-1-gitster@pobox.com","subject":"[PATCH v2 1/2] merge/pull: --compact-summary","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-06-12T22:25:36Z","receivedAt":"2025-06-12T22:25:43Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"By default, \"git merge\" and \"git pull\" shows \"git diff --stat @{1}\"\nto show the extent of the changes.  While it gives a good overview,\none thing that is missing in this output is which paths are created\nand/or deleted.\n\nIntroduce \"--compact-summary\" option to these two commands that\ntells it to instead show \"git diff --compact-summary @{1}\", which\ngives the same diffstat but notes the created or deleted paths.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Documentation/git-merge.adoc     |  2 +-\n Documentation/merge-options.adoc |  3 +++\n builtin/merge.c                  | 39 ++++++++++++++++++++++++++++----\n builtin/pull.c                   |  3 +++\n t/t7600-merge.sh                 | 28 ++++++++++++++++++++++-\n 5 files changed, 69 insertions(+), 6 deletions(-)\n\ndiff --git a/Documentation/git-merge.adoc b/Documentation/git-merge.adoc\nindex 12aa859d16..d53923c3b7 100644\n--- a/Documentation/git-merge.adoc\n+++ b/Documentation/git-merge.adoc\n@@ -9,7 +9,7 @@ git-merge - Join two or more development histories together\n SYNOPSIS\n --------\n [synopsis]\n-git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]\n+git merge [-n] [--stat] [--compact-summary] [--no-commit] [--squash] [--[no-]edit]\n \t[--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]\n \t[--[no-]allow-unrelated-histories]\n \t[--[no-]rerere-autoupdate] [-m <msg>] [-F <file>]\ndiff --git a/Documentation/merge-options.adoc b/Documentation/merge-options.adoc\nindex 078f4f6157..95ef491be1 100644\n--- a/Documentation/merge-options.adoc\n+++ b/Documentation/merge-options.adoc\n@@ -113,6 +113,9 @@ include::signoff-option.adoc[]\n With `-n` or `--no-stat` do not show a diffstat at the end of the\n merge.\n \n+`--compact-summary`::\n+\tShow a compact-summary at the end of the merge.\n+\n `--squash`::\n `--no-squash`::\n \tProduce the working tree and index state as if a real merge\ndiff --git a/builtin/merge.c b/builtin/merge.c\nindex ce90e52fe4..736739d3a9 100644\n--- a/builtin/merge.c\n+++ b/builtin/merge.c\n@@ -69,7 +69,10 @@ static const char * const builtin_merge_usage[] = {\n \tNULL\n };\n \n-static int show_diffstat = 1, shortlog_len = -1, squash;\n+#define MERGE_SHOW_DIFFSTAT 1\n+#define MERGE_SHOW_COMPACTSUMMARY 2\n+\n+static int show_diffstat = MERGE_SHOW_DIFFSTAT, shortlog_len = -1, squash;\n static int option_commit = -1;\n static int option_edit = -1;\n static int allow_trivial = 1, have_message, verify_signatures;\n@@ -243,12 +246,28 @@ static int option_parse_strategy(const struct option *opt UNUSED,\n \treturn 0;\n }\n \n+static int option_parse_compact_summary(const struct option *opt,\n+\t\t\t\t\tconst char *name UNUSED, int unset)\n+{\n+\tint *setting = opt->value;\n+\n+\tif (unset)\n+\t\t*setting = 0;\n+\telse\n+\t\t*setting = MERGE_SHOW_COMPACTSUMMARY;\n+\treturn 0;\n+}\n+\n static struct option builtin_merge_options[] = {\n \tOPT_SET_INT('n', NULL, &show_diffstat,\n \t\tN_(\"do not show a diffstat at the end of the merge\"), 0),\n \tOPT_BOOL(0, \"stat\", &show_diffstat,\n \t\tN_(\"show a diffstat at the end of the merge\")),\n \tOPT_BOOL(0, \"summary\", &show_diffstat, N_(\"(synonym to --stat)\")),\n+\tOPT_CALLBACK_F(0, \"compact-summary\", &show_diffstat, N_(\"compact-summary\"),\n+\t\t       N_(\"show a compactstat at the end of the merge\"),\n+\t\t       PARSE_OPT_NOARG,\n+\t\t       option_parse_compact_summary),\n \t{\n \t\t.type = OPTION_INTEGER,\n \t\t.long_name = \"log\",\n@@ -494,8 +513,19 @@ static void finish(struct commit *head_commit,\n \t\tstruct diff_options opts;\n \t\trepo_diff_setup(the_repository, &opts);\n \t\tinit_diffstat_widths(&opts);\n-\t\topts.output_format |=\n-\t\t\tDIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;\n+\n+\t\tswitch (show_diffstat) {\n+\t\tcase MERGE_SHOW_DIFFSTAT: /* 1 */\n+\t\t\topts.output_format |=\n+\t\t\t\tDIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;\n+\t\t\tbreak;\n+\t\tcase MERGE_SHOW_COMPACTSUMMARY: /* 2 */\n+\t\t\topts.output_format |= DIFF_FORMAT_DIFFSTAT;\n+\t\t\topts.flags.stat_with_summary = 1;\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tbreak;\n+\t\t}\n \t\topts.detect_rename = DIFF_DETECT_RENAME;\n \t\tdiff_setup_done(&opts);\n \t\tdiff_tree_oid(head, new_head, \"\", &opts);\n@@ -643,7 +673,8 @@ static int git_merge_config(const char *k, const char *v,\n \t}\n \n \tif (!strcmp(k, \"merge.diffstat\") || !strcmp(k, \"merge.stat\")) {\n-\t\tshow_diffstat = git_config_bool(k, v);\n+\t\tshow_diffstat = git_config_bool(k, v)\n+\t\t\t? MERGE_SHOW_DIFFSTAT : 0;\n \t} else if (!strcmp(k, \"merge.verifysignatures\")) {\n \t\tverify_signatures = git_config_bool(k, v);\n \t} else if (!strcmp(k, \"pull.twohead\")) {\ndiff --git a/builtin/pull.c b/builtin/pull.c\nindex a1ebc6ad33..6e72a2e9a4 100644\n--- a/builtin/pull.c\n+++ b/builtin/pull.c\n@@ -143,6 +143,9 @@ static struct option pull_options[] = {\n \tOPT_PASSTHRU(0, \"summary\", &opt_diffstat, NULL,\n \t\tN_(\"(synonym to --stat)\"),\n \t\tPARSE_OPT_NOARG | PARSE_OPT_HIDDEN),\n+\tOPT_PASSTHRU(0, \"compact-summary\", &opt_diffstat, NULL,\n+\t\tN_(\"show a compact-summary at the end of the merge\"),\n+\t\tPARSE_OPT_NOARG),\n \tOPT_PASSTHRU(0, \"log\", &opt_log, N_(\"n\"),\n \t\tN_(\"add (at most <n>) entries from shortlog to merge commit message\"),\n \t\tPARSE_OPT_OPTARG),\ndiff --git a/t/t7600-merge.sh b/t/t7600-merge.sh\nindex 2a8df29219..2972922b6a 100755\n--- a/t/t7600-merge.sh\n+++ b/t/t7600-merge.sh\n@@ -185,8 +185,19 @@ test_expect_success 'reject non-strategy with a git-merge-foo name' '\n test_expect_success 'merge c0 with c1' '\n \techo \"OBJID HEAD@{0}: merge c1: Fast-forward\" >reflog.expected &&\n \n+\tcat >expect <<-\\EOF &&\n+\tUpdating FROM..TO\n+\tFast-forward\n+\t file  | 2 +-\n+\t other | 9 +++++++++\n+\t 2 files changed, 10 insertions(+), 1 deletion(-)\n+\t create mode 100644 other\n+\tEOF\n+\n \tgit reset --hard c0 &&\n-\tgit merge c1 &&\n+\tgit merge c1 >out &&\n+\tsed -e \"1s/^Updating [0-9a-f.]*/Updating FROM..TO/\" out >actual &&\n+\ttest_cmp expect actual &&\n \tverify_merge file result.1 &&\n \tverify_head \"$c1\" &&\n \n@@ -205,6 +216,21 @@ test_expect_success 'merge c0 with c1 with --ff-only' '\n \tverify_head \"$c1\"\n '\n \n+test_expect_success 'the same merge with compact summary' '\n+\tcat >expect <<-\\EOF &&\n+\tUpdating FROM..TO\n+\tFast-forward\n+\t file        | 2 +-\n+\t other (new) | 9 +++++++++\n+\t 2 files changed, 10 insertions(+), 1 deletion(-)\n+\tEOF\n+\n+\tgit reset --hard c0 &&\n+\tgit merge --compact-summary c1 >out &&\n+\tsed -e \"1s/^Updating [0-9a-f.]*/Updating FROM..TO/\" out >actual &&\n+\ttest_cmp expect actual\n+'\n+\n test_debug 'git log --graph --decorate --oneline --all'\n \n test_expect_success 'merge from unborn branch' '\n-- \n2.50.0-rc2-255-gd84100c98d\n\n"},{"id":"520197","messageId":"20250612222537.2426059-3-gitster@pobox.com","threadId":"63637","inReplyTo":"20250612222537.2426059-1-gitster@pobox.com","subject":"[PATCH v2 2/2] merge/pull: extend merge.stat configuration variable to cover --compact-summary","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-06-12T22:25:37Z","receivedAt":"2025-06-12T22:25:45Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"Existing `merge.stat` configuration variable is a Boolean that\ndefaults to `true` to control `git merge --[no-]stat` behaviour.\n\nExtend it to be \"Boolean or text\", that takes false, true, or\n\"compact\", with the last one triggering the --compact-summary\noption introduced earlier.\n\nSigned-off-by: Junio C Hamano <gitster@pobox.com>\n---\n Documentation/config/merge.adoc | 12 ++++++++++--\n builtin/merge.c                 | 18 ++++++++++++++++--\n t/t7600-merge.sh                | 15 +++++++++++++++\n 3 files changed, 41 insertions(+), 4 deletions(-)\n\ndiff --git a/Documentation/config/merge.adoc b/Documentation/config/merge.adoc\nindex 86359f6dd2..251a48fdf8 100644\n--- a/Documentation/config/merge.adoc\n+++ b/Documentation/config/merge.adoc\n@@ -81,8 +81,16 @@ as `false`. Defaults to `conflict`.\n \tattributes\" in linkgit:gitattributes[5].\n \n `merge.stat`::\n-\tWhether to print the diffstat between `ORIG_HEAD` and the merge result\n-\tat the end of the merge.  True by default.\n+\tWhat, if anything, to print between `ORIG_HEAD` and the merge result\n+\tat the end of the merge.  Possible values are:\n++\n+--\n+`false`;; Show nothing.\n+`true`;; Show `git diff --diffstat ORIG_HEAD`.\n+`compact`;; Show `git diff --compact-summary ORIG_HEAD`.\n+--\n++\n+If this variable is left unspecified, it defaults to `true`.\n \n `merge.autoStash`::\n \tWhen set to `true`, automatically create a temporary stash entry\ndiff --git a/builtin/merge.c b/builtin/merge.c\nindex 736739d3a9..65fed4b687 100644\n--- a/builtin/merge.c\n+++ b/builtin/merge.c\n@@ -673,8 +673,22 @@ static int git_merge_config(const char *k, const char *v,\n \t}\n \n \tif (!strcmp(k, \"merge.diffstat\") || !strcmp(k, \"merge.stat\")) {\n-\t\tshow_diffstat = git_config_bool(k, v)\n-\t\t\t? MERGE_SHOW_DIFFSTAT : 0;\n+\t\tint val = git_parse_maybe_bool_text(v);\n+\t\tswitch (val) {\n+\t\tcase 0:\n+\t\t\tshow_diffstat = 0;\n+\t\t\tbreak;\n+\t\tcase 1:\n+\t\t\tshow_diffstat = MERGE_SHOW_DIFFSTAT;\n+\t\t\tbreak;\n+\t\tdefault:\n+\t\t\tif (!strcmp(v, \"compact\"))\n+\t\t\t\tshow_diffstat = MERGE_SHOW_COMPACTSUMMARY;\n+\t\t\telse\n+\t\t\t\t/* setting from the future -- use the default */\n+\t\t\t\tshow_diffstat = MERGE_SHOW_DIFFSTAT;\n+\t\t\tbreak;\n+\t\t}\n \t} else if (!strcmp(k, \"merge.verifysignatures\")) {\n \t\tverify_signatures = git_config_bool(k, v);\n \t} else if (!strcmp(k, \"pull.twohead\")) {\ndiff --git a/t/t7600-merge.sh b/t/t7600-merge.sh\nindex 2972922b6a..8046c6bb54 100755\n--- a/t/t7600-merge.sh\n+++ b/t/t7600-merge.sh\n@@ -231,6 +231,21 @@ test_expect_success 'the same merge with compact summary' '\n \ttest_cmp expect actual\n '\n \n+test_expect_success 'the same merge with merge.stat=compact' '\n+\tcat >expect <<-\\EOF &&\n+\tUpdating FROM..TO\n+\tFast-forward\n+\t file        | 2 +-\n+\t other (new) | 9 +++++++++\n+\t 2 files changed, 10 insertions(+), 1 deletion(-)\n+\tEOF\n+\n+\tgit reset --hard c0 &&\n+\tgit -c merge.stat=compact merge c1 >out &&\n+\tsed -e \"1s/^Updating [0-9a-f.]*/Updating FROM..TO/\" out >actual &&\n+\ttest_cmp expect actual\n+'\n+\n test_debug 'git log --graph --decorate --oneline --all'\n \n test_expect_success 'merge from unborn branch' '\n-- \n2.50.0-rc2-255-gd84100c98d\n\n"},{"id":"520220","messageId":"857ea4d4-2252-4d46-9f93-e78e9450bb8c@app.fastmail.com","threadId":"63637","inReplyTo":"20250612222537.2426059-2-gitster@pobox.com","subject":"Re: [PATCH v2 1/2] merge/pull: --compact-summary","fromName":"Kristoffer Haugsbakk","fromEmail":"kristofferhaugsbakk@fastmail.com","sentAt":"2025-06-13T12:07:10Z","receivedAt":"2025-06-13T12:07:43Z","isPatch":true,"sender":{"key":"kristofferhaugsbakk@fastmail.com","avatar":null},"body":"On Fri, Jun 13, 2025, at 00:25, Junio C Hamano wrote:\n>  static struct option builtin_merge_options[] = {\n>  \tOPT_SET_INT('n', NULL, &show_diffstat,\n>  \t\tN_(\"do not show a diffstat at the end of the merge\"), 0),\n>  \tOPT_BOOL(0, \"stat\", &show_diffstat,\n>  \t\tN_(\"show a diffstat at the end of the merge\")),\n>  \tOPT_BOOL(0, \"summary\", &show_diffstat, N_(\"(synonym to --stat)\")),\n> +\tOPT_CALLBACK_F(0, \"compact-summary\", &show_diffstat, N_(\"compact-summary\"),\n> +\t\t       N_(\"show a compactstat at the end of the merge\"),\n> +\t\t       PARSE_OPT_NOARG,\n> +\t\t       option_parse_compact_summary),\n\n`compactstat` is very dense.  s/compactstat/compact stat/ ?\n"},{"id":"520221","messageId":"deb4951a-5d1b-416d-bcad-5d675d8155cc@app.fastmail.com","threadId":"63637","inReplyTo":"20250612222537.2426059-3-gitster@pobox.com","subject":"Re: [PATCH v2 2/2] merge/pull: extend merge.stat configuration variable to cover --compact-summary","fromName":"Kristoffer Haugsbakk","fromEmail":"kristofferhaugsbakk@fastmail.com","sentAt":"2025-06-13T12:09:52Z","receivedAt":"2025-06-13T12:10:14Z","isPatch":true,"sender":{"key":"kristofferhaugsbakk@fastmail.com","avatar":null},"body":"On Fri, Jun 13, 2025, at 00:25, Junio C Hamano wrote:\n> Extend it to be \"Boolean or text\", that takes false, true, or\n> \"compact\", with the last one triggering the --compact-summary\n> option introduced earlier.\n\nWould it make sense to make `diffstat` an alias for `true`?  I’m not\nsure since you need to keep `true` anyway so you still have that\nhistorical artifact (?)[1] of `true` meaning `diffstat`.\n\n† 1: In the sense of what was added first\n\nAlso\n\n> \"compact\", with the last one triggering the --compact-summary\n> option introduced earlier.\n\nSo `merge.stat` can be used instead of `--compact-summary`.  But now the\noption does not mention `merge.stat`?\n\n>  `merge.stat`::\n> -\tWhether to print the diffstat between `ORIG_HEAD` and the merge result\n> -\tat the end of the merge.  True by default.\n> +\tWhat, if anything, to print between `ORIG_HEAD` and the merge result\n> +\tat the end of the merge.  Possible values are:\n> ++\n> +--\n> +`false`;; Show nothing.\n> +`true`;; Show `git diff --diffstat ORIG_HEAD`.\n> +`compact`;; Show `git diff --compact-summary ORIG_HEAD`.\n\nI can’t run `git diff --diffstat ORIG_HEAD`.  `--diffstat` is not\nan option.\n\n> +If this variable is left unspecified, it defaults to `true`.\n\nI think this is simpler:\n\n    Defaults to `true`.\n\nThere’s also several places in this doc which uses something similar\njudging by a search for “defaults to”.  Only exception is\n`merge.renameLimit`:\n\n    If not specified, defaults to\n"},{"id":"520227","messageId":"xmqq5xgza9qt.fsf@gitster.g","threadId":"63637","inReplyTo":"857ea4d4-2252-4d46-9f93-e78e9450bb8c@app.fastmail.com","subject":"Re: [PATCH v2 1/2] merge/pull: --compact-summary","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-06-13T16:26:18Z","receivedAt":"2025-06-13T16:26:20Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Kristoffer Haugsbakk\" <kristofferhaugsbakk@fastmail.com> writes:\n\n> On Fri, Jun 13, 2025, at 00:25, Junio C Hamano wrote:\n>>  static struct option builtin_merge_options[] = {\n>>  \tOPT_SET_INT('n', NULL, &show_diffstat,\n>>  \t\tN_(\"do not show a diffstat at the end of the merge\"), 0),\n>>  \tOPT_BOOL(0, \"stat\", &show_diffstat,\n>>  \t\tN_(\"show a diffstat at the end of the merge\")),\n>>  \tOPT_BOOL(0, \"summary\", &show_diffstat, N_(\"(synonym to --stat)\")),\n>> +\tOPT_CALLBACK_F(0, \"compact-summary\", &show_diffstat, N_(\"compact-summary\"),\n>> +\t\t       N_(\"show a compactstat at the end of the merge\"),\n>> +\t\t       PARSE_OPT_NOARG,\n>> +\t\t       option_parse_compact_summary),\n>\n> `compactstat` is very dense.  s/compactstat/compact stat/ ?\n\nNice spotting.  I think \"compact summary\" (to match the diff option\n\"--compact-summary\") may be even better.\n\n"},{"id":"520228","messageId":"xmqqv7oz8um1.fsf@gitster.g","threadId":"63637","inReplyTo":"deb4951a-5d1b-416d-bcad-5d675d8155cc@app.fastmail.com","subject":"Re: [PATCH v2 2/2] merge/pull: extend merge.stat configuration variable to cover --compact-summary","fromName":"Junio C Hamano","fromEmail":"gitster@pobox.com","sentAt":"2025-06-13T16:38:30Z","receivedAt":"2025-06-13T16:38:32Z","isPatch":true,"sender":{"key":"gitster@pobox.com","avatar":"https://avatars.githubusercontent.com/u/54884?v=4"},"body":"\"Kristoffer Haugsbakk\" <kristofferhaugsbakk@fastmail.com> writes:\n\n> On Fri, Jun 13, 2025, at 00:25, Junio C Hamano wrote:\n>> Extend it to be \"Boolean or text\", that takes false, true, or\n>> \"compact\", with the last one triggering the --compact-summary\n>> option introduced earlier.\n>\n> Would it make sense to make `diffstat` an alias for `true`?  I’m not\n> sure since you need to keep `true` anyway so you still have that\n> historical artifact (?)[1] of `true` meaning `diffstat`.\n\nCorrect.  But people can bikeshed about adding such synonyms later\nwithout breaking existing users, so I would not consider such a\ntweak for the initial version.\n\n> There’s also several places in this doc which uses something similar\n> judging by a search for “defaults to”.  Only exception is\n> `merge.renameLimit`:\n>\n>     If not specified, defaults to\n\nHaving something before \"Defaults to X\" (like \"if left unspecified\"\netc.) may not be logically and technically needed, as that is the\ndefinion of what the \"default\" is.\n\nHaving said that, I somehow find the resulting sentence easier to\nread with such an introducer, but perhaps it is just me.\n\nAmong the output of\n\n    $ git grep -E -i ', default' Documentation/\n\nwe already have quite a few of them.\n\nThanks.\n\nDocumentation/config/commitgraph.adoc:repository, defaulting to 1 if there are none.\nDocumentation/config/merge.adoc:\trename detection during a merge.  If not specified, defaults\nDocumentation/fetch-options.adoc:is set (see linkgit:git-config[1]), defaulting to 'on-demand' if unset.\nDocumentation/git-init.adoc:The option can have the following values, defaulting to `group` if no value\nDocumentation/git-send-email.adoc:value; if that is unspecified, default to `auto`.\nDocumentation/git-send-email.adoc:\tvalue; if that is unspecified, default to --signed-off-by-cc.\nDocumentation/git-send-email.adoc:\tconfiguration value; if that is unspecified, default to --no-cc-cover.\nDocumentation/git-send-email.adoc:\tconfiguration value; if that is unspecified, default to --no-to-cover.\nDocumentation/git-send-email.adoc:that is unspecified, default to 'self' if --suppress-from is\nDocumentation/git-send-email.adoc:\tvalue; if that is unspecified, default to --no-suppress-from.\nDocumentation/git-send-email.adoc:is unspecified, default to 'auto' unless any of the suppress options\n"}]}