builtin-read-tree.c 18.8 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
#include "object.h"
#include "tree.h"
J
Junio C Hamano 已提交
12 13
#include <sys/time.h>
#include <signal.h>
P
Peter Eriksen 已提交
14
#include "builtin.h"
D
Daniel Barkalow 已提交
15

L
Linus Torvalds 已提交
16
static int reset = 0;
D
Daniel Barkalow 已提交
17
static int merge = 0;
18
static int update = 0;
19
static int index_only = 0;
L
Linus Torvalds 已提交
20 21
static int nontrivial_merge = 0;
static int trivial_merges_only = 0;
J
Junio C Hamano 已提交
22
static int aggressive = 0;
J
Junio C Hamano 已提交
23 24
static int verbose_update = 0;
static volatile int progress_update = 0;
25

D
Daniel Barkalow 已提交
26 27
static int head_idx = -1;
static int merge_size = 0;
28

D
Daniel Barkalow 已提交
29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
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 已提交
59
	return ret;
60 61
}

D
Daniel Barkalow 已提交
62 63
static int unpack_trees_rec(struct tree_entry_list **posns, int len,
			    const char *base, merge_fn_t fn, int *indpos)
64
{
D
Daniel Barkalow 已提交
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 108 109 110 111 112 113
	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;
			}
		}

114
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
115 116
		if (first)
			printf("index %s\n", first);
117
#endif
D
Daniel Barkalow 已提交
118 119 120
		for (i = 0; i < len; i++) {
			if (!posns[i] || posns[i] == &df_conflict_list)
				continue;
121
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
122
			printf("%d %s\n", i + 1, posns[i]->name);
123
#endif
D
Daniel Barkalow 已提交
124 125 126 127 128 129 130 131 132 133 134 135 136 137
			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);

138
		src = xcalloc(src_size, sizeof(struct cache_entry *));
D
Daniel Barkalow 已提交
139

140
		subposns = xcalloc(len, sizeof(struct tree_list_entry *));
D
Daniel Barkalow 已提交
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

		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;

180
			ce = xcalloc(1, ce_size);
D
Daniel Barkalow 已提交
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197
			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;

198
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
199 200 201 202 203 204 205 206
				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");
				}
207
#endif
D
Daniel Barkalow 已提交
208 209
				ret = fn(src);
				
210
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
211
				printf("Added %d entries\n", ret);
212
#endif
D
Daniel Barkalow 已提交
213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230
				*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;
231
			free(newbase);
D
Daniel Barkalow 已提交
232 233 234 235
		}
		free(subposns);
		free(src);
	} while (1);
236 237
}

D
Daniel Barkalow 已提交
238
static void reject_merge(struct cache_entry *ce)
239
{
D
Daniel Barkalow 已提交
240 241
	die("Entry '%s' would be overwritten by merge. Cannot merge.", 
	    ce->name);
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 270 271 272
/* 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;
	}
}

J
Junio C Hamano 已提交
273 274 275 276 277
static void progress_interval(int signum)
{
	progress_update = 1;
}

278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294
static void setup_progress_signal(void)
{
	struct sigaction sa;
	struct itimerval v;

	memset(&sa, 0, sizeof(sa));
	sa.sa_handler = progress_interval;
	sigemptyset(&sa.sa_mask);
	sa.sa_flags = SA_RESTART;
	sigaction(SIGALRM, &sa, NULL);

	v.it_interval.tv_sec = 1;
	v.it_interval.tv_usec = 0;
	v.it_value = v.it_interval;
	setitimer(ITIMER_REAL, &v, NULL);
}

D
Daniel Barkalow 已提交
295 296 297 298 299 300 301 302 303
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);
J
Junio C Hamano 已提交
304 305 306 307 308 309 310 311 312 313 314 315 316 317 318
	unsigned last_percent = 200, cnt = 0, total = 0;

	if (update && verbose_update) {
		for (total = cnt = 0; cnt < nr; cnt++) {
			struct cache_entry *ce = src[cnt];
			if (!ce->ce_mode || ce->ce_flags & mask)
				total++;
		}

		/* Don't bother doing this for very small updates */
		if (total < 250)
			total = 0;

		if (total) {
			fprintf(stderr, "Checking files out...\n");
319
			setup_progress_signal();
J
Junio C Hamano 已提交
320 321 322 323 324
			progress_update = 1;
		}
		cnt = 0;
	}

D
Daniel Barkalow 已提交
325 326
	while (nr--) {
		struct cache_entry *ce = *src++;
J
Junio C Hamano 已提交
327 328 329 330 331 332 333 334 335 336 337 338 339 340

		if (total) {
			if (!ce->ce_mode || ce->ce_flags & mask) {
				unsigned percent;
				cnt++;
				percent = (cnt * 100) / total;
				if (percent != last_percent ||
				    progress_update) {
					fprintf(stderr, "%4u%% (%u/%u) done\r",
						percent, cnt, total);
					last_percent = percent;
				}
			}
		}
D
Daniel Barkalow 已提交
341 342
		if (!ce->ce_mode) {
			if (update)
343
				unlink_entry(ce->name);
D
Daniel Barkalow 已提交
344 345 346 347 348
			continue;
		}
		if (ce->ce_flags & mask) {
			ce->ce_flags &= ~mask;
			if (update)
349
				checkout_entry(ce, &state, NULL);
D
Daniel Barkalow 已提交
350 351
		}
	}
J
Junio C Hamano 已提交
352 353
	if (total) {
		signal(SIGALRM, SIG_IGN);
354
		fputc('\n', stderr);
J
Junio C Hamano 已提交
355
	}
D
Daniel Barkalow 已提交
356
}
357

D
Daniel Barkalow 已提交
358
static int unpack_trees(merge_fn_t fn)
359
{
D
Daniel Barkalow 已提交
360 361
	int indpos = 0;
	unsigned len = object_list_length(trees);
362
	struct tree_entry_list **posns;
D
Daniel Barkalow 已提交
363 364 365
	int i;
	struct object_list *posn = trees;
	merge_size = len;
366 367 368 369 370 371 372 373 374

	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;
375
	}
D
Daniel Barkalow 已提交
376

L
Linus Torvalds 已提交
377 378 379
	if (trivial_merges_only && nontrivial_merge)
		die("Merge requires file-level merging");

D
Daniel Barkalow 已提交
380 381
	check_updates(active_cache, active_nr);
	return 0;
382 383
}

D
Daniel Barkalow 已提交
384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403
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);
}


404 405 406 407 408 409 410 411
/*
 * 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;

412
	if (index_only || reset)
413 414
		return;

415
	if (!lstat(ce->name, &st)) {
J
Junio C Hamano 已提交
416
		unsigned changed = ce_match_stat(ce, &st, 1);
417 418 419 420
		if (!changed)
			return;
		errno = 0;
	}
L
Linus Torvalds 已提交
421 422 423 424
	if (reset) {
		ce->ce_flags |= htons(CE_UPDATE);
		return;
	}
425 426 427 428 429
	if (errno == ENOENT)
		return;
	die("Entry '%s' not uptodate. Cannot merge.", ce->name);
}

430 431 432 433 434 435 436 437 438 439 440 441 442 443 444
/*
 * We do not want to remove or overwrite a working tree file that
 * is not tracked.
 */
static void verify_absent(const char *path, const char *action)
{
	struct stat st;

	if (index_only || reset || !update)
		return;
	if (!lstat(path, &st))
		die("Untracked working tree file '%s' "
		    "would be %s by merge.", path, action);
}

D
Daniel Barkalow 已提交
445
static int merged_entry(struct cache_entry *merge, struct cache_entry *old)
446
{
447 448
	merge->ce_flags |= htons(CE_UPDATE);
	if (old) {
449
		/*
450 451 452 453 454
		 * 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.
455
		 */
456 457
		if (same(old, merge)) {
			*merge = *old;
D
Daniel Barkalow 已提交
458
		} else {
459 460
			verify_uptodate(old);
		}
461
	}
462 463 464
	else
		verify_absent(merge->name, "overwritten");

465
	merge->ce_flags &= ~htons(CE_STAGEMASK);
D
Daniel Barkalow 已提交
466
	add_cache_entry(merge, ADD_CACHE_OK_TO_ADD);
467
	return 1;
468 469
}

D
Daniel Barkalow 已提交
470
static int deleted_entry(struct cache_entry *ce, struct cache_entry *old)
471 472 473
{
	if (old)
		verify_uptodate(old);
474 475
	else
		verify_absent(ce->name, "removed");
476
	ce->ce_mode = 0;
D
Daniel Barkalow 已提交
477
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
478 479 480
	return 1;
}

D
Daniel Barkalow 已提交
481
static int keep_entry(struct cache_entry *ce)
482
{
D
Daniel Barkalow 已提交
483 484
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
	return 1;
485 486
}

487 488 489 490
#if DBRT_DEBUG
static void show_stage_entry(FILE *o,
			     const char *label, const struct cache_entry *ce)
{
491 492 493 494 495 496 497 498 499
	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);
500 501 502
}
#endif

D
Daniel Barkalow 已提交
503
static int threeway_merge(struct cache_entry **stages)
504
{
D
Daniel Barkalow 已提交
505 506 507
	struct cache_entry *index;
	struct cache_entry *head; 
	struct cache_entry *remote = stages[head_idx + 1];
508
	int count;
D
Daniel Barkalow 已提交
509 510
	int head_match = 0;
	int remote_match = 0;
511
	const char *path = NULL;
512

D
Daniel Barkalow 已提交
513 514 515 516
	int df_conflict_head = 0;
	int df_conflict_remote = 0;

	int any_anc_missing = 0;
J
Junio C Hamano 已提交
517
	int no_anc_exists = 1;
D
Daniel Barkalow 已提交
518 519 520 521 522
	int i;

	for (i = 1; i < head_idx; i++) {
		if (!stages[i])
			any_anc_missing = 1;
523 524 525
		else {
			if (!path)
				path = stages[i]->name;
J
Junio C Hamano 已提交
526
			no_anc_exists = 0;
527
		}
528
	}
D
Daniel Barkalow 已提交
529 530 531 532 533 534 535 536 537 538 539 540 541 542

	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;
	}

543 544 545 546 547 548 549
	if (!path && index)
		path = index->name;
	if (!path && head)
		path = head->name;
	if (!path && remote)
		path = remote->name;

D
Daniel Barkalow 已提交
550
	/* First, if there's a #16 situation, note that to prevent #13
551
	 * and #14.
D
Daniel Barkalow 已提交
552 553 554 555
	 */
	if (!same(remote, head)) {
		for (i = 1; i < head_idx; i++) {
			if (same(stages[i], head)) {
556
				head_match = i;
D
Daniel Barkalow 已提交
557 558
			}
			if (same(stages[i], remote)) {
559
				remote_match = i;
D
Daniel Barkalow 已提交
560
			}
561 562
		}
	}
D
Daniel Barkalow 已提交
563 564 565 566 567 568 569 570 571 572

	/* 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);
573
	}
574
	/*
D
Daniel Barkalow 已提交
575 576
	 * If we have an entry in the index cache, then we want to
	 * make sure that it matches head.
577
	 */
D
Daniel Barkalow 已提交
578 579
	if (index && !same(index, head)) {
		reject_merge(index);
580
	}
D
Daniel Barkalow 已提交
581 582 583 584 585 586 587 588 589 590 591 592 593 594

	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 已提交
595 596 597 598 599 600 601 602 603 604 605 606
	/* 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) ||
607 608 609
		    (remote_deleted && head && head_match)) {
			if (index)
				return deleted_entry(index, index);
610 611
			else if (path)
				verify_absent(path, "removed");
J
Junio C Hamano 已提交
612
			return 0;
613
		}
J
Junio C Hamano 已提交
614 615 616 617 618 619 620 621
		/*
		 * Added in both, identically.
		 */
		if (no_anc_exists && head && remote && same(head, remote))
			return merged_entry(head, index);

	}

D
Daniel Barkalow 已提交
622 623 624 625 626 627 628
	/* 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);
	}
629 630
	else if (path)
		verify_absent(path, "overwritten");
D
Daniel Barkalow 已提交
631

L
Linus Torvalds 已提交
632 633
	nontrivial_merge = 1;

D
Daniel Barkalow 已提交
634
	/* #2, #3, #4, #6, #7, #9, #11. */
635
	count = 0;
D
Daniel Barkalow 已提交
636 637 638 639 640 641 642 643 644
	if (!head_match || !remote_match) {
		for (i = 1; i < head_idx; i++) {
			if (stages[i]) {
				keep_entry(stages[i]);
				count++;
				break;
			}
		}
	}
645 646 647 648 649 650 651
#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 已提交
652 653
	if (head) { count += keep_entry(head); }
	if (remote) { count += keep_entry(remote); }
654
	return count;
655 656
}

657 658 659
/*
 * Two-way merge.
 *
660 661 662 663 664
 * 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>.
 *
665
 */
D
Daniel Barkalow 已提交
666
static int twoway_merge(struct cache_entry **src)
667
{
668 669
	struct cache_entry *current = src[0];
	struct cache_entry *oldtree = src[1], *newtree = src[2];
670

D
Daniel Barkalow 已提交
671
	if (merge_size != 2)
672
		return error("Cannot do a twoway merge of %d trees",
D
Daniel Barkalow 已提交
673
			     merge_size);
674

675 676 677 678 679 680 681 682 683
	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 已提交
684
			return keep_entry(current);
685 686 687
		}
		else if (oldtree && !newtree && same(current, oldtree)) {
			/* 10 or 11 */
D
Daniel Barkalow 已提交
688
			return deleted_entry(oldtree, current);
689 690 691 692
		}
		else if (oldtree && newtree &&
			 same(current, oldtree) && !same(current, newtree)) {
			/* 20 or 21 */
D
Daniel Barkalow 已提交
693
			return merged_entry(newtree, current);
694
		}
D
Daniel Barkalow 已提交
695
		else {
696
			/* all other failures */
D
Daniel Barkalow 已提交
697 698 699 700 701 702
			if (oldtree)
				reject_merge(oldtree);
			if (current)
				reject_merge(current);
			if (newtree)
				reject_merge(newtree);
703
			return -1;
D
Daniel Barkalow 已提交
704
		}
705
	}
706
	else if (newtree)
D
Daniel Barkalow 已提交
707
		return merged_entry(newtree, current);
708
	else
D
Daniel Barkalow 已提交
709
		return deleted_entry(oldtree, current);
J
Junio C Hamano 已提交
710 711
}

712 713 714 715 716 717
/*
 * One-way merge.
 *
 * The rule is:
 * - take the stat information from stage0, take the data from stage1
 */
D
Daniel Barkalow 已提交
718
static int oneway_merge(struct cache_entry **src)
719
{
720 721
	struct cache_entry *old = src[0];
	struct cache_entry *a = src[1];
722

D
Daniel Barkalow 已提交
723
	if (merge_size != 1)
724
		return error("Cannot do a oneway merge of %d trees",
D
Daniel Barkalow 已提交
725
			     merge_size);
726

727
	if (!a)
728
		return deleted_entry(old, old);
729
	if (old && same(old, a)) {
L
Linus Torvalds 已提交
730 731 732 733 734 735
		if (reset) {
			struct stat st;
			if (lstat(old->name, &st) ||
			    ce_match_stat(old, &st, 1))
				old->ce_flags |= htons(CE_UPDATE);
		}
D
Daniel Barkalow 已提交
736
		return keep_entry(old);
737
	}
738
	return merged_entry(a, old);
739 740
}

741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762
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;
}

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

765 766
static struct cache_file cache_file;

P
Peter Eriksen 已提交
767
int cmd_read_tree(int argc, const char **argv, char **envp)
768
{
L
Linus Torvalds 已提交
769
	int i, newfd, stage = 0;
770
	unsigned char sha1[20];
D
Daniel Barkalow 已提交
771
	merge_fn_t fn = NULL;
772

773
	setup_git_directory();
774
	git_config(git_default_config);
775

776
	newfd = hold_index_file_for_update(&cache_file, get_index_file());
777
	if (newfd < 0)
778
		die("unable to create new cachefile");
779

780 781
	git_config(git_default_config);

782
	merge = 0;
783
	reset = 0;
784 785 786
	for (i = 1; i < argc; i++) {
		const char *arg = argv[i];

787 788 789
		/* "-u" means "update", meaning that a merge will update
		 * the working tree.
		 */
790 791 792 793 794
		if (!strcmp(arg, "-u")) {
			update = 1;
			continue;
		}

J
Junio C Hamano 已提交
795 796 797 798 799
		if (!strcmp(arg, "-v")) {
			verbose_update = 1;
			continue;
		}

800 801 802 803 804 805 806 807
		/* "-i" means "index only", meaning that a merge will
		 * not even look at the working tree.
		 */
		if (!strcmp(arg, "-i")) {
			index_only = 1;
			continue;
		}

808 809
		/* This differs from "-m" in that we'll silently ignore unmerged entries */
		if (!strcmp(arg, "--reset")) {
D
Daniel Barkalow 已提交
810
			if (stage || merge)
811 812 813 814 815
				usage(read_tree_usage);
			reset = 1;
			merge = 1;
			stage = 1;
			read_cache_unmerged();
816
			continue;
817 818
		}

L
Linus Torvalds 已提交
819 820 821 822 823
		if (!strcmp(arg, "--trivial")) {
			trivial_merges_only = 1;
			continue;
		}

J
Junio C Hamano 已提交
824 825 826 827 828
		if (!strcmp(arg, "--aggressive")) {
			aggressive = 1;
			continue;
		}

829
		/* "-m" stands for "merge", meaning we start in stage 1 */
830
		if (!strcmp(arg, "-m")) {
D
Daniel Barkalow 已提交
831
			if (stage || merge)
832 833 834
				usage(read_tree_usage);
			if (read_cache_unmerged())
				die("you need to resolve your current index first");
835
			stage = 1;
836
			merge = 1;
837 838
			continue;
		}
J
Junio C Hamano 已提交
839

840 841 842 843
		/* using -u and -i at the same time makes no sense */
		if (1 < index_only + update)
			usage(read_tree_usage);

844 845
		if (get_sha1(arg, sha1))
			die("Not a valid object name %s", arg);
D
Daniel Barkalow 已提交
846
		if (list_tree(sha1) < 0)
847
			die("failed to unpack tree object %s", arg);
848
		stage++;
849
	}
850
	if ((update||index_only) && !merge)
851
		usage(read_tree_usage);
J
Junio C Hamano 已提交
852 853

	if (merge) {
D
Daniel Barkalow 已提交
854
		if (stage < 2)
855
			die("just how do you expect me to merge %d trees?", stage-1);
D
Daniel Barkalow 已提交
856 857 858 859 860 861 862 863 864 865 866 867 868
		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 已提交
869
		}
D
Daniel Barkalow 已提交
870 871 872 873 874 875 876 877

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

	unpack_trees(fn);
878 879
	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_index_file(&cache_file))
880
		die("unable to write new index file");
881
	return 0;
882
}