@@ -69,7 +69,10 @@ static const char * const builtin_merge_usage[] = {
6969 NULL
7070};
7171
72- static int show_diffstat = 1 , shortlog_len = -1 , squash ;
72+ #define MERGE_SHOW_DIFFSTAT 1
73+ #define MERGE_SHOW_COMPACTSUMMARY 2
74+
75+ static int show_diffstat = MERGE_SHOW_DIFFSTAT , shortlog_len = -1 , squash ;
7376static int option_commit = -1 ;
7477static int option_edit = -1 ;
7578static int allow_trivial = 1 , have_message , verify_signatures ;
@@ -243,12 +246,28 @@ static int option_parse_strategy(const struct option *opt UNUSED,
243246 return 0 ;
244247}
245248
249+ static int option_parse_compact_summary (const struct option * opt ,
250+ const char * name UNUSED , int unset )
251+ {
252+ int * setting = opt -> value ;
253+
254+ if (unset )
255+ * setting = 0 ;
256+ else
257+ * setting = MERGE_SHOW_COMPACTSUMMARY ;
258+ return 0 ;
259+ }
260+
246261static struct option builtin_merge_options [] = {
247262 OPT_SET_INT ('n' , NULL , & show_diffstat ,
248263 N_ ("do not show a diffstat at the end of the merge" ), 0 ),
249264 OPT_BOOL (0 , "stat" , & show_diffstat ,
250265 N_ ("show a diffstat at the end of the merge" )),
251266 OPT_BOOL (0 , "summary" , & show_diffstat , N_ ("(synonym to --stat)" )),
267+ OPT_CALLBACK_F (0 , "compact-summary" , & show_diffstat , N_ ("compact-summary" ),
268+ N_ ("show a compactstat at the end of the merge" ),
269+ PARSE_OPT_NOARG ,
270+ option_parse_compact_summary ),
252271 {
253272 .type = OPTION_INTEGER ,
254273 .long_name = "log" ,
@@ -494,8 +513,19 @@ static void finish(struct commit *head_commit,
494513 struct diff_options opts ;
495514 repo_diff_setup (the_repository , & opts );
496515 init_diffstat_widths (& opts );
497- opts .output_format |=
498- DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT ;
516+
517+ switch (show_diffstat ) {
518+ case MERGE_SHOW_DIFFSTAT : /* 1 */
519+ opts .output_format |=
520+ DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT ;
521+ break ;
522+ case MERGE_SHOW_COMPACTSUMMARY : /* 2 */
523+ opts .output_format |= DIFF_FORMAT_DIFFSTAT ;
524+ opts .flags .stat_with_summary = 1 ;
525+ break ;
526+ default :
527+ break ;
528+ }
499529 opts .detect_rename = DIFF_DETECT_RENAME ;
500530 diff_setup_done (& opts );
501531 diff_tree_oid (head , new_head , "" , & opts );
@@ -643,7 +673,8 @@ static int git_merge_config(const char *k, const char *v,
643673 }
644674
645675 if (!strcmp (k , "merge.diffstat" ) || !strcmp (k , "merge.stat" )) {
646- show_diffstat = git_config_bool (k , v );
676+ show_diffstat = git_config_bool (k , v )
677+ ? MERGE_SHOW_DIFFSTAT : 0 ;
647678 } else if (!strcmp (k , "merge.verifysignatures" )) {
648679 verify_signatures = git_config_bool (k , v );
649680 } else if (!strcmp (k , "pull.twohead" )) {
0 commit comments