Skip to content

Commit 3792623

Browse files
committed
Merge branch 'jc/merge-compact-summary' into seen
* jc/merge-compact-summary: merge/pull: --compact-summary
2 parents 48d8863 + 7c25974 commit 3792623

File tree

5 files changed

+69
-6
lines changed

5 files changed

+69
-6
lines changed

Documentation/git-merge.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ git-merge - Join two or more development histories together
99
SYNOPSIS
1010
--------
1111
[synopsis]
12-
git merge [-n] [--stat] [--no-commit] [--squash] [--[no-]edit]
12+
git merge [-n] [--stat] [--compact-summary] [--no-commit] [--squash] [--[no-]edit]
1313
[--no-verify] [-s <strategy>] [-X <strategy-option>] [-S[<keyid>]]
1414
[--[no-]allow-unrelated-histories]
1515
[--[no-]rerere-autoupdate] [-m <msg>] [-F <file>]

Documentation/merge-options.adoc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ include::signoff-option.adoc[]
113113
With `-n` or `--no-stat` do not show a diffstat at the end of the
114114
merge.
115115

116+
`--compact-summary`::
117+
Show a compact-summary at the end of the merge.
118+
116119
`--squash`::
117120
`--no-squash`::
118121
Produce the working tree and index state as if a real merge

builtin/merge.c

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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;
7376
static int option_commit = -1;
7477
static int option_edit = -1;
7578
static 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+
246261
static 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")) {

builtin/pull.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ static struct option pull_options[] = {
143143
OPT_PASSTHRU(0, "summary", &opt_diffstat, NULL,
144144
N_("(synonym to --stat)"),
145145
PARSE_OPT_NOARG | PARSE_OPT_HIDDEN),
146+
OPT_PASSTHRU(0, "compact-summary", &opt_diffstat, NULL,
147+
N_("show a compact-summary at the end of the merge"),
148+
PARSE_OPT_NOARG),
146149
OPT_PASSTHRU(0, "log", &opt_log, N_("n"),
147150
N_("add (at most <n>) entries from shortlog to merge commit message"),
148151
PARSE_OPT_OPTARG),

t/t7600-merge.sh

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,19 @@ test_expect_success 'reject non-strategy with a git-merge-foo name' '
185185
test_expect_success 'merge c0 with c1' '
186186
echo "OBJID HEAD@{0}: merge c1: Fast-forward" >reflog.expected &&
187187
188+
cat >expect <<-EOF &&
189+
Updating FROM..TO
190+
Fast-forward
191+
file | 2 +-
192+
other | 9 +++++++++
193+
2 files changed, 10 insertions(+), 1 deletion(-)
194+
create mode 100644 other
195+
EOF
196+
188197
git reset --hard c0 &&
189-
git merge c1 &&
198+
git merge c1 >out &&
199+
sed -e "1s/^Updating [0-9a-f.]*/Updating FROM..TO/" out >actual &&
200+
test_cmp expect actual &&
190201
verify_merge file result.1 &&
191202
verify_head "$c1" &&
192203
@@ -205,6 +216,21 @@ test_expect_success 'merge c0 with c1 with --ff-only' '
205216
verify_head "$c1"
206217
'
207218

219+
test_expect_success 'the same merge with compact summary' '
220+
cat >expect <<-EOF &&
221+
Updating FROM..TO
222+
Fast-forward
223+
file | 2 +-
224+
other (new) | 9 +++++++++
225+
2 files changed, 10 insertions(+), 1 deletion(-)
226+
EOF
227+
228+
git reset --hard c0 &&
229+
git merge --compact-summary c1 >out &&
230+
sed -e "1s/^Updating [0-9a-f.]*/Updating FROM..TO/" out >actual &&
231+
test_cmp expect actual
232+
'
233+
208234
test_debug 'git log --graph --decorate --oneline --all'
209235

210236
test_expect_success 'merge from unborn branch' '

0 commit comments

Comments
 (0)