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)