merge: make collect_parents() auto-generate the merge message

Signed-off-by: Junio C Hamano <gitster@pobox.com>

Junio C Hamano committed Apr 25, 2015 at 18:34 UTC 1cf32f4d54d7db0da9b2fb35cdd277f9ab7ae0af
1 file changed +22 -14
builtin/merge.c
+22 -14
@@ -1092,7 +1092,8 @@ static void prepare_merge_message(struct strbuf *merge_names, struct strbuf *mer
1092
1093 static struct commit_list *collect_parents(struct commit *head_commit,
1094 int *head_subsumed,
1095 - int argc, const char **argv)
1095 + int argc, const char **argv,
1096 + struct strbuf *merge_msg)
1097 {
1098 int i;
1099 struct commit_list *remoteheads = NULL;
@@ -1108,7 +1109,20 @@ static struct commit_list *collect_parents(struct commit *head_commit,
1109 remotes = &commit_list_insert(commit, remotes)->next;
1110 }
1111
1111 - return reduce_parents(head_commit, head_subsumed, remoteheads);
1112 + remoteheads = reduce_parents(head_commit, head_subsumed, remoteheads);
1113 +
1114 + if (merge_msg &&
1115 + (!have_message || shortlog_len)) {
1116 + struct strbuf merge_names = STRBUF_INIT;
1117 + struct commit_list *p;
1118 +
1119 + for (p = remoteheads; p; p = p->next)
1120 + merge_name(merge_remote_util(p->item)->name, &merge_names);
1121 + prepare_merge_message(&merge_names, merge_msg);
1122 + strbuf_release(&merge_names);
1123 + }
1124 +
1125 + return remoteheads;
1126 }
1127
1128 int cmd_merge(int argc, const char **argv, const char *prefix)
@@ -1222,7 +1236,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
1236 if (fast_forward == FF_NO)
1237 die(_("Non-fast-forward commit does not make sense into "
1238 "an empty head"));
1225 - remoteheads = collect_parents(head_commit, &head_subsumed, argc, argv);
1239 + remoteheads = collect_parents(head_commit, &head_subsumed,
1240 + argc, argv, NULL);
1241 remote_head = remoteheads->item;
1242 if (!remote_head)
1243 die(_("%s - not something we can merge"), argv[0]);
@@ -1248,7 +1263,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
1263 head_arg = argv[1];
1264 argv += 2;
1265 argc -= 2;
1251 - remoteheads = collect_parents(head_commit, &head_subsumed, argc, argv);
1266 + remoteheads = collect_parents(head_commit, &head_subsumed,
1267 + argc, argv, NULL);
1268 } else {
1269 /* We are invoked directly as the first-class UI. */
1270 head_arg = "HEAD";
@@ -1258,16 +1274,8 @@ int cmd_merge(int argc, const char **argv, const char *prefix)
1274 * the standard merge summary message to be appended
1275 * to the given message.
1276 */
1261 - remoteheads = collect_parents(head_commit, &head_subsumed, argc, argv);
1262 -
1263 - if (!have_message || shortlog_len) {
1264 - struct strbuf merge_names = STRBUF_INIT;
1265 -
1266 - for (p = remoteheads; p; p = p->next)
1267 - merge_name(merge_remote_util(p->item)->name, &merge_names);
1268 - prepare_merge_message(&merge_names, &merge_msg);
1269 - strbuf_release(&merge_names);
1270 - }
1277 + remoteheads = collect_parents(head_commit, &head_subsumed,
1278 + argc, argv, &merge_msg);
1279 }
1280
1281 if (!head_commit || !argc)