Junio C Hamano <gitster@xxxxxxxxx> writes: > The fast-export side lifted the "single branch is special"; we > didn't do something similar for "fmt-merge-msg". > >> So I think a path forward is more like: >> >> 1. Add a new config option to shorten fmt-merge-msg's output when the >> destination branch matches it (and this should perhaps not even be >> a single name, but a set of globs, which supports more workflows). >> Call it merge.suppressDest or something. >> >> 2. Optionally a repository created with "git init" could copy its >> init.defaultBranch into merge.suppressDest. And likewise a clone >> might copy the remote HEAD into that variable. I'm not sure if that >> is worth doing or not, but it would restore the original behavior >> for the most part. > > Yeah, that sounds like a good plan. A rough outline I did while waiting for today's integration builds to finish looks like this, which does not look _too_ bad. We can replace the literal 'master' with the default branch name determined at runtime, but I am not sure if that is needed. fmt-merge-msg.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index cfb8ff2f33..b99699eacc 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -10,6 +10,8 @@ #include "commit-reach.h" static int use_branch_desc; +static int suppress_dest_pattern_seen; +static struct string_list suppress_dest_patterns = STRING_LIST_INIT_DUP; int fmt_merge_msg_config(const char *key, const char *value, void *cb) { @@ -22,6 +24,12 @@ int fmt_merge_msg_config(const char *key, const char *value, void *cb) merge_log_config = DEFAULT_MERGE_LOG_LEN; } else if (!strcmp(key, "merge.branchdesc")) { use_branch_desc = git_config_bool(key, value); + } else if (!strcmp(key, "merge.suppressdest")) { + if (!value) + string_list_clear(&suppress_dest_patterns, 0); + else + string_list_append(&suppress_dest_patterns, value); + suppress_dest_pattern_seen = 1; } else { return git_default_config(key, value, cb); } @@ -408,6 +416,8 @@ static void fmt_merge_msg_title(struct strbuf *out, { int i = 0; char *sep = ""; + struct string_list_item *item; + int suppress_merge_dest = 0; strbuf_addstr(out, "Merge "); for (i = 0; i < srcs.nr; i++) { @@ -451,7 +461,15 @@ static void fmt_merge_msg_title(struct strbuf *out, strbuf_addf(out, " of %s", srcs.items[i].string); } - strbuf_addf(out, " into %s\n", current_branch); + for_each_string_list_item(item, &suppress_dest_patterns) { + if (!wildmatch(item->string, current_branch, WM_PATHNAME)) { + suppress_merge_dest = 1; + break; + } + } + + if (!suppress_merge_dest) + strbuf_addf(out, " into %s\n", current_branch); } static void fmt_tag_signature(struct strbuf *tagbuf, @@ -596,6 +614,9 @@ int fmt_merge_msg(struct strbuf *in, struct strbuf *out, void *current_branch_to_free; struct merge_parents merge_parents; + if (!suppress_dest_pattern_seen) + string_list_append(&suppress_dest_patterns, "master"); + memset(&merge_parents, 0, sizeof(merge_parents)); /* get current branch */