merge.c 45.3 KB
Newer Older
M
Miklos Vajna 已提交
1 2 3 4 5 6 7 8 9
/*
 * Builtin "git merge"
 *
 * Copyright (c) 2008 Miklos Vajna <vmiklos@frugalware.org>
 *
 * Based on git-merge.sh by Junio C Hamano.
 */

#include "cache.h"
10
#include "config.h"
M
Miklos Vajna 已提交
11 12
#include "parse-options.h"
#include "builtin.h"
13
#include "lockfile.h"
M
Miklos Vajna 已提交
14 15 16
#include "run-command.h"
#include "diff.h"
#include "refs.h"
17
#include "refspec.h"
M
Miklos Vajna 已提交
18 19 20 21 22 23 24 25 26
#include "commit.h"
#include "diffcore.h"
#include "revision.h"
#include "unpack-trees.h"
#include "cache-tree.h"
#include "dir.h"
#include "utf8.h"
#include "log-tree.h"
#include "color.h"
J
Junio C Hamano 已提交
27
#include "rerere.h"
28
#include "help.h"
29
#include "merge-recursive.h"
30
#include "resolve-undo.h"
31
#include "remote.h"
32
#include "fmt-merge-msg.h"
J
Junio C Hamano 已提交
33
#include "gpg-interface.h"
34
#include "sequencer.h"
35
#include "string-list.h"
J
Jonathan Tan 已提交
36
#include "packfile.h"
37
#include "tag.h"
38
#include "alias.h"
39
#include "commit-reach.h"
M
Miklos Vajna 已提交
40 41 42 43 44 45 46 47 48 49 50 51

#define DEFAULT_TWOHEAD (1<<0)
#define DEFAULT_OCTOPUS (1<<1)
#define NO_FAST_FORWARD (1<<2)
#define NO_TRIVIAL      (1<<3)

struct strategy {
	const char *name;
	unsigned attr;
};

static const char * const builtin_merge_usage[] = {
52
	N_("git merge [<options>] [<commit>...]"),
53
	N_("git merge --abort"),
54
	N_("git merge --continue"),
M
Miklos Vajna 已提交
55 56 57
	NULL
};

58
static int show_diffstat = 1, shortlog_len = -1, squash;
59 60
static int option_commit = 1;
static int option_edit = -1;
61
static int allow_trivial = 1, have_message, verify_signatures;
62
static int overwrite_ignore = 1;
63
static struct strbuf merge_msg = STRBUF_INIT;
M
Miklos Vajna 已提交
64 65
static struct strategy **use_strategies;
static size_t use_strategies_nr, use_strategies_alloc;
A
Avery Pennarun 已提交
66 67
static const char **xopts;
static size_t xopts_nr, xopts_alloc;
M
Miklos Vajna 已提交
68
static const char *branch;
69
static char *branch_mergeoptions;
J
Jonathan Nieder 已提交
70
static int option_renormalize;
T
Tuncer Ayaz 已提交
71
static int verbosity;
72
static int allow_rerere_auto;
73
static int abort_current_merge;
74
static int continue_current_merge;
75
static int allow_unrelated_histories;
76
static int show_progress = -1;
77
static int default_to_upstream = 1;
Ł
Łukasz Gryglicki 已提交
78
static int signoff;
J
Junio C Hamano 已提交
79
static const char *sign_commit;
80
static int verify_msg = 1;
M
Miklos Vajna 已提交
81 82 83 84 85 86 87 88 89 90 91

static struct strategy all_strategy[] = {
	{ "recursive",  DEFAULT_TWOHEAD | NO_TRIVIAL },
	{ "octopus",    DEFAULT_OCTOPUS },
	{ "resolve",    0 },
	{ "ours",       NO_FAST_FORWARD | NO_TRIVIAL },
	{ "subtree",    NO_FAST_FORWARD | NO_TRIVIAL },
};

static const char *pull_twohead, *pull_octopus;

92 93 94 95 96 97 98 99
enum ff_type {
	FF_NO,
	FF_ALLOW,
	FF_ONLY
};

static enum ff_type fast_forward = FF_ALLOW;

M
Miklos Vajna 已提交
100 101 102 103 104 105 106
static int option_parse_message(const struct option *opt,
				const char *arg, int unset)
{
	struct strbuf *buf = opt->value;

	if (unset)
		strbuf_setlen(buf, 0);
107
	else if (arg) {
108
		strbuf_addf(buf, "%s%s", buf->len ? "\n\n" : "", arg);
M
Miklos Vajna 已提交
109
		have_message = 1;
110
	} else
111
		return error(_("switch `m' requires a value"));
M
Miklos Vajna 已提交
112 113 114
	return 0;
}

115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143
static int option_read_message(struct parse_opt_ctx_t *ctx,
			       const struct option *opt, int unset)
{
	struct strbuf *buf = opt->value;
	const char *arg;

	if (unset)
		BUG("-F cannot be negated");

	if (ctx->opt) {
		arg = ctx->opt;
		ctx->opt = NULL;
	} else if (ctx->argc > 1) {
		ctx->argc--;
		arg = *++ctx->argv;
	} else
		return opterror(opt, "requires a value", 0);

	if (buf->len)
		strbuf_addch(buf, '\n');
	if (ctx->prefix && !is_absolute_path(arg))
		arg = prefix_filename(ctx->prefix, arg);
	if (strbuf_read_file(buf, arg, 0) < 0)
		return error(_("could not read file '%s'"), arg);
	have_message = 1;

	return 0;
}

M
Miklos Vajna 已提交
144 145 146
static struct strategy *get_strategy(const char *name)
{
	int i;
147 148
	struct strategy *ret;
	static struct cmdnames main_cmds, other_cmds;
149
	static int loaded;
M
Miklos Vajna 已提交
150 151 152 153 154 155 156

	if (!name)
		return NULL;

	for (i = 0; i < ARRAY_SIZE(all_strategy); i++)
		if (!strcmp(name, all_strategy[i].name))
			return &all_strategy[i];
157

158
	if (!loaded) {
159
		struct cmdnames not_strategies;
160
		loaded = 1;
161 162

		memset(&not_strategies, 0, sizeof(struct cmdnames));
163
		load_command_list("git-merge-", &main_cmds, &other_cmds);
164 165 166 167 168 169 170 171 172 173
		for (i = 0; i < main_cmds.cnt; i++) {
			int j, found = 0;
			struct cmdname *ent = main_cmds.names[i];
			for (j = 0; j < ARRAY_SIZE(all_strategy); j++)
				if (!strncmp(ent->name, all_strategy[j].name, ent->len)
						&& !all_strategy[j].name[ent->len])
					found = 1;
			if (!found)
				add_cmdname(&not_strategies, ent->name, ent->len);
		}
174
		exclude_cmds(&main_cmds, &not_strategies);
175 176
	}
	if (!is_in_cmdlist(&main_cmds, name) && !is_in_cmdlist(&other_cmds, name)) {
177 178
		fprintf(stderr, _("Could not find merge strategy '%s'.\n"), name);
		fprintf(stderr, _("Available strategies are:"));
179 180 181 182
		for (i = 0; i < main_cmds.cnt; i++)
			fprintf(stderr, " %s", main_cmds.names[i]->name);
		fprintf(stderr, ".\n");
		if (other_cmds.cnt) {
183
			fprintf(stderr, _("Available custom strategies are:"));
184 185 186 187
			for (i = 0; i < other_cmds.cnt; i++)
				fprintf(stderr, " %s", other_cmds.names[i]->name);
			fprintf(stderr, ".\n");
		}
188 189 190
		exit(1);
	}

191
	ret = xcalloc(1, sizeof(struct strategy));
192
	ret->name = xstrdup(name);
193
	ret->attr = NO_TRIVIAL;
194
	return ret;
M
Miklos Vajna 已提交
195 196 197 198 199 200 201 202 203 204 205 206 207 208
}

static void append_strategy(struct strategy *s)
{
	ALLOC_GROW(use_strategies, use_strategies_nr + 1, use_strategies_alloc);
	use_strategies[use_strategies_nr++] = s;
}

static int option_parse_strategy(const struct option *opt,
				 const char *name, int unset)
{
	if (unset)
		return 0;

209
	append_strategy(get_strategy(name));
M
Miklos Vajna 已提交
210 211 212
	return 0;
}

A
Avery Pennarun 已提交
213 214 215 216 217 218 219 220 221 222 223
static int option_parse_x(const struct option *opt,
			  const char *arg, int unset)
{
	if (unset)
		return 0;

	ALLOC_GROW(xopts, xopts_nr + 1, xopts_alloc);
	xopts[xopts_nr++] = xstrdup(arg);
	return 0;
}

M
Miklos Vajna 已提交
224 225 226
static int option_parse_n(const struct option *opt,
			  const char *arg, int unset)
{
227
	BUG_ON_OPT_ARG(arg);
M
Miklos Vajna 已提交
228 229 230 231 232 233
	show_diffstat = unset;
	return 0;
}

static struct option builtin_merge_options[] = {
	{ OPTION_CALLBACK, 'n', NULL, NULL, NULL,
234
		N_("do not show a diffstat at the end of the merge"),
M
Miklos Vajna 已提交
235
		PARSE_OPT_NOARG, option_parse_n },
236
	OPT_BOOL(0, "stat", &show_diffstat,
237
		N_("show a diffstat at the end of the merge")),
238
	OPT_BOOL(0, "summary", &show_diffstat, N_("(synonym to --stat)")),
239 240
	{ OPTION_INTEGER, 0, "log", &shortlog_len, N_("n"),
	  N_("add (at most <n>) entries from shortlog to merge commit message"),
241
	  PARSE_OPT_OPTARG, NULL, DEFAULT_MERGE_LOG_LEN },
242
	OPT_BOOL(0, "squash", &squash,
243
		N_("create a single commit instead of doing a merge")),
244
	OPT_BOOL(0, "commit", &option_commit,
245
		N_("perform a commit if the merge succeeds (default)")),
246
	OPT_BOOL('e', "edit", &option_edit,
247
		N_("edit message before committing")),
248
	OPT_SET_INT(0, "ff", &fast_forward, N_("allow fast-forward (default)"), FF_ALLOW),
249 250 251
	OPT_SET_INT_F(0, "ff-only", &fast_forward,
		      N_("abort if fast-forward is not possible"),
		      FF_ONLY, PARSE_OPT_NONEG),
252
	OPT_RERERE_AUTOUPDATE(&allow_rerere_auto),
253
	OPT_BOOL(0, "verify-signatures", &verify_signatures,
254
		N_("verify that the named commit has a valid GPG signature")),
255 256 257 258 259 260
	OPT_CALLBACK('s', "strategy", &use_strategies, N_("strategy"),
		N_("merge strategy to use"), option_parse_strategy),
	OPT_CALLBACK('X', "strategy-option", &xopts, N_("option=value"),
		N_("option for selected merge strategy"), option_parse_x),
	OPT_CALLBACK('m', "message", &merge_msg, N_("message"),
		N_("merge commit message (for a non-fast-forward merge)"),
M
Miklos Vajna 已提交
261
		option_parse_message),
262 263 264
	{ OPTION_LOWLEVEL_CALLBACK, 'F', "file", &merge_msg, N_("path"),
		N_("read message from file"), PARSE_OPT_NONEG,
		(parse_opt_cb *) option_read_message },
T
Tuncer Ayaz 已提交
265
	OPT__VERBOSITY(&verbosity),
266
	OPT_BOOL(0, "abort", &abort_current_merge,
267
		N_("abort the current in-progress merge")),
268 269
	OPT_BOOL(0, "continue", &continue_current_merge,
		N_("continue the current in-progress merge")),
270 271
	OPT_BOOL(0, "allow-unrelated-histories", &allow_unrelated_histories,
		 N_("allow merging unrelated histories")),
272
	OPT_SET_INT(0, "progress", &show_progress, N_("force progress reporting"), 1),
273
	{ OPTION_STRING, 'S', "gpg-sign", &sign_commit, N_("key-id"),
274
	  N_("GPG sign commit"), PARSE_OPT_OPTARG, NULL, (intptr_t) "" },
275
	OPT_BOOL(0, "overwrite-ignore", &overwrite_ignore, N_("update ignored files (default)")),
Ł
Łukasz Gryglicki 已提交
276
	OPT_BOOL(0, "signoff", &signoff, N_("add Signed-off-by:")),
277
	OPT_BOOL(0, "verify", &verify_msg, N_("verify commit-msg hook")),
M
Miklos Vajna 已提交
278 279 280 281 282 283
	OPT_END()
};

/* Cleans up metadata that is uninteresting after a succeeded merge. */
static void drop_save(void)
{
284 285 286
	unlink(git_path_merge_head(the_repository));
	unlink(git_path_merge_msg(the_repository));
	unlink(git_path_merge_mode(the_repository));
M
Miklos Vajna 已提交
287 288
}

289
static int save_state(struct object_id *stash)
M
Miklos Vajna 已提交
290 291
{
	int len;
292
	struct child_process cp = CHILD_PROCESS_INIT;
M
Miklos Vajna 已提交
293 294
	struct strbuf buffer = STRBUF_INIT;
	const char *argv[] = {"stash", "create", NULL};
295
	int rc = -1;
M
Miklos Vajna 已提交
296 297 298 299 300 301

	cp.argv = argv;
	cp.out = -1;
	cp.git_cmd = 1;

	if (start_command(&cp))
302
		die(_("could not run stash."));
M
Miklos Vajna 已提交
303 304 305 306
	len = strbuf_read(&buffer, cp.out, 1024);
	close(cp.out);

	if (finish_command(&cp) || len < 0)
307
		die(_("stash failed"));
308
	else if (!len)		/* no changes */
309
		goto out;
M
Miklos Vajna 已提交
310
	strbuf_setlen(&buffer, buffer.len-1);
311
	if (get_oid(buffer.buf, stash))
312
		die(_("not a valid object: %s"), buffer.buf);
313 314 315 316
	rc = 0;
out:
	strbuf_release(&buffer);
	return rc;
M
Miklos Vajna 已提交
317 318
}

319
static void read_empty(const struct object_id *oid, int verbose)
320 321 322 323 324 325 326 327 328
{
	int i = 0;
	const char *args[7];

	args[i++] = "read-tree";
	if (verbose)
		args[i++] = "-v";
	args[i++] = "-m";
	args[i++] = "-u";
329 330
	args[i++] = empty_tree_oid_hex();
	args[i++] = oid_to_hex(oid);
331 332 333
	args[i] = NULL;

	if (run_command_v_opt(args, RUN_GIT_CMD))
334
		die(_("read-tree failed"));
335 336
}

337
static void reset_hard(const struct object_id *oid, int verbose)
M
Miklos Vajna 已提交
338 339 340 341 342 343 344 345 346
{
	int i = 0;
	const char *args[6];

	args[i++] = "read-tree";
	if (verbose)
		args[i++] = "-v";
	args[i++] = "--reset";
	args[i++] = "-u";
347
	args[i++] = oid_to_hex(oid);
M
Miklos Vajna 已提交
348 349 350
	args[i] = NULL;

	if (run_command_v_opt(args, RUN_GIT_CMD))
351
		die(_("read-tree failed"));
M
Miklos Vajna 已提交
352 353
}

354 355
static void restore_state(const struct object_id *head,
			  const struct object_id *stash)
M
Miklos Vajna 已提交
356
{
357
	struct strbuf sb = STRBUF_INIT;
M
Miklos Vajna 已提交
358 359
	const char *args[] = { "stash", "apply", NULL, NULL };

360
	if (is_null_oid(stash))
M
Miklos Vajna 已提交
361 362
		return;

363
	reset_hard(head, 1);
M
Miklos Vajna 已提交
364

365
	args[2] = oid_to_hex(stash);
M
Miklos Vajna 已提交
366 367 368 369 370 371 372 373 374 375 376 377 378 379

	/*
	 * It is OK to ignore error here, for example when there was
	 * nothing to restore.
	 */
	run_command_v_opt(args, RUN_GIT_CMD);

	strbuf_release(&sb);
	refresh_cache(REFRESH_QUIET);
}

/* This is called when no merge was necessary. */
static void finish_up_to_date(const char *msg)
{
T
Tuncer Ayaz 已提交
380
	if (verbosity >= 0)
381
		printf("%s%s\n", squash ? _(" (nothing to squash)") : "", msg);
M
Miklos Vajna 已提交
382 383 384
	drop_save();
}

385
static void squash_message(struct commit *commit, struct commit_list *remoteheads)
M
Miklos Vajna 已提交
386 387
{
	struct rev_info rev;
388
	struct strbuf out = STRBUF_INIT;
M
Miklos Vajna 已提交
389
	struct commit_list *j;
390
	struct pretty_print_context ctx = {0};
M
Miklos Vajna 已提交
391

392
	printf(_("Squash commit -- not updating HEAD\n"));
M
Miklos Vajna 已提交
393

394
	repo_init_revisions(the_repository, &rev, NULL);
M
Miklos Vajna 已提交
395 396 397 398 399 400 401 402 403 404 405
	rev.ignore_merges = 1;
	rev.commit_format = CMIT_FMT_MEDIUM;

	commit->object.flags |= UNINTERESTING;
	add_pending_object(&rev, &commit->object, NULL);

	for (j = remoteheads; j; j = j->next)
		add_pending_object(&rev, &j->item->object, NULL);

	setup_revisions(0, NULL, &rev, NULL);
	if (prepare_revision_walk(&rev))
406
		die(_("revision walk setup failed"));
M
Miklos Vajna 已提交
407

408 409
	ctx.abbrev = rev.abbrev;
	ctx.date_mode = rev.date_mode;
410
	ctx.fmt = rev.commit_format;
411

M
Miklos Vajna 已提交
412 413 414 415
	strbuf_addstr(&out, "Squashed commit of the following:\n");
	while ((commit = get_revision(&rev)) != NULL) {
		strbuf_addch(&out, '\n');
		strbuf_addf(&out, "commit %s\n",
416
			oid_to_hex(&commit->object.oid));
417
		pretty_print_commit(&ctx, commit, &out);
M
Miklos Vajna 已提交
418
	}
419
	write_file_buf(git_path_squash_msg(the_repository), out.buf, out.len);
M
Miklos Vajna 已提交
420 421 422
	strbuf_release(&out);
}

423
static void finish(struct commit *head_commit,
424
		   struct commit_list *remoteheads,
425
		   const struct object_id *new_head, const char *msg)
M
Miklos Vajna 已提交
426
{
427
	struct strbuf reflog_message = STRBUF_INIT;
428
	const struct object_id *head = &head_commit->object.oid;
M
Miklos Vajna 已提交
429 430 431 432

	if (!msg)
		strbuf_addstr(&reflog_message, getenv("GIT_REFLOG_ACTION"));
	else {
T
Tuncer Ayaz 已提交
433 434
		if (verbosity >= 0)
			printf("%s\n", msg);
M
Miklos Vajna 已提交
435 436 437 438
		strbuf_addf(&reflog_message, "%s: %s",
			getenv("GIT_REFLOG_ACTION"), msg);
	}
	if (squash) {
439
		squash_message(head_commit, remoteheads);
M
Miklos Vajna 已提交
440
	} else {
T
Tuncer Ayaz 已提交
441
		if (verbosity >= 0 && !merge_msg.len)
442
			printf(_("No merge message -- not updating HEAD\n"));
M
Miklos Vajna 已提交
443 444
		else {
			const char *argv_gc_auto[] = { "gc", "--auto", NULL };
445 446
			update_ref(reflog_message.buf, "HEAD", new_head, head,
				   0, UPDATE_REFS_DIE_ON_ERR);
M
Miklos Vajna 已提交
447 448 449 450
			/*
			 * We ignore errors in 'gc --auto', since the
			 * user should see them.
			 */
451
			close_all_packs(the_repository->objects);
M
Miklos Vajna 已提交
452 453 454 455 456
			run_command_v_opt(argv_gc_auto, RUN_GIT_CMD);
		}
	}
	if (new_head && show_diffstat) {
		struct diff_options opts;
457
		repo_diff_setup(the_repository, &opts);
458
		opts.stat_width = -1; /* use full terminal width */
459
		opts.stat_graph_width = -1; /* respect statGraphWidth config */
M
Miklos Vajna 已提交
460 461 462
		opts.output_format |=
			DIFF_FORMAT_SUMMARY | DIFF_FORMAT_DIFFSTAT;
		opts.detect_rename = DIFF_DETECT_RENAME;
T
Thomas Rast 已提交
463
		diff_setup_done(&opts);
464
		diff_tree_oid(head, new_head, "", &opts);
M
Miklos Vajna 已提交
465 466 467 468 469
		diffcore_std(&opts);
		diff_flush(&opts);
	}

	/* Run a post-merge hook */
470
	run_hook_le(NULL, "post-merge", squash ? "1" : "0", NULL);
M
Miklos Vajna 已提交
471 472 473 474 475 476 477

	strbuf_release(&reflog_message);
}

/* Get the name for the merge commit's message. */
static void merge_name(const char *remote, struct strbuf *msg)
{
478
	struct commit *remote_head;
479
	struct object_id branch_head;
480
	struct strbuf buf = STRBUF_INIT;
J
Junio C Hamano 已提交
481
	struct strbuf bname = STRBUF_INIT;
482
	struct merge_remote_desc *desc;
M
Miklos Vajna 已提交
483
	const char *ptr;
484
	char *found_ref;
M
Miklos Vajna 已提交
485 486
	int len, early;

487
	strbuf_branchname(&bname, remote, 0);
488
	remote = bname.buf;
J
Junio C Hamano 已提交
489

490
	oidclr(&branch_head);
491
	remote_head = get_merge_parent(remote);
M
Miklos Vajna 已提交
492
	if (!remote_head)
493
		die(_("'%s' does not point to a commit"), remote);
M
Miklos Vajna 已提交
494

495
	if (dwim_ref(remote, strlen(remote), &branch_head, &found_ref) > 0) {
496
		if (starts_with(found_ref, "refs/heads/")) {
497
			strbuf_addf(msg, "%s\t\tbranch '%s' of .\n",
498
				    oid_to_hex(&branch_head), remote);
499 500
			goto cleanup;
		}
501
		if (starts_with(found_ref, "refs/tags/")) {
502
			strbuf_addf(msg, "%s\t\ttag '%s' of .\n",
503
				    oid_to_hex(&branch_head), remote);
504 505
			goto cleanup;
		}
506
		if (starts_with(found_ref, "refs/remotes/")) {
507
			strbuf_addf(msg, "%s\t\tremote-tracking branch '%s' of .\n",
508
				    oid_to_hex(&branch_head), remote);
509 510
			goto cleanup;
		}
M
Miklos Vajna 已提交
511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540
	}

	/* See if remote matches <name>^^^.. or <name>~<number> */
	for (len = 0, ptr = remote + strlen(remote);
	     remote < ptr && ptr[-1] == '^';
	     ptr--)
		len++;
	if (len)
		early = 1;
	else {
		early = 0;
		ptr = strrchr(remote, '~');
		if (ptr) {
			int seen_nonzero = 0;

			len++; /* count ~ */
			while (*++ptr && isdigit(*ptr)) {
				seen_nonzero |= (*ptr != '0');
				len++;
			}
			if (*ptr)
				len = 0; /* not ...~<number> */
			else if (seen_nonzero)
				early = 1;
			else if (len == 1)
				early = 1; /* "name~" is "name~1"! */
		}
	}
	if (len) {
		struct strbuf truname = STRBUF_INIT;
541
		strbuf_addf(&truname, "refs/heads/%s", remote);
542
		strbuf_setlen(&truname, truname.len - len);
543
		if (ref_exists(truname.buf)) {
M
Miklos Vajna 已提交
544 545
			strbuf_addf(msg,
				    "%s\t\tbranch '%s'%s of .\n",
546
				    oid_to_hex(&remote_head->object.oid),
547
				    truname.buf + 11,
M
Miklos Vajna 已提交
548
				    (early ? " (early part)" : ""));
J
Junio C Hamano 已提交
549 550
			strbuf_release(&truname);
			goto cleanup;
M
Miklos Vajna 已提交
551
		}
552
		strbuf_release(&truname);
M
Miklos Vajna 已提交
553
	}
554

555 556 557 558 559 560 561
	desc = merge_remote_util(remote_head);
	if (desc && desc->obj && desc->obj->type == OBJ_TAG) {
		strbuf_addf(msg, "%s\t\t%s '%s'\n",
			    oid_to_hex(&desc->obj->oid),
			    type_name(desc->obj->type),
			    remote);
		goto cleanup;
562 563
	}

M
Miklos Vajna 已提交
564
	strbuf_addf(msg, "%s\t\tcommit '%s'\n",
565
		oid_to_hex(&remote_head->object.oid), remote);
J
Junio C Hamano 已提交
566 567 568
cleanup:
	strbuf_release(&buf);
	strbuf_release(&bname);
M
Miklos Vajna 已提交
569 570
}

571 572 573 574 575 576 577 578 579
static void parse_branch_merge_options(char *bmo)
{
	const char **argv;
	int argc;

	if (!bmo)
		return;
	argc = split_cmdline(bmo, &argv);
	if (argc < 0)
580 581
		die(_("Bad branch.%s.mergeoptions string: %s"), branch,
		    split_cmdline_strerror(argc));
582
	REALLOC_ARRAY(argv, argc + 2);
R
René Scharfe 已提交
583
	MOVE_ARRAY(argv + 1, argv, argc + 1);
584 585 586 587 588 589 590
	argc++;
	argv[0] = "branch.*.mergeoptions";
	parse_options(argc, argv, NULL, builtin_merge_options,
		      builtin_merge_usage, 0);
	free(argv);
}

591
static int git_merge_config(const char *k, const char *v, void *cb)
M
Miklos Vajna 已提交
592
{
593 594
	int status;

595 596
	if (branch && starts_with(k, "branch.") &&
		starts_with(k + 7, branch) &&
M
Miklos Vajna 已提交
597
		!strcmp(k + 7 + strlen(branch), ".mergeoptions")) {
598 599 600
		free(branch_mergeoptions);
		branch_mergeoptions = xstrdup(v);
		return 0;
M
Miklos Vajna 已提交
601 602 603 604
	}

	if (!strcmp(k, "merge.diffstat") || !strcmp(k, "merge.stat"))
		show_diffstat = git_config_bool(k, v);
605 606
	else if (!strcmp(k, "merge.verifysignatures"))
		verify_signatures = git_config_bool(k, v);
M
Miklos Vajna 已提交
607 608 609 610
	else if (!strcmp(k, "pull.twohead"))
		return git_config_string(&pull_twohead, k, v);
	else if (!strcmp(k, "pull.octopus"))
		return git_config_string(&pull_octopus, k, v);
J
Jonathan Nieder 已提交
611 612
	else if (!strcmp(k, "merge.renormalize"))
		option_renormalize = git_config_bool(k, v);
613
	else if (!strcmp(k, "merge.ff")) {
614
		int boolval = git_parse_maybe_bool(v);
615
		if (0 <= boolval) {
616
			fast_forward = boolval ? FF_ALLOW : FF_NO;
617
		} else if (v && !strcmp(v, "only")) {
618
			fast_forward = FF_ONLY;
619 620
		} /* do not barf on values from future versions of git */
		return 0;
621 622 623
	} else if (!strcmp(k, "merge.defaulttoupstream")) {
		default_to_upstream = git_config_bool(k, v);
		return 0;
624 625 626
	} else if (!strcmp(k, "commit.gpgsign")) {
		sign_commit = git_config_bool(k, v) ? "" : NULL;
		return 0;
627
	}
J
Junio C Hamano 已提交
628

629
	status = fmt_merge_msg_config(k, v, cb);
J
Junio C Hamano 已提交
630 631
	if (status)
		return status;
J
Junio C Hamano 已提交
632
	status = git_gpg_config(k, v, NULL);
633 634
	if (status)
		return status;
M
Miklos Vajna 已提交
635 636 637
	return git_diff_ui_config(k, v, cb);
}

638 639
static int read_tree_trivial(struct object_id *common, struct object_id *head,
			     struct object_id *one)
M
Miklos Vajna 已提交
640 641 642 643 644 645 646 647 648 649 650 651 652 653
{
	int i, nr_trees = 0;
	struct tree *trees[MAX_UNPACK_TREES];
	struct tree_desc t[MAX_UNPACK_TREES];
	struct unpack_trees_options opts;

	memset(&opts, 0, sizeof(opts));
	opts.head_idx = 2;
	opts.src_index = &the_index;
	opts.dst_index = &the_index;
	opts.update = 1;
	opts.verbose_update = 1;
	opts.trivial_merges_only = 1;
	opts.merge = 1;
654
	trees[nr_trees] = parse_tree_indirect(common);
M
Miklos Vajna 已提交
655 656
	if (!trees[nr_trees++])
		return -1;
657
	trees[nr_trees] = parse_tree_indirect(head);
M
Miklos Vajna 已提交
658 659
	if (!trees[nr_trees++])
		return -1;
660
	trees[nr_trees] = parse_tree_indirect(one);
M
Miklos Vajna 已提交
661 662 663 664 665 666 667 668 669 670 671 672 673
	if (!trees[nr_trees++])
		return -1;
	opts.fn = threeway_merge;
	cache_tree_free(&active_cache_tree);
	for (i = 0; i < nr_trees; i++) {
		parse_tree(trees[i]);
		init_tree_desc(t+i, trees[i]->buffer, trees[i]->size);
	}
	if (unpack_trees(nr_trees, t, &opts))
		return -1;
	return 0;
}

674
static void write_tree_trivial(struct object_id *oid)
M
Miklos Vajna 已提交
675
{
676
	if (write_cache_as_tree(oid, 0, NULL))
677
		die(_("git write-tree failed to write a tree"));
M
Miklos Vajna 已提交
678 679
}

680
static int try_merge_strategy(const char *strategy, struct commit_list *common,
681
			      struct commit_list *remoteheads,
682
			      struct commit *head)
683
{
684
	struct lock_file lock = LOCK_INIT;
685
	const char *head_arg = "HEAD";
686

687
	hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
688
	refresh_cache(REFRESH_QUIET);
689 690
	if (write_locked_index(&the_index, &lock,
			       COMMIT_LOCK | SKIP_IF_UNCHANGED))
691
		return error(_("Unable to write index."));
M
Miklos Vajna 已提交
692

693
	if (!strcmp(strategy, "recursive") || !strcmp(strategy, "subtree")) {
694
		int clean, x;
695 696 697
		struct commit *result;
		struct commit_list *reversed = NULL;
		struct merge_options o;
698
		struct commit_list *j;
699 700

		if (remoteheads->next) {
701
			error(_("Not handling anything other than two heads merge."));
702 703 704 705 706
			return 2;
		}

		init_merge_options(&o);
		if (!strcmp(strategy, "subtree"))
707
			o.subtree_shift = "";
A
Avery Pennarun 已提交
708

J
Jonathan Nieder 已提交
709
		o.renormalize = option_renormalize;
710 711
		o.show_rename_progress =
			show_progress == -1 ? isatty(2) : show_progress;
J
Jonathan Nieder 已提交
712

713 714
		for (x = 0; x < xopts_nr; x++)
			if (parse_merge_opt(&o, xopts[x]))
715
				die(_("Unknown option for merge-recursive: -X%s"), xopts[x]);
716 717

		o.branch1 = head_arg;
718
		o.branch2 = merge_remote_util(remoteheads->item)->name;
719 720 721 722

		for (j = common; j; j = j->next)
			commit_list_insert(j->item, &reversed);

723
		hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
724
		clean = merge_recursive(&o, head,
725
				remoteheads->item, reversed, &result);
726 727
		if (clean < 0)
			exit(128);
728 729
		if (write_locked_index(&the_index, &lock,
				       COMMIT_LOCK | SKIP_IF_UNCHANGED))
730
			die(_("unable to write %s"), get_index_file());
731 732
		return clean ? 0 : 1;
	} else {
733 734 735
		return try_merge_command(the_repository,
					 strategy, xopts_nr, xopts,
					 common, head_arg, remoteheads);
736
	}
M
Miklos Vajna 已提交
737 738 739 740 741 742 743 744 745 746 747 748 749 750
}

static void count_diff_files(struct diff_queue_struct *q,
			     struct diff_options *opt, void *data)
{
	int *count = data;

	(*count) += q->nr;
}

static int count_unmerged_entries(void)
{
	int i, ret = 0;

751 752
	for (i = 0; i < active_nr; i++)
		if (ce_stage(active_cache[i]))
M
Miklos Vajna 已提交
753 754 755 756 757 758 759
			ret++;

	return ret;
}

static void add_strategies(const char *string, unsigned attr)
{
760 761 762 763 764 765 766 767 768
	int i;

	if (string) {
		struct string_list list = STRING_LIST_INIT_DUP;
		struct string_list_item *item;
		string_list_split(&list, string, ' ', -1);
		for_each_string_list_item(item, &list)
			append_strategy(get_strategy(item->string));
		string_list_clear(&list, 0);
M
Miklos Vajna 已提交
769 770 771 772 773 774 775 776
		return;
	}
	for (i = 0; i < ARRAY_SIZE(all_strategy); i++)
		if (all_strategy[i].attr & attr)
			append_strategy(&all_strategy[i]);

}

J
Jay Soffian 已提交
777
static void read_merge_msg(struct strbuf *msg)
778
{
779
	const char *filename = git_path_merge_msg(the_repository);
J
Jay Soffian 已提交
780
	strbuf_reset(msg);
781 782
	if (strbuf_read_file(msg, filename, 0) < 0)
		die_errno(_("Could not read from '%s'"), filename);
783 784
}

785 786
static void write_merge_state(struct commit_list *);
static void abort_commit(struct commit_list *remoteheads, const char *err_msg)
787
{
J
Jay Soffian 已提交
788 789 790 791
	if (err_msg)
		error("%s", err_msg);
	fprintf(stderr,
		_("Not committing merge; use 'git commit' to complete the merge.\n"));
792
	write_merge_state(remoteheads);
J
Jay Soffian 已提交
793 794 795
	exit(1);
}

796 797 798 799
static const char merge_editor_comment[] =
N_("Please enter a commit message to explain why this merge is necessary,\n"
   "especially if it merges an updated upstream into a topic branch.\n"
   "\n"
J
Junio C Hamano 已提交
800
   "Lines starting with '%c' will be ignored, and an empty message aborts\n"
801 802
   "the commit.\n");

803
static void write_merge_heads(struct commit_list *);
804
static void prepare_to_commit(struct commit_list *remoteheads)
J
Jay Soffian 已提交
805 806 807 808
{
	struct strbuf msg = STRBUF_INIT;
	strbuf_addbuf(&msg, &merge_msg);
	strbuf_addch(&msg, '\n');
M
Michael J Gruber 已提交
809 810
	if (squash)
		BUG("the control must not reach here under --squash");
811
	if (0 < option_edit)
J
Junio C Hamano 已提交
812
		strbuf_commented_addf(&msg, _(merge_editor_comment), comment_line_char);
Ł
Łukasz Gryglicki 已提交
813 814
	if (signoff)
		append_signoff(&msg, ignore_non_trailer(msg.buf, msg.len), 0);
815
	write_merge_heads(remoteheads);
816
	write_file_buf(git_path_merge_msg(the_repository), msg.buf, msg.len);
817
	if (run_commit_hook(0 < option_edit, get_index_file(), "prepare-commit-msg",
818
			    git_path_merge_msg(the_repository), "merge", NULL))
819
		abort_commit(remoteheads, NULL);
820
	if (0 < option_edit) {
821
		if (launch_editor(git_path_merge_msg(the_repository), NULL, NULL))
822
			abort_commit(remoteheads, NULL);
J
Jay Soffian 已提交
823
	}
824 825 826

	if (verify_msg && run_commit_hook(0 < option_edit, get_index_file(),
					  "commit-msg",
827
					  git_path_merge_msg(the_repository), NULL))
828 829
		abort_commit(remoteheads, NULL);

J
Jay Soffian 已提交
830
	read_merge_msg(&msg);
831
	strbuf_stripspace(&msg, 0 < option_edit);
J
Jay Soffian 已提交
832
	if (!msg.len)
833
		abort_commit(remoteheads, _("Empty commit message."));
J
Jay Soffian 已提交
834 835 836
	strbuf_release(&merge_msg);
	strbuf_addbuf(&merge_msg, &msg);
	strbuf_release(&msg);
837 838
}

839
static int merge_trivial(struct commit *head, struct commit_list *remoteheads)
M
Miklos Vajna 已提交
840
{
841
	struct object_id result_tree, result_commit;
842
	struct commit_list *parents, **pptr = &parents;
843
	struct lock_file lock = LOCK_INIT;
844

845
	hold_locked_index(&lock, LOCK_DIE_ON_ERROR);
846
	refresh_cache(REFRESH_QUIET);
847 848
	if (write_locked_index(&the_index, &lock,
			       COMMIT_LOCK | SKIP_IF_UNCHANGED))
849
		return error(_("Unable to write index."));
M
Miklos Vajna 已提交
850

851
	write_tree_trivial(&result_tree);
852
	printf(_("Wonderful.\n"));
853 854
	pptr = commit_list_append(head, pptr);
	pptr = commit_list_append(remoteheads->item, pptr);
855
	prepare_to_commit(remoteheads);
856 857
	if (commit_tree(merge_msg.buf, merge_msg.len, &result_tree, parents,
			&result_commit, NULL, sign_commit))
858
		die(_("failed to write commit object"));
859
	finish(head, remoteheads, &result_commit, "In-index merge");
M
Miklos Vajna 已提交
860 861 862 863
	drop_save();
	return 0;
}

864
static int finish_automerge(struct commit *head,
865
			    int head_subsumed,
866
			    struct commit_list *common,
867
			    struct commit_list *remoteheads,
868
			    struct object_id *result_tree,
M
Miklos Vajna 已提交
869 870
			    const char *wt_strategy)
{
871
	struct commit_list *parents = NULL;
M
Miklos Vajna 已提交
872
	struct strbuf buf = STRBUF_INIT;
873
	struct object_id result_commit;
M
Miklos Vajna 已提交
874 875

	free_commit_list(common);
876
	parents = remoteheads;
877
	if (!head_subsumed || fast_forward == FF_NO)
878
		commit_list_insert(head, &parents);
M
Miklos Vajna 已提交
879
	strbuf_addch(&merge_msg, '\n');
880
	prepare_to_commit(remoteheads);
881 882
	if (commit_tree(merge_msg.buf, merge_msg.len, result_tree, parents,
			&result_commit, NULL, sign_commit))
883
		die(_("failed to write commit object"));
J
Junio C Hamano 已提交
884
	strbuf_addf(&buf, "Merge made by the '%s' strategy.", wt_strategy);
885
	finish(head, remoteheads, &result_commit, buf.buf);
M
Miklos Vajna 已提交
886 887 888 889 890
	strbuf_release(&buf);
	drop_save();
	return 0;
}

891
static int suggest_conflicts(void)
M
Miklos Vajna 已提交
892
{
893
	const char *filename;
M
Miklos Vajna 已提交
894
	FILE *fp;
895
	struct strbuf msgbuf = STRBUF_INIT;
M
Miklos Vajna 已提交
896

897
	filename = git_path_merge_msg(the_repository);
898
	fp = xfopen(filename, "a");
899 900 901

	append_conflicts_hint(&msgbuf);
	fputs(msgbuf.buf, fp);
902
	strbuf_release(&msgbuf);
M
Miklos Vajna 已提交
903
	fclose(fp);
904
	repo_rerere(the_repository, allow_rerere_auto);
905 906
	printf(_("Automatic merge failed; "
			"fix conflicts and then commit the result.\n"));
M
Miklos Vajna 已提交
907 908 909 910 911 912 913 914 915
	return 1;
}

static int evaluate_result(void)
{
	int cnt = 0;
	struct rev_info rev;

	/* Check how many files differ. */
916
	repo_init_revisions(the_repository, &rev, "");
M
Miklos Vajna 已提交
917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932
	setup_revisions(0, NULL, &rev, NULL);
	rev.diffopt.output_format |=
		DIFF_FORMAT_CALLBACK;
	rev.diffopt.format_callback = count_diff_files;
	rev.diffopt.format_callback_data = &cnt;
	run_diff_files(&rev, 0);

	/*
	 * Check how many unmerged entries are
	 * there.
	 */
	cnt += count_unmerged_entries();

	return cnt;
}

933
/*
934
 * Pretend as if the user told us to merge with the remote-tracking
935 936 937 938 939 940 941 942 943
 * branch we have for the upstream of the current branch
 */
static int setup_with_upstream(const char ***argv)
{
	struct branch *branch = branch_get(NULL);
	int i;
	const char **args;

	if (!branch)
944
		die(_("No current branch."));
945
	if (!branch->remote_name)
946
		die(_("No remote for the current branch."));
947
	if (!branch->merge_nr)
948
		die(_("No default upstream defined for the current branch."));
949

950
	args = xcalloc(st_add(branch->merge_nr, 1), sizeof(char *));
951 952
	for (i = 0; i < branch->merge_nr; i++) {
		if (!branch->merge[i]->dst)
953
			die(_("No remote-tracking branch for %s from %s"),
954 955 956 957 958 959 960 961
			    branch->merge[i]->src, branch->remote_name);
		args[i] = branch->merge[i]->dst;
	}
	args[i] = NULL;
	*argv = args;
	return i;
}

962
static void write_merge_heads(struct commit_list *remoteheads)
J
Jay Soffian 已提交
963 964 965 966
{
	struct commit_list *j;
	struct strbuf buf = STRBUF_INIT;

967
	for (j = remoteheads; j; j = j->next) {
968
		struct object_id *oid;
969
		struct commit *c = j->item;
970 971 972 973 974
		struct merge_remote_desc *desc;

		desc = merge_remote_util(c);
		if (desc && desc->obj) {
			oid = &desc->obj->oid;
975
		} else {
976
			oid = &c->object.oid;
977
		}
978
		strbuf_addf(&buf, "%s\n", oid_to_hex(oid));
979
	}
980
	write_file_buf(git_path_merge_head(the_repository), buf.buf, buf.len);
981

J
Jay Soffian 已提交
982
	strbuf_reset(&buf);
983
	if (fast_forward == FF_NO)
984
		strbuf_addstr(&buf, "no-ff");
985
	write_file_buf(git_path_merge_mode(the_repository), buf.buf, buf.len);
986
	strbuf_release(&buf);
J
Jay Soffian 已提交
987 988
}

989 990 991 992
static void write_merge_state(struct commit_list *remoteheads)
{
	write_merge_heads(remoteheads);
	strbuf_addch(&merge_msg, '\n');
993 994
	write_file_buf(git_path_merge_msg(the_repository), merge_msg.buf,
		       merge_msg.len);
995 996
}

997 998 999 1000 1001 1002 1003 1004 1005 1006 1007
static int default_edit_option(void)
{
	static const char name[] = "GIT_MERGE_AUTOEDIT";
	const char *e = getenv(name);
	struct stat st_stdin, st_stdout;

	if (have_message)
		/* an explicit -m msg without --[no-]edit */
		return 0;

	if (e) {
1008
		int v = git_parse_maybe_bool(e);
1009
		if (v < 0)
1010
			die(_("Bad value '%s' in environment '%s'"), e, name);
1011 1012 1013 1014 1015 1016
		return v;
	}

	/* Use editor if stdin and stdout are the same and is a tty */
	return (!fstat(0, &st_stdin) &&
		!fstat(1, &st_stdout) &&
1017
		isatty(0) && isatty(1) &&
1018 1019 1020 1021 1022
		st_stdin.st_dev == st_stdout.st_dev &&
		st_stdin.st_ino == st_stdout.st_ino &&
		st_stdin.st_mode == st_stdout.st_mode);
}

1023 1024 1025
static struct commit_list *reduce_parents(struct commit *head_commit,
					  int *head_subsumed,
					  struct commit_list *remoteheads)
1026
{
1027
	struct commit_list *parents, **remotes;
1028

1029 1030 1031 1032 1033 1034 1035 1036
	/*
	 * Is the current HEAD reachable from another commit being
	 * merged?  If so we do not want to record it as a parent of
	 * the resulting merge, unless --no-ff is given.  We will flip
	 * this variable to 0 when we find HEAD among the independent
	 * tips being merged.
	 */
	*head_subsumed = 1;
1037

1038
	/* Find what parents to record by checking independent ones. */
1039
	parents = reduce_heads(remoteheads);
M
Martin Ågren 已提交
1040
	free_commit_list(remoteheads);
1041

1042 1043 1044 1045
	remoteheads = NULL;
	remotes = &remoteheads;
	while (parents) {
		struct commit *commit = pop_commit(&parents);
1046 1047 1048 1049 1050
		if (commit == head_commit)
			*head_subsumed = 0;
		else
			remotes = &commit_list_insert(commit, remotes)->next;
	}
1051 1052
	return remoteheads;
}
1053

1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067
static void prepare_merge_message(struct strbuf *merge_names, struct strbuf *merge_msg)
{
	struct fmt_merge_msg_opts opts;

	memset(&opts, 0, sizeof(opts));
	opts.add_title = !have_message;
	opts.shortlog_len = shortlog_len;
	opts.credit_people = (0 < option_edit);

	fmt_merge_msg(merge_names, merge_msg, &opts);
	if (merge_msg->len)
		strbuf_setlen(merge_msg, merge_msg->len - 1);
}

1068 1069 1070 1071 1072
static void handle_fetch_head(struct commit_list **remotes, struct strbuf *merge_names)
{
	const char *filename;
	int fd, pos, npos;
	struct strbuf fetch_head_file = STRBUF_INIT;
1073
	const unsigned hexsz = the_hash_algo->hexsz;
1074 1075 1076 1077

	if (!merge_names)
		merge_names = &fetch_head_file;

1078
	filename = git_path_fetch_head(the_repository);
1079 1080 1081 1082 1083 1084 1085 1086 1087 1088
	fd = open(filename, O_RDONLY);
	if (fd < 0)
		die_errno(_("could not open '%s' for reading"), filename);

	if (strbuf_read(merge_names, fd, 0) < 0)
		die_errno(_("could not read '%s'"), filename);
	if (close(fd) < 0)
		die_errno(_("could not close '%s'"), filename);

	for (pos = 0; pos < merge_names->len; pos = npos) {
1089
		struct object_id oid;
1090 1091 1092 1093 1094 1095 1096 1097 1098
		char *ptr;
		struct commit *commit;

		ptr = strchr(merge_names->buf + pos, '\n');
		if (ptr)
			npos = ptr - merge_names->buf + 1;
		else
			npos = merge_names->len;

1099
		if (npos - pos < hexsz + 2 ||
1100
		    get_oid_hex(merge_names->buf + pos, &oid))
1101
			commit = NULL; /* bad */
1102
		else if (memcmp(merge_names->buf + pos + hexsz, "\t\t", 2))
1103 1104
			continue; /* not-for-merge */
		else {
1105 1106
			char saved = merge_names->buf[pos + hexsz];
			merge_names->buf[pos + hexsz] = '\0';
1107
			commit = get_merge_parent(merge_names->buf + pos);
1108
			merge_names->buf[pos + hexsz] = saved;
1109 1110 1111 1112
		}
		if (!commit) {
			if (ptr)
				*ptr = '\0';
1113
			die(_("not something we can merge in %s: %s"),
1114 1115 1116 1117 1118 1119 1120 1121 1122
			    filename, merge_names->buf + pos);
		}
		remotes = &commit_list_insert(commit, remotes)->next;
	}

	if (merge_names == &fetch_head_file)
		strbuf_release(&fetch_head_file);
}

1123 1124
static struct commit_list *collect_parents(struct commit *head_commit,
					   int *head_subsumed,
1125 1126
					   int argc, const char **argv,
					   struct strbuf *merge_msg)
1127 1128 1129 1130
{
	int i;
	struct commit_list *remoteheads = NULL;
	struct commit_list **remotes = &remoteheads;
1131 1132 1133 1134
	struct strbuf merge_names = STRBUF_INIT, *autogen = NULL;

	if (merge_msg && (!have_message || shortlog_len))
		autogen = &merge_names;
1135 1136 1137 1138

	if (head_commit)
		remotes = &commit_list_insert(head_commit, remotes)->next;

1139 1140 1141 1142 1143 1144 1145 1146
	if (argc == 1 && !strcmp(argv[0], "FETCH_HEAD")) {
		handle_fetch_head(remotes, autogen);
		remoteheads = reduce_parents(head_commit, head_subsumed, remoteheads);
	} else {
		for (i = 0; i < argc; i++) {
			struct commit *commit = get_merge_parent(argv[i]);
			if (!commit)
				help_unknown_ref(argv[i], "merge",
1147
						 _("not something we can merge"));
1148 1149 1150 1151 1152 1153 1154 1155 1156
			remotes = &commit_list_insert(commit, remotes)->next;
		}
		remoteheads = reduce_parents(head_commit, head_subsumed, remoteheads);
		if (autogen) {
			struct commit_list *p;
			for (p = remoteheads; p; p = p->next)
				merge_name(merge_remote_util(p->item)->name, autogen);
		}
	}
1157

1158 1159 1160
	if (autogen) {
		prepare_merge_message(autogen, merge_msg);
		strbuf_release(autogen);
1161 1162 1163
	}

	return remoteheads;
1164 1165
}

1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194
static int merging_a_throwaway_tag(struct commit *commit)
{
	char *tag_ref;
	struct object_id oid;
	int is_throwaway_tag = 0;

	/* Are we merging a tag? */
	if (!merge_remote_util(commit) ||
	    !merge_remote_util(commit)->obj ||
	    merge_remote_util(commit)->obj->type != OBJ_TAG)
		return is_throwaway_tag;

	/*
	 * Now we know we are merging a tag object.  Are we downstream
	 * and following the tags from upstream?  If so, we must have
	 * the tag object pointed at by "refs/tags/$T" where $T is the
	 * tagname recorded in the tag object.  We want to allow such
	 * a "just to catch up" merge to fast-forward.
	 *
	 * Otherwise, we are playing an integrator's role, making a
	 * merge with a throw-away tag from a contributor with
	 * something like "git pull $contributor $signed_tag".
	 * We want to forbid such a merge from fast-forwarding
	 * by default; otherwise we would not keep the signature
	 * anywhere.
	 */
	tag_ref = xstrfmt("refs/tags/%s",
			  ((struct tag *)merge_remote_util(commit)->obj)->tag);
	if (!read_ref(tag_ref, &oid) &&
J
Jeff King 已提交
1195
	    oideq(&oid, &merge_remote_util(commit)->obj->oid))
1196 1197 1198 1199 1200 1201 1202
		is_throwaway_tag = 0;
	else
		is_throwaway_tag = 1;
	free(tag_ref);
	return is_throwaway_tag;
}

M
Miklos Vajna 已提交
1203 1204
int cmd_merge(int argc, const char **argv, const char *prefix)
{
1205
	struct object_id result_tree, stash, head_oid;
1206
	struct commit *head_commit;
1207
	struct strbuf buf = STRBUF_INIT;
1208
	int i, ret = 0, head_subsumed;
M
Miklos Vajna 已提交
1209 1210 1211
	int best_cnt = -1, merge_was_ok = 0, automerge_was_ok = 0;
	struct commit_list *common = NULL;
	const char *best_strategy = NULL, *wt_strategy = NULL;
1212
	struct commit_list *remoteheads, *p;
1213
	void *branch_to_free;
1214
	int orig_argc = argc;
M
Miklos Vajna 已提交
1215

1216 1217
	if (argc == 2 && !strcmp(argv[1], "-h"))
		usage_with_options(builtin_merge_usage, builtin_merge_options);
M
Miklos Vajna 已提交
1218 1219 1220 1221 1222

	/*
	 * Check if we are _not_ on a detached HEAD, i.e. if there is a
	 * current branch.
	 */
1223
	branch = branch_to_free = resolve_refdup("HEAD", 0, &head_oid, NULL);
R
René Scharfe 已提交
1224 1225
	if (branch)
		skip_prefix(branch, "refs/heads/", &branch);
1226 1227 1228 1229

	init_diff_ui_defaults();
	git_config(git_merge_config, NULL);

1230
	if (!branch || is_null_oid(&head_oid))
1231
		head_commit = NULL;
1232
	else
1233
		head_commit = lookup_commit_or_die(&head_oid, "HEAD");
M
Miklos Vajna 已提交
1234

1235 1236
	if (branch_mergeoptions)
		parse_branch_merge_options(branch_mergeoptions);
1237
	argc = parse_options(argc, argv, prefix, builtin_merge_options,
M
Miklos Vajna 已提交
1238
			builtin_merge_usage, 0);
1239 1240
	if (shortlog_len < 0)
		shortlog_len = (merge_log_config > 0) ? merge_log_config : 0;
1241

1242 1243 1244
	if (verbosity < 0 && show_progress == -1)
		show_progress = 0;

1245 1246 1247 1248
	if (abort_current_merge) {
		int nargc = 2;
		const char *nargv[] = {"reset", "--merge", NULL};

1249
		if (orig_argc != 2)
1250
			usage_msg_opt(_("--abort expects no arguments"),
1251 1252
			      builtin_merge_usage, builtin_merge_options);

1253
		if (!file_exists(git_path_merge_head(the_repository)))
1254
			die(_("There is no merge to abort (MERGE_HEAD missing)."));
1255 1256

		/* Invoke 'git reset --merge' */
1257 1258
		ret = cmd_reset(nargc, nargv, prefix);
		goto done;
1259 1260
	}

1261 1262 1263 1264 1265
	if (continue_current_merge) {
		int nargc = 1;
		const char *nargv[] = {"commit", NULL};

		if (orig_argc != 2)
1266
			usage_msg_opt(_("--continue expects no arguments"),
1267 1268
			      builtin_merge_usage, builtin_merge_options);

1269
		if (!file_exists(git_path_merge_head(the_repository)))
1270 1271 1272 1273 1274 1275 1276
			die(_("There is no merge in progress (MERGE_HEAD missing)."));

		/* Invoke 'git commit' */
		ret = cmd_commit(nargc, nargv, prefix);
		goto done;
	}

1277 1278 1279
	if (read_cache_unmerged())
		die_resolve_conflict("merge");

1280
	if (file_exists(git_path_merge_head(the_repository))) {
1281 1282 1283 1284 1285
		/*
		 * There is no unmerged entry, don't advise 'git
		 * add/rm <file>', just 'git commit'.
		 */
		if (advice_resolve_conflict)
1286
			die(_("You have not concluded your merge (MERGE_HEAD exists).\n"
A
Alex Henrie 已提交
1287
				  "Please, commit your changes before you merge."));
1288
		else
1289
			die(_("You have not concluded your merge (MERGE_HEAD exists)."));
1290
	}
1291
	if (file_exists(git_path_cherry_pick_head(the_repository))) {
J
Jay Soffian 已提交
1292
		if (advice_resolve_conflict)
1293
			die(_("You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists).\n"
A
Alex Henrie 已提交
1294
			    "Please, commit your changes before you merge."));
J
Jay Soffian 已提交
1295
		else
1296
			die(_("You have not concluded your cherry-pick (CHERRY_PICK_HEAD exists)."));
1297 1298 1299
	}
	resolve_undo_clear();

T
Tuncer Ayaz 已提交
1300 1301
	if (verbosity < 0)
		show_diffstat = 0;
M
Miklos Vajna 已提交
1302 1303

	if (squash) {
1304
		if (fast_forward == FF_NO)
1305
			die(_("You cannot combine --squash with --no-ff."));
M
Miklos Vajna 已提交
1306 1307 1308
		option_commit = 0;
	}

J
Junio C Hamano 已提交
1309 1310 1311 1312 1313 1314 1315
	if (!argc) {
		if (default_to_upstream)
			argc = setup_with_upstream(&argv);
		else
			die(_("No commit specified and merge.defaultToUpstream not set."));
	} else if (argc == 1 && !strcmp(argv[0], "-")) {
		argv[0] = "@{-1}";
1316
	}
J
Junio C Hamano 已提交
1317

M
Miklos Vajna 已提交
1318 1319 1320 1321
	if (!argc)
		usage_with_options(builtin_merge_usage,
			builtin_merge_options);

1322
	if (!head_commit) {
M
Miklos Vajna 已提交
1323 1324 1325 1326 1327
		/*
		 * If the merged head is a valid one there is no reason
		 * to forbid "git merge" into a branch yet to be born.
		 * We do the same for "git pull".
		 */
1328
		struct object_id *remote_head_oid;
1329
		if (squash)
1330
			die(_("Squash commit into empty head not supported yet"));
1331
		if (fast_forward == FF_NO)
1332 1333
			die(_("Non-fast-forward commit does not make sense into "
			    "an empty head"));
1334 1335
		remoteheads = collect_parents(head_commit, &head_subsumed,
					      argc, argv, NULL);
1336
		if (!remoteheads)
1337
			die(_("%s - not something we can merge"), argv[0]);
1338 1339
		if (remoteheads->next)
			die(_("Can merge only exactly one commit into empty head"));
1340
		remote_head_oid = &remoteheads->item->object.oid;
1341
		read_empty(remote_head_oid, 0);
1342 1343
		update_ref("initial pull", "HEAD", remote_head_oid, NULL, 0,
			   UPDATE_REFS_DIE_ON_ERR);
1344
		goto done;
1345
	}
M
Miklos Vajna 已提交
1346

1347
	/*
1348 1349 1350
	 * All the rest are the commits being merged; prepare
	 * the standard merge summary message to be appended
	 * to the given message.
1351
	 */
1352 1353
	remoteheads = collect_parents(head_commit, &head_subsumed,
				      argc, argv, &merge_msg);
M
Miklos Vajna 已提交
1354

1355
	if (!head_commit || !argc)
M
Miklos Vajna 已提交
1356 1357 1358
		usage_with_options(builtin_merge_usage,
			builtin_merge_options);

1359 1360 1361
	if (verify_signatures) {
		for (p = remoteheads; p; p = p->next) {
			struct commit *commit = p->item;
1362
			char hex[GIT_MAX_HEXSZ + 1];
1363 1364 1365 1366 1367
			struct signature_check signature_check;
			memset(&signature_check, 0, sizeof(signature_check));

			check_commit_signature(commit, &signature_check);

1368
			find_unique_abbrev_r(hex, &commit->object.oid, DEFAULT_ABBREV);
1369 1370 1371
			switch (signature_check.result) {
			case 'G':
				break;
1372 1373 1374
			case 'U':
				die(_("Commit %s has an untrusted GPG signature, "
				      "allegedly by %s."), hex, signature_check.signer);
1375 1376 1377 1378 1379 1380 1381 1382 1383 1384
			case 'B':
				die(_("Commit %s has a bad GPG signature "
				      "allegedly by %s."), hex, signature_check.signer);
			default: /* 'N' */
				die(_("Commit %s does not have a GPG signature."), hex);
			}
			if (verbosity >= 0 && signature_check.result == 'G')
				printf(_("Commit %s has a good GPG signature by %s\n"),
				       hex, signature_check.signer);

1385
			signature_check_clear(&signature_check);
1386 1387 1388
		}
	}

M
Miklos Vajna 已提交
1389
	strbuf_addstr(&buf, "merge");
1390 1391
	for (p = remoteheads; p; p = p->next)
		strbuf_addf(&buf, " %s", merge_remote_util(p->item)->name);
M
Miklos Vajna 已提交
1392 1393 1394
	setenv("GIT_REFLOG_ACTION", buf.buf, 0);
	strbuf_reset(&buf);

1395 1396
	for (p = remoteheads; p; p = p->next) {
		struct commit *commit = p->item;
1397
		strbuf_addf(&buf, "GITHEAD_%s",
1398
			    oid_to_hex(&commit->object.oid));
1399
		setenv(buf.buf, merge_remote_util(commit)->name, 1);
M
Miklos Vajna 已提交
1400
		strbuf_reset(&buf);
1401
		if (fast_forward != FF_ONLY && merging_a_throwaway_tag(commit))
1402
			fast_forward = FF_NO;
M
Miklos Vajna 已提交
1403 1404
	}

1405 1406 1407
	if (option_edit < 0)
		option_edit = default_edit_option();

M
Miklos Vajna 已提交
1408
	if (!use_strategies) {
1409 1410 1411
		if (!remoteheads)
			; /* already up-to-date */
		else if (!remoteheads->next)
M
Miklos Vajna 已提交
1412 1413 1414 1415 1416 1417 1418
			add_strategies(pull_twohead, DEFAULT_TWOHEAD);
		else
			add_strategies(pull_octopus, DEFAULT_OCTOPUS);
	}

	for (i = 0; i < use_strategies_nr; i++) {
		if (use_strategies[i]->attr & NO_FAST_FORWARD)
1419
			fast_forward = FF_NO;
M
Miklos Vajna 已提交
1420 1421 1422 1423
		if (use_strategies[i]->attr & NO_TRIVIAL)
			allow_trivial = 0;
	}

1424 1425 1426
	if (!remoteheads)
		; /* already up-to-date */
	else if (!remoteheads->next)
1427
		common = get_merge_bases(head_commit, remoteheads->item);
M
Miklos Vajna 已提交
1428 1429
	else {
		struct commit_list *list = remoteheads;
1430
		commit_list_insert(head_commit, &list);
M
Miklos Vajna 已提交
1431 1432 1433 1434
		common = get_octopus_merge_bases(list);
		free(list);
	}

1435 1436
	update_ref("updating ORIG_HEAD", "ORIG_HEAD",
		   &head_commit->object.oid, NULL, 0, UPDATE_REFS_DIE_ON_ERR);
M
Miklos Vajna 已提交
1437

1438 1439 1440 1441 1442 1443
	if (remoteheads && !common) {
		/* No common ancestors found. */
		if (!allow_unrelated_histories)
			die(_("refusing to merge unrelated histories"));
		/* otherwise, we need a real merge. */
	} else if (!remoteheads ||
1444 1445
		 (!remoteheads->next && !common->next &&
		  common->item == remoteheads->item)) {
M
Miklos Vajna 已提交
1446 1447 1448 1449
		/*
		 * If head can reach all the merge then we are up to date.
		 * but first the most common case of merging one remote.
		 */
1450
		finish_up_to_date(_("Already up to date."));
1451
		goto done;
1452
	} else if (fast_forward != FF_NO && !remoteheads->next &&
M
Miklos Vajna 已提交
1453
			!common->next &&
J
Jeff King 已提交
1454
			oideq(&common->item->object.oid, &head_commit->object.oid)) {
M
Miklos Vajna 已提交
1455
		/* Again the most common case of merging one remote. */
1456
		struct strbuf msg = STRBUF_INIT;
1457
		struct commit *commit;
M
Miklos Vajna 已提交
1458

J
Jeff King 已提交
1459
		if (verbosity >= 0) {
J
Jeff King 已提交
1460
			printf(_("Updating %s..%s\n"),
1461
			       find_unique_abbrev(&head_commit->object.oid,
J
Jeff King 已提交
1462
						  DEFAULT_ABBREV),
1463
			       find_unique_abbrev(&remoteheads->item->object.oid,
J
Jeff King 已提交
1464
						  DEFAULT_ABBREV));
J
Jeff King 已提交
1465
		}
1466
		strbuf_addstr(&msg, "Fast-forward");
M
Miklos Vajna 已提交
1467 1468 1469
		if (have_message)
			strbuf_addstr(&msg,
				" (no commit created; -m option ignored)");
1470
		commit = remoteheads->item;
J
Junio C Hamano 已提交
1471
		if (!commit) {
1472 1473 1474
			ret = 1;
			goto done;
		}
M
Miklos Vajna 已提交
1475

1476 1477
		if (checkout_fast_forward(the_repository,
					  &head_commit->object.oid,
1478
					  &commit->object.oid,
1479
					  overwrite_ignore)) {
1480 1481 1482
			ret = 1;
			goto done;
		}
M
Miklos Vajna 已提交
1483

1484
		finish(head_commit, remoteheads, &commit->object.oid, msg.buf);
M
Miklos Vajna 已提交
1485
		drop_save();
1486
		goto done;
M
Miklos Vajna 已提交
1487 1488 1489
	} else if (!remoteheads->next && common->next)
		;
		/*
1490
		 * We are not doing octopus and not fast-forward.  Need
M
Miklos Vajna 已提交
1491 1492 1493 1494
		 * a real merge.
		 */
	else if (!remoteheads->next && !common->next && option_commit) {
		/*
1495
		 * We are not doing octopus, not fast-forward, and have
M
Miklos Vajna 已提交
1496 1497 1498
		 * only one common.
		 */
		refresh_cache(REFRESH_QUIET);
1499
		if (allow_trivial && fast_forward != FF_ONLY) {
M
Miklos Vajna 已提交
1500
			/* See if it is really trivial. */
1501
			git_committer_info(IDENT_STRICT);
1502
			printf(_("Trying really trivial in-index merge...\n"));
1503 1504 1505
			if (!read_tree_trivial(&common->item->object.oid,
					       &head_commit->object.oid,
					       &remoteheads->item->object.oid)) {
1506
				ret = merge_trivial(head_commit, remoteheads);
1507 1508
				goto done;
			}
1509
			printf(_("Nope.\n"));
M
Miklos Vajna 已提交
1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526
		}
	} else {
		/*
		 * An octopus.  If we can reach all the remote we are up
		 * to date.
		 */
		int up_to_date = 1;
		struct commit_list *j;

		for (j = remoteheads; j; j = j->next) {
			struct commit_list *common_one;

			/*
			 * Here we *have* to calculate the individual
			 * merge_bases again, otherwise "git merge HEAD^
			 * HEAD^^" would be missed.
			 */
1527
			common_one = get_merge_bases(head_commit, j->item);
1528
			if (!oideq(&common_one->item->object.oid, &j->item->object.oid)) {
M
Miklos Vajna 已提交
1529 1530 1531 1532 1533
				up_to_date = 0;
				break;
			}
		}
		if (up_to_date) {
1534
			finish_up_to_date(_("Already up to date. Yeeah!"));
1535
			goto done;
M
Miklos Vajna 已提交
1536 1537 1538
		}
	}

1539
	if (fast_forward == FF_ONLY)
1540
		die(_("Not possible to fast-forward, aborting."));
1541

M
Miklos Vajna 已提交
1542
	/* We are going to make a new commit. */
1543
	git_committer_info(IDENT_STRICT);
M
Miklos Vajna 已提交
1544 1545 1546 1547 1548 1549 1550 1551 1552

	/*
	 * At this point, we need a real merge.  No matter what strategy
	 * we use, it would operate on the index, possibly affecting the
	 * working tree, and when resolved cleanly, have the desired
	 * tree in the index -- this means that the index must be in
	 * sync with the head commit.  The strategies are responsible
	 * to ensure this.
	 */
1553 1554 1555 1556
	if (use_strategies_nr == 1 ||
	    /*
	     * Stash away the local changes so that we can try more than one.
	     */
1557 1558
	    save_state(&stash))
		oidclr(&stash);
M
Miklos Vajna 已提交
1559 1560 1561 1562

	for (i = 0; i < use_strategies_nr; i++) {
		int ret;
		if (i) {
1563
			printf(_("Rewinding the tree to pristine...\n"));
1564
			restore_state(&head_commit->object.oid, &stash);
M
Miklos Vajna 已提交
1565 1566
		}
		if (use_strategies_nr != 1)
1567
			printf(_("Trying merge strategy %s...\n"),
M
Miklos Vajna 已提交
1568 1569 1570 1571 1572 1573 1574 1575
				use_strategies[i]->name);
		/*
		 * Remember which strategy left the state in the working
		 * tree.
		 */
		wt_strategy = use_strategies[i]->name;

		ret = try_merge_strategy(use_strategies[i]->name,
1576
					 common, remoteheads,
1577
					 head_commit);
M
Miklos Vajna 已提交
1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608
		if (!option_commit && !ret) {
			merge_was_ok = 1;
			/*
			 * This is necessary here just to avoid writing
			 * the tree, but later we will *not* exit with
			 * status code 1 because merge_was_ok is set.
			 */
			ret = 1;
		}

		if (ret) {
			/*
			 * The backend exits with 1 when conflicts are
			 * left to be resolved, with 2 when it does not
			 * handle the given merge at all.
			 */
			if (ret == 1) {
				int cnt = evaluate_result();

				if (best_cnt <= 0 || cnt <= best_cnt) {
					best_strategy = use_strategies[i]->name;
					best_cnt = cnt;
				}
			}
			if (merge_was_ok)
				break;
			else
				continue;
		}

		/* Automerge succeeded. */
1609
		write_tree_trivial(&result_tree);
M
Miklos Vajna 已提交
1610 1611 1612 1613 1614 1615 1616 1617
		automerge_was_ok = 1;
		break;
	}

	/*
	 * If we have a resulting tree, that means the strategy module
	 * auto resolved the merge cleanly.
	 */
1618
	if (automerge_was_ok) {
1619 1620
		ret = finish_automerge(head_commit, head_subsumed,
				       common, remoteheads,
1621
				       &result_tree, wt_strategy);
1622 1623
		goto done;
	}
M
Miklos Vajna 已提交
1624 1625 1626 1627 1628 1629

	/*
	 * Pick the result from the best strategy and have the user fix
	 * it up.
	 */
	if (!best_strategy) {
1630
		restore_state(&head_commit->object.oid, &stash);
M
Miklos Vajna 已提交
1631 1632
		if (use_strategies_nr > 1)
			fprintf(stderr,
1633
				_("No merge strategy handled the merge.\n"));
M
Miklos Vajna 已提交
1634
		else
1635
			fprintf(stderr, _("Merge with strategy %s failed.\n"),
M
Miklos Vajna 已提交
1636
				use_strategies[0]->name);
1637 1638
		ret = 2;
		goto done;
M
Miklos Vajna 已提交
1639 1640 1641
	} else if (best_strategy == wt_strategy)
		; /* We already have its result in the working tree. */
	else {
1642
		printf(_("Rewinding the tree to pristine...\n"));
1643
		restore_state(&head_commit->object.oid, &stash);
1644
		printf(_("Using the %s to prepare resolving by hand.\n"),
M
Miklos Vajna 已提交
1645
			best_strategy);
1646
		try_merge_strategy(best_strategy, common, remoteheads,
1647
				   head_commit);
M
Miklos Vajna 已提交
1648 1649 1650
	}

	if (squash)
1651
		finish(head_commit, remoteheads, NULL, NULL);
J
Jay Soffian 已提交
1652
	else
1653
		write_merge_state(remoteheads);
M
Miklos Vajna 已提交
1654

1655
	if (merge_was_ok)
1656 1657
		fprintf(stderr, _("Automatic merge went well; "
			"stopped before committing as requested\n"));
1658
	else
1659
		ret = suggest_conflicts();
1660 1661

done:
1662
	free(branch_to_free);
1663
	return ret;
M
Miklos Vajna 已提交
1664
}