read-tree.c 16.4 KB
Newer Older
L
Linus Torvalds 已提交
1 2 3 4 5
/*
 * GIT - The information manager from hell
 *
 * Copyright (C) Linus Torvalds, 2005
 */
6 7
#define DBRT_DEBUG 1

8 9
#include "cache.h"

D
Daniel Barkalow 已提交
10 11 12 13
#include "object.h"
#include "tree.h"

static int merge = 0;
14
static int update = 0;
15
static int index_only = 0;
L
Linus Torvalds 已提交
16 17
static int nontrivial_merge = 0;
static int trivial_merges_only = 0;
J
Junio C Hamano 已提交
18
static int aggressive = 0;
19

D
Daniel Barkalow 已提交
20 21
static int head_idx = -1;
static int merge_size = 0;
22

D
Daniel Barkalow 已提交
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
static struct object_list *trees = NULL;

static struct cache_entry df_conflict_entry = { 
};

static struct tree_entry_list df_conflict_list = {
	.name = NULL,
	.next = &df_conflict_list
};

typedef int (*merge_fn_t)(struct cache_entry **src);

static int entcmp(char *name1, int dir1, char *name2, int dir2)
{
	int len1 = strlen(name1);
	int len2 = strlen(name2);
	int len = len1 < len2 ? len1 : len2;
	int ret = memcmp(name1, name2, len);
	unsigned char c1, c2;
	if (ret)
		return ret;
	c1 = name1[len];
	c2 = name2[len];
	if (!c1 && dir1)
		c1 = '/';
	if (!c2 && dir2)
		c2 = '/';
	ret = (c1 < c2) ? -1 : (c1 > c2) ? 1 : 0;
	if (c1 && c2 && !ret)
		ret = len1 - len2;
P
Petr Baudis 已提交
53
	return ret;
54 55
}

D
Daniel Barkalow 已提交
56 57
static int unpack_trees_rec(struct tree_entry_list **posns, int len,
			    const char *base, merge_fn_t fn, int *indpos)
58
{
D
Daniel Barkalow 已提交
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
	int baselen = strlen(base);
	int src_size = len + 1;
	do {
		int i;
		char *first;
		int firstdir = 0;
		int pathlen;
		unsigned ce_size;
		struct tree_entry_list **subposns;
		struct cache_entry **src;
		int any_files = 0;
		int any_dirs = 0;
		char *cache_name;
		int ce_stage;

		/* Find the first name in the input. */

		first = NULL;
		cache_name = NULL;

		/* Check the cache */
		if (merge && *indpos < active_nr) {
			/* This is a bit tricky: */
			/* If the index has a subdirectory (with
			 * contents) as the first name, it'll get a
			 * filename like "foo/bar". But that's after
			 * "foo", so the entry in trees will get
			 * handled first, at which point we'll go into
			 * "foo", and deal with "bar" from the index,
			 * because the base will be "foo/". The only
			 * way we can actually have "foo/bar" first of
			 * all the things is if the trees don't
			 * contain "foo" at all, in which case we'll
			 * handle "foo/bar" without going into the
			 * directory, but that's fine (and will return
			 * an error anyway, with the added unknown
			 * file case.
			 */

			cache_name = active_cache[*indpos]->name;
			if (strlen(cache_name) > baselen &&
			    !memcmp(cache_name, base, baselen)) {
				cache_name += baselen;
				first = cache_name;
			} else {
				cache_name = NULL;
			}
		}

108
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
109 110
		if (first)
			printf("index %s\n", first);
111
#endif
D
Daniel Barkalow 已提交
112 113 114
		for (i = 0; i < len; i++) {
			if (!posns[i] || posns[i] == &df_conflict_list)
				continue;
115
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
116
			printf("%d %s\n", i + 1, posns[i]->name);
117
#endif
D
Daniel Barkalow 已提交
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 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194
			if (!first || entcmp(first, firstdir,
					     posns[i]->name, 
					     posns[i]->directory) > 0) {
				first = posns[i]->name;
				firstdir = posns[i]->directory;
			}
		}
		/* No name means we're done */
		if (!first)
			return 0;

		pathlen = strlen(first);
		ce_size = cache_entry_size(baselen + pathlen);

		src = xmalloc(sizeof(struct cache_entry *) * src_size);
		memset(src, 0, sizeof(struct cache_entry *) * src_size);

		subposns = xmalloc(sizeof(struct tree_list_entry *) * len);
		memset(subposns, 0, sizeof(struct tree_list_entry *) * len);

		if (cache_name && !strcmp(cache_name, first)) {
			any_files = 1;
			src[0] = active_cache[*indpos];
			remove_cache_entry_at(*indpos);
		}

		for (i = 0; i < len; i++) {
			struct cache_entry *ce;

			if (!posns[i] ||
			    (posns[i] != &df_conflict_list &&
			     strcmp(first, posns[i]->name))) {
				continue;
			}

			if (posns[i] == &df_conflict_list) {
				src[i + merge] = &df_conflict_entry;
				continue;
			}

			if (posns[i]->directory) {
				any_dirs = 1;
				parse_tree(posns[i]->item.tree);
				subposns[i] = posns[i]->item.tree->entries;
				posns[i] = posns[i]->next;
				src[i + merge] = &df_conflict_entry;
				continue;
			}

			if (!merge)
				ce_stage = 0;
			else if (i + 1 < head_idx)
				ce_stage = 1;
			else if (i + 1 > head_idx)
				ce_stage = 3;
			else
				ce_stage = 2;

			ce = xmalloc(ce_size);
			memset(ce, 0, ce_size);
			ce->ce_mode = create_ce_mode(posns[i]->mode);
			ce->ce_flags = create_ce_flags(baselen + pathlen,
						       ce_stage);
			memcpy(ce->name, base, baselen);
			memcpy(ce->name + baselen, first, pathlen + 1);

			any_files = 1;

			memcpy(ce->sha1, posns[i]->item.any->sha1, 20);
			src[i + merge] = ce;
			subposns[i] = &df_conflict_list;
			posns[i] = posns[i]->next;
		}
		if (any_files) {
			if (merge) {
				int ret;

195
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
196 197 198 199 200 201 202 203
				printf("%s:\n", first);
				for (i = 0; i < src_size; i++) {
					printf(" %d ", i);
					if (src[i])
						printf("%s\n", sha1_to_hex(src[i]->sha1));
					else
						printf("\n");
				}
204
#endif
D
Daniel Barkalow 已提交
205 206
				ret = fn(src);
				
207
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
208
				printf("Added %d entries\n", ret);
209
#endif
D
Daniel Barkalow 已提交
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
				*indpos += ret;
			} else {
				for (i = 0; i < src_size; i++) {
					if (src[i]) {
						add_cache_entry(src[i], ADD_CACHE_OK_TO_ADD|ADD_CACHE_SKIP_DFCHECK);
					}
				}
			}
		}
		if (any_dirs) {
			char *newbase = xmalloc(baselen + 2 + pathlen);
			memcpy(newbase, base, baselen);
			memcpy(newbase + baselen, first, pathlen);
			newbase[baselen + pathlen] = '/';
			newbase[baselen + pathlen + 1] = '\0';
			if (unpack_trees_rec(subposns, len, newbase, fn,
					     indpos))
				return -1;
228
			free(newbase);
D
Daniel Barkalow 已提交
229 230 231 232
		}
		free(subposns);
		free(src);
	} while (1);
233 234
}

D
Daniel Barkalow 已提交
235
static void reject_merge(struct cache_entry *ce)
236
{
D
Daniel Barkalow 已提交
237 238
	die("Entry '%s' would be overwritten by merge. Cannot merge.", 
	    ce->name);
239 240
}

241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
/* Unlink the last component and attempt to remove leading
 * directories, in case this unlink is the removal of the
 * last entry in the directory -- empty directories are removed.
 */
static void unlink_entry(char *name)
{
	char *cp, *prev;

	if (unlink(name))
		return;
	prev = NULL;
	while (1) {
		int status;
		cp = strrchr(name, '/');
		if (prev)
			*prev = '/';
		if (!cp)
			break;

		*cp = 0;
		status = rmdir(name);
		if (status) {
			*cp = '/';
			break;
		}
		prev = cp;
	}
}

D
Daniel Barkalow 已提交
270 271 272 273 274 275 276 277 278 279 280 281 282
static void check_updates(struct cache_entry **src, int nr)
{
	static struct checkout state = {
		.base_dir = "",
		.force = 1,
		.quiet = 1,
		.refresh_cache = 1,
	};
	unsigned short mask = htons(CE_UPDATE);
	while (nr--) {
		struct cache_entry *ce = *src++;
		if (!ce->ce_mode) {
			if (update)
283
				unlink_entry(ce->name);
D
Daniel Barkalow 已提交
284 285 286 287 288 289 290 291 292
			continue;
		}
		if (ce->ce_flags & mask) {
			ce->ce_flags &= ~mask;
			if (update)
				checkout_entry(ce, &state);
		}
	}
}
293

D
Daniel Barkalow 已提交
294
static int unpack_trees(merge_fn_t fn)
295
{
D
Daniel Barkalow 已提交
296 297
	int indpos = 0;
	unsigned len = object_list_length(trees);
298
	struct tree_entry_list **posns;
D
Daniel Barkalow 已提交
299 300 301
	int i;
	struct object_list *posn = trees;
	merge_size = len;
302 303 304 305 306 307 308 309 310

	if (len) {
		posns = xmalloc(len * sizeof(struct tree_entry_list *));
		for (i = 0; i < len; i++) {
			posns[i] = ((struct tree *) posn->item)->entries;
			posn = posn->next;
		}
		if (unpack_trees_rec(posns, len, "", fn, &indpos))
			return -1;
311
	}
D
Daniel Barkalow 已提交
312

L
Linus Torvalds 已提交
313 314 315
	if (trivial_merges_only && nontrivial_merge)
		die("Merge requires file-level merging");

D
Daniel Barkalow 已提交
316 317
	check_updates(active_cache, active_nr);
	return 0;
318 319
}

D
Daniel Barkalow 已提交
320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339
static int list_tree(unsigned char *sha1)
{
	struct tree *tree = parse_tree_indirect(sha1);
	if (!tree)
		return -1;
	object_list_append(&tree->object, &trees);
	return 0;
}

static int same(struct cache_entry *a, struct cache_entry *b)
{
	if (!!a != !!b)
		return 0;
	if (!a && !b)
		return 1;
	return a->ce_mode == b->ce_mode && 
		!memcmp(a->sha1, b->sha1, 20);
}


340 341 342 343 344 345 346 347
/*
 * When a CE gets turned into an unmerged entry, we
 * want it to be up-to-date
 */
static void verify_uptodate(struct cache_entry *ce)
{
	struct stat st;

348 349 350
	if (index_only)
		return;

351 352 353 354 355 356 357 358 359 360 361
	if (!lstat(ce->name, &st)) {
		unsigned changed = ce_match_stat(ce, &st);
		if (!changed)
			return;
		errno = 0;
	}
	if (errno == ENOENT)
		return;
	die("Entry '%s' not uptodate. Cannot merge.", ce->name);
}

D
Daniel Barkalow 已提交
362
static int merged_entry(struct cache_entry *merge, struct cache_entry *old)
363
{
364 365
	merge->ce_flags |= htons(CE_UPDATE);
	if (old) {
366
		/*
367 368 369 370 371
		 * See if we can re-use the old CE directly?
		 * That way we get the uptodate stat info.
		 *
		 * This also removes the UPDATE flag on
		 * a match.
372
		 */
373 374
		if (same(old, merge)) {
			*merge = *old;
D
Daniel Barkalow 已提交
375
		} else {
376 377
			verify_uptodate(old);
		}
378
	}
379
	merge->ce_flags &= ~htons(CE_STAGEMASK);
D
Daniel Barkalow 已提交
380
	add_cache_entry(merge, ADD_CACHE_OK_TO_ADD);
381
	return 1;
382 383
}

D
Daniel Barkalow 已提交
384
static int deleted_entry(struct cache_entry *ce, struct cache_entry *old)
385 386 387 388
{
	if (old)
		verify_uptodate(old);
	ce->ce_mode = 0;
D
Daniel Barkalow 已提交
389
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
390 391 392
	return 1;
}

D
Daniel Barkalow 已提交
393
static int keep_entry(struct cache_entry *ce)
394
{
D
Daniel Barkalow 已提交
395 396
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
	return 1;
397 398
}

399 400 401 402
#if DBRT_DEBUG
static void show_stage_entry(FILE *o,
			     const char *label, const struct cache_entry *ce)
{
403 404 405 406 407 408 409 410 411
	if (!ce)
		fprintf(o, "%s (missing)\n", label);
	else
		fprintf(o, "%s%06o %s %d\t%s\n",
			label,
			ntohl(ce->ce_mode),
			sha1_to_hex(ce->sha1),
			ce_stage(ce),
			ce->name);
412 413 414
}
#endif

D
Daniel Barkalow 已提交
415
static int threeway_merge(struct cache_entry **stages)
416
{
D
Daniel Barkalow 已提交
417 418 419
	struct cache_entry *index;
	struct cache_entry *head; 
	struct cache_entry *remote = stages[head_idx + 1];
420
	int count;
D
Daniel Barkalow 已提交
421 422
	int head_match = 0;
	int remote_match = 0;
423

D
Daniel Barkalow 已提交
424 425 426 427
	int df_conflict_head = 0;
	int df_conflict_remote = 0;

	int any_anc_missing = 0;
J
Junio C Hamano 已提交
428
	int no_anc_exists = 1;
D
Daniel Barkalow 已提交
429 430 431 432 433
	int i;

	for (i = 1; i < head_idx; i++) {
		if (!stages[i])
			any_anc_missing = 1;
J
Junio C Hamano 已提交
434 435
		else
			no_anc_exists = 0;
436
	}
D
Daniel Barkalow 已提交
437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456

	index = stages[0];
	head = stages[head_idx];

	if (head == &df_conflict_entry) {
		df_conflict_head = 1;
		head = NULL;
	}

	if (remote == &df_conflict_entry) {
		df_conflict_remote = 1;
		remote = NULL;
	}

	/* First, if there's a #16 situation, note that to prevent #13
	 * and #14. 
	 */
	if (!same(remote, head)) {
		for (i = 1; i < head_idx; i++) {
			if (same(stages[i], head)) {
457
				head_match = i;
D
Daniel Barkalow 已提交
458 459
			}
			if (same(stages[i], remote)) {
460
				remote_match = i;
D
Daniel Barkalow 已提交
461
			}
462 463
		}
	}
D
Daniel Barkalow 已提交
464 465 466 467 468 469 470 471 472 473

	/* We start with cases where the index is allowed to match
	 * something other than the head: #14(ALT) and #2ALT, where it
	 * is permitted to match the result instead.
	 */
	/* #14, #14ALT, #2ALT */
	if (remote && !df_conflict_head && head_match && !remote_match) {
		if (index && !same(index, remote) && !same(index, head))
			reject_merge(index);
		return merged_entry(remote, index);
474
	}
475
	/*
D
Daniel Barkalow 已提交
476 477
	 * If we have an entry in the index cache, then we want to
	 * make sure that it matches head.
478
	 */
D
Daniel Barkalow 已提交
479 480
	if (index && !same(index, head)) {
		reject_merge(index);
481
	}
D
Daniel Barkalow 已提交
482 483 484 485 486 487 488 489 490 491 492 493 494 495

	if (head) {
		/* #5ALT, #15 */
		if (same(head, remote))
			return merged_entry(head, index);
		/* #13, #3ALT */
		if (!df_conflict_remote && remote_match && !head_match)
			return merged_entry(head, index);
	}

	/* #1 */
	if (!head && !remote && any_anc_missing)
		return 0;

J
Junio C Hamano 已提交
496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518
	/* Under the new "aggressive" rule, we resolve mostly trivial
	 * cases that we historically had git-merge-one-file resolve.
	 */
	if (aggressive) {
		int head_deleted = !head && !df_conflict_head;
		int remote_deleted = !remote && !df_conflict_remote;
		/*
		 * Deleted in both.
		 * Deleted in one and unchanged in the other.
		 */
		if ((head_deleted && remote_deleted) ||
		    (head_deleted && remote && remote_match) ||
		    (remote_deleted && head && head_match))
			return 0;

		/*
		 * Added in both, identically.
		 */
		if (no_anc_exists && head && remote && same(head, remote))
			return merged_entry(head, index);

	}

D
Daniel Barkalow 已提交
519 520 521 522 523 524 525 526
	/* Below are "no merge" cases, which require that the index be
	 * up-to-date to avoid the files getting overwritten with
	 * conflict resolution files. 
	 */
	if (index) {
		verify_uptodate(index);
	}

L
Linus Torvalds 已提交
527 528
	nontrivial_merge = 1;

D
Daniel Barkalow 已提交
529
	/* #2, #3, #4, #6, #7, #9, #11. */
530
	count = 0;
D
Daniel Barkalow 已提交
531 532 533 534 535 536 537 538 539
	if (!head_match || !remote_match) {
		for (i = 1; i < head_idx; i++) {
			if (stages[i]) {
				keep_entry(stages[i]);
				count++;
				break;
			}
		}
	}
540 541 542 543 544 545 546
#if DBRT_DEBUG
	else {
		fprintf(stderr, "read-tree: warning #16 detected\n");
		show_stage_entry(stderr, "head   ", stages[head_match]);
		show_stage_entry(stderr, "remote ", stages[remote_match]);
	}
#endif
D
Daniel Barkalow 已提交
547 548
	if (head) { count += keep_entry(head); }
	if (remote) { count += keep_entry(remote); }
549
	return count;
550 551
}

552 553 554
/*
 * Two-way merge.
 *
555 556 557 558 559
 * The rule is to "carry forward" what is in the index without losing
 * information across a "fast forward", favoring a successful merge
 * over a merge failure when it makes sense.  For details of the
 * "carry forward" rule, please see <Documentation/git-read-tree.txt>.
 *
560
 */
D
Daniel Barkalow 已提交
561
static int twoway_merge(struct cache_entry **src)
562
{
563 564
	struct cache_entry *current = src[0];
	struct cache_entry *oldtree = src[1], *newtree = src[2];
565

D
Daniel Barkalow 已提交
566
	if (merge_size != 2)
567
		return error("Cannot do a twoway merge of %d trees",
D
Daniel Barkalow 已提交
568
			     merge_size);
569

570 571 572 573 574 575 576 577 578
	if (current) {
		if ((!oldtree && !newtree) || /* 4 and 5 */
		    (!oldtree && newtree &&
		     same(current, newtree)) || /* 6 and 7 */
		    (oldtree && newtree &&
		     same(oldtree, newtree)) || /* 14 and 15 */
		    (oldtree && newtree &&
		     !same(oldtree, newtree) && /* 18 and 19*/
		     same(current, newtree))) {
D
Daniel Barkalow 已提交
579
			return keep_entry(current);
580 581 582
		}
		else if (oldtree && !newtree && same(current, oldtree)) {
			/* 10 or 11 */
D
Daniel Barkalow 已提交
583
			return deleted_entry(oldtree, current);
584 585 586 587
		}
		else if (oldtree && newtree &&
			 same(current, oldtree) && !same(current, newtree)) {
			/* 20 or 21 */
D
Daniel Barkalow 已提交
588
			return merged_entry(newtree, current);
589
		}
D
Daniel Barkalow 已提交
590
		else {
591
			/* all other failures */
D
Daniel Barkalow 已提交
592 593 594 595 596 597
			if (oldtree)
				reject_merge(oldtree);
			if (current)
				reject_merge(current);
			if (newtree)
				reject_merge(newtree);
598
			return -1;
D
Daniel Barkalow 已提交
599
		}
600
	}
601
	else if (newtree)
D
Daniel Barkalow 已提交
602
		return merged_entry(newtree, current);
603
	else
D
Daniel Barkalow 已提交
604
		return deleted_entry(oldtree, current);
J
Junio C Hamano 已提交
605 606
}

607 608 609 610 611 612
/*
 * One-way merge.
 *
 * The rule is:
 * - take the stat information from stage0, take the data from stage1
 */
D
Daniel Barkalow 已提交
613
static int oneway_merge(struct cache_entry **src)
614
{
615 616
	struct cache_entry *old = src[0];
	struct cache_entry *a = src[1];
617

D
Daniel Barkalow 已提交
618
	if (merge_size != 1)
619
		return error("Cannot do a oneway merge of %d trees",
D
Daniel Barkalow 已提交
620
			     merge_size);
621

622 623
	if (!a)
		return 0;
624
	if (old && same(old, a)) {
D
Daniel Barkalow 已提交
625
		return keep_entry(old);
626
	}
D
Daniel Barkalow 已提交
627
	return merged_entry(a, NULL);
628 629
}

630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651
static int read_cache_unmerged(void)
{
	int i, deleted;
	struct cache_entry **dst;

	read_cache();
	dst = active_cache;
	deleted = 0;
	for (i = 0; i < active_nr; i++) {
		struct cache_entry *ce = active_cache[i];
		if (ce_stage(ce)) {
			deleted++;
			continue;
		}
		if (deleted)
			*dst = ce;
		dst++;
	}
	active_nr -= deleted;
	return deleted;
}

652
static const char read_tree_usage[] = "git-read-tree (<sha> | -m [-u | -i] <sha1> [<sha2> [<sha3>]])";
J
Junio C Hamano 已提交
653

654 655
static struct cache_file cache_file;

656 657
int main(int argc, char **argv)
{
D
Daniel Barkalow 已提交
658
	int i, newfd, reset, stage = 0;
659
	unsigned char sha1[20];
D
Daniel Barkalow 已提交
660
	merge_fn_t fn = NULL;
661

662 663
	setup_git_directory();

664
	newfd = hold_index_file_for_update(&cache_file, get_index_file());
665
	if (newfd < 0)
666
		die("unable to create new cachefile");
667

668 669
	git_config(git_default_config);

670
	merge = 0;
671
	reset = 0;
672 673 674
	for (i = 1; i < argc; i++) {
		const char *arg = argv[i];

675 676 677
		/* "-u" means "update", meaning that a merge will update
		 * the working tree.
		 */
678 679 680 681 682
		if (!strcmp(arg, "-u")) {
			update = 1;
			continue;
		}

683 684 685 686 687 688 689 690
		/* "-i" means "index only", meaning that a merge will
		 * not even look at the working tree.
		 */
		if (!strcmp(arg, "-i")) {
			index_only = 1;
			continue;
		}

691 692
		/* This differs from "-m" in that we'll silently ignore unmerged entries */
		if (!strcmp(arg, "--reset")) {
D
Daniel Barkalow 已提交
693
			if (stage || merge)
694 695 696 697 698
				usage(read_tree_usage);
			reset = 1;
			merge = 1;
			stage = 1;
			read_cache_unmerged();
699
			continue;
700 701
		}

L
Linus Torvalds 已提交
702 703 704 705 706
		if (!strcmp(arg, "--trivial")) {
			trivial_merges_only = 1;
			continue;
		}

J
Junio C Hamano 已提交
707 708 709 710 711
		if (!strcmp(arg, "--aggressive")) {
			aggressive = 1;
			continue;
		}

712
		/* "-m" stands for "merge", meaning we start in stage 1 */
713
		if (!strcmp(arg, "-m")) {
D
Daniel Barkalow 已提交
714
			if (stage || merge)
715 716 717
				usage(read_tree_usage);
			if (read_cache_unmerged())
				die("you need to resolve your current index first");
718
			stage = 1;
719
			merge = 1;
720 721
			continue;
		}
J
Junio C Hamano 已提交
722

723 724 725 726
		/* using -u and -i at the same time makes no sense */
		if (1 < index_only + update)
			usage(read_tree_usage);

727
		if (get_sha1(arg, sha1) < 0)
J
Junio C Hamano 已提交
728
			usage(read_tree_usage);
D
Daniel Barkalow 已提交
729
		if (list_tree(sha1) < 0)
730
			die("failed to unpack tree object %s", arg);
731
		stage++;
732
	}
733
	if ((update||index_only) && !merge)
734
		usage(read_tree_usage);
J
Junio C Hamano 已提交
735 736

	if (merge) {
D
Daniel Barkalow 已提交
737
		if (stage < 2)
738
			die("just how do you expect me to merge %d trees?", stage-1);
D
Daniel Barkalow 已提交
739 740 741 742 743 744 745 746 747 748 749 750 751
		switch (stage - 1) {
		case 1:
			fn = oneway_merge;
			break;
		case 2:
			fn = twoway_merge;
			break;
		case 3:
			fn = threeway_merge;
			break;
		default:
			fn = threeway_merge;
			break;
J
Junio C Hamano 已提交
752
		}
D
Daniel Barkalow 已提交
753 754 755 756 757 758 759 760

		if (stage - 1 >= 3)
			head_idx = stage - 2;
		else
			head_idx = 1;
	}

	unpack_trees(fn);
761 762
	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_index_file(&cache_file))
763
		die("unable to write new index file");
764
	return 0;
765
}