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

L
Linus Torvalds 已提交
18
static int reset = 0;
D
Daniel Barkalow 已提交
19
static int merge = 0;
20
static int update = 0;
21
static int index_only = 0;
L
Linus Torvalds 已提交
22 23
static int nontrivial_merge = 0;
static int trivial_merges_only = 0;
J
Junio C Hamano 已提交
24
static int aggressive = 0;
J
Junio C Hamano 已提交
25 26
static int verbose_update = 0;
static volatile int progress_update = 0;
27
static const char *prefix = NULL;
28

D
Daniel Barkalow 已提交
29 30
static int head_idx = -1;
static int merge_size = 0;
31

D
Daniel Barkalow 已提交
32 33
static struct object_list *trees = NULL;

34
static struct cache_entry df_conflict_entry;
35 36 37 38 39 40 41 42 43

struct tree_entry_list {
	struct tree_entry_list *next;
	unsigned directory : 1;
	unsigned executable : 1;
	unsigned symlink : 1;
	unsigned int mode;
	const char *name;
	const unsigned char *sha1;
D
Daniel Barkalow 已提交
44 45
};

S
Shawn Pearce 已提交
46
static struct tree_entry_list df_conflict_list;
D
Daniel Barkalow 已提交
47 48 49

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

50 51 52
static struct tree_entry_list *create_tree_entry_list(struct tree *tree)
{
	struct tree_desc desc;
53
	struct name_entry one;
54 55 56 57 58 59
	struct tree_entry_list *ret = NULL;
	struct tree_entry_list **list_p = &ret;

	desc.buf = tree->buffer;
	desc.size = tree->size;

60
	while (tree_entry(&desc, &one)) {
61 62 63
		struct tree_entry_list *entry;

		entry = xmalloc(sizeof(struct tree_entry_list));
64 65 66 67 68 69
		entry->name = one.path;
		entry->sha1 = one.sha1;
		entry->mode = one.mode;
		entry->directory = S_ISDIR(one.mode) != 0;
		entry->executable = (one.mode & S_IXUSR) != 0;
		entry->symlink = S_ISLNK(one.mode) != 0;
70 71 72 73 74 75 76 77
		entry->next = NULL;

		*list_p = entry;
		list_p = &entry->next;
	}
	return ret;
}

78
static int entcmp(const char *name1, int dir1, const char *name2, int dir2)
D
Daniel Barkalow 已提交
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
{
	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 已提交
96
	return ret;
97 98
}

D
Daniel Barkalow 已提交
99 100
static int unpack_trees_rec(struct tree_entry_list **posns, int len,
			    const char *base, merge_fn_t fn, int *indpos)
101
{
D
Daniel Barkalow 已提交
102 103 104 105
	int baselen = strlen(base);
	int src_size = len + 1;
	do {
		int i;
106
		const char *first;
D
Daniel Barkalow 已提交
107 108 109 110 111 112 113 114 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 144 145 146 147 148 149 150
		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;
			}
		}

151
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
152 153
		if (first)
			printf("index %s\n", first);
154
#endif
D
Daniel Barkalow 已提交
155 156 157
		for (i = 0; i < len; i++) {
			if (!posns[i] || posns[i] == &df_conflict_list)
				continue;
158
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
159
			printf("%d %s\n", i + 1, posns[i]->name);
160
#endif
D
Daniel Barkalow 已提交
161 162 163 164 165 166 167 168 169 170 171 172 173 174
			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);

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

177
		subposns = xcalloc(len, sizeof(struct tree_list_entry *));
D
Daniel Barkalow 已提交
178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199

		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) {
200
				struct tree *tree = lookup_tree(posns[i]->sha1);
D
Daniel Barkalow 已提交
201
				any_dirs = 1;
202
				parse_tree(tree);
203
				subposns[i] = create_tree_entry_list(tree);
D
Daniel Barkalow 已提交
204 205 206 207 208 209 210 211 212 213 214 215 216 217
				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;

218
			ce = xcalloc(1, ce_size);
D
Daniel Barkalow 已提交
219 220 221 222 223 224 225 226
			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;

227
			memcpy(ce->sha1, posns[i]->sha1, 20);
D
Daniel Barkalow 已提交
228 229 230 231 232 233 234 235
			src[i + merge] = ce;
			subposns[i] = &df_conflict_list;
			posns[i] = posns[i]->next;
		}
		if (any_files) {
			if (merge) {
				int ret;

236
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
237 238 239 240 241 242 243 244
				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");
				}
245
#endif
D
Daniel Barkalow 已提交
246 247
				ret = fn(src);
				
248
#if DBRT_DEBUG > 1
D
Daniel Barkalow 已提交
249
				printf("Added %d entries\n", ret);
250
#endif
D
Daniel Barkalow 已提交
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
				*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;
269
			free(newbase);
D
Daniel Barkalow 已提交
270 271 272 273
		}
		free(subposns);
		free(src);
	} while (1);
274 275
}

D
Daniel Barkalow 已提交
276
static void reject_merge(struct cache_entry *ce)
277
{
D
Daniel Barkalow 已提交
278 279
	die("Entry '%s' would be overwritten by merge. Cannot merge.", 
	    ce->name);
280 281
}

282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310
/* 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 已提交
311 312 313 314 315
static void progress_interval(int signum)
{
	progress_update = 1;
}

316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332
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);
}

S
Shawn Pearce 已提交
333
static struct checkout state;
D
Daniel Barkalow 已提交
334 335 336
static void check_updates(struct cache_entry **src, int nr)
{
	unsigned short mask = htons(CE_UPDATE);
J
Junio C Hamano 已提交
337 338 339 340 341 342 343 344 345 346 347 348 349 350 351
	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");
352
			setup_progress_signal();
J
Junio C Hamano 已提交
353 354 355 356 357
			progress_update = 1;
		}
		cnt = 0;
	}

D
Daniel Barkalow 已提交
358 359
	while (nr--) {
		struct cache_entry *ce = *src++;
J
Junio C Hamano 已提交
360 361 362 363 364 365 366 367 368 369 370

		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;
L
Linus Torvalds 已提交
371
					progress_update = 0;
J
Junio C Hamano 已提交
372 373 374
				}
			}
		}
D
Daniel Barkalow 已提交
375 376
		if (!ce->ce_mode) {
			if (update)
377
				unlink_entry(ce->name);
D
Daniel Barkalow 已提交
378 379 380 381 382
			continue;
		}
		if (ce->ce_flags & mask) {
			ce->ce_flags &= ~mask;
			if (update)
383
				checkout_entry(ce, &state, NULL);
D
Daniel Barkalow 已提交
384 385
		}
	}
J
Junio C Hamano 已提交
386 387
	if (total) {
		signal(SIGALRM, SIG_IGN);
388
		fputc('\n', stderr);
J
Junio C Hamano 已提交
389
	}
D
Daniel Barkalow 已提交
390
}
391

D
Daniel Barkalow 已提交
392
static int unpack_trees(merge_fn_t fn)
393
{
D
Daniel Barkalow 已提交
394 395
	int indpos = 0;
	unsigned len = object_list_length(trees);
396
	struct tree_entry_list **posns;
D
Daniel Barkalow 已提交
397 398 399
	int i;
	struct object_list *posn = trees;
	merge_size = len;
400 401 402 403

	if (len) {
		posns = xmalloc(len * sizeof(struct tree_entry_list *));
		for (i = 0; i < len; i++) {
404
			posns[i] = create_tree_entry_list((struct tree *) posn->item);
405 406
			posn = posn->next;
		}
407 408
		if (unpack_trees_rec(posns, len, prefix ? prefix : "",
				     fn, &indpos))
409
			return -1;
410
	}
D
Daniel Barkalow 已提交
411

L
Linus Torvalds 已提交
412 413 414
	if (trivial_merges_only && nontrivial_merge)
		die("Merge requires file-level merging");

D
Daniel Barkalow 已提交
415 416
	check_updates(active_cache, active_nr);
	return 0;
417 418
}

D
Daniel Barkalow 已提交
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438
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);
}


439 440 441 442 443 444 445 446
/*
 * 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;

447
	if (index_only || reset)
448 449
		return;

450
	if (!lstat(ce->name, &st)) {
J
Junio C Hamano 已提交
451
		unsigned changed = ce_match_stat(ce, &st, 1);
452 453 454 455
		if (!changed)
			return;
		errno = 0;
	}
L
Linus Torvalds 已提交
456 457 458 459
	if (reset) {
		ce->ce_flags |= htons(CE_UPDATE);
		return;
	}
460 461 462 463 464
	if (errno == ENOENT)
		return;
	die("Entry '%s' not uptodate. Cannot merge.", ce->name);
}

465 466 467 468 469 470
static void invalidate_ce_path(struct cache_entry *ce)
{
	if (ce)
		cache_tree_invalidate_path(active_cache_tree, ce->name);
}

471 472 473 474 475 476 477 478 479 480 481 482 483 484 485
/*
 * 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 已提交
486
static int merged_entry(struct cache_entry *merge, struct cache_entry *old)
487
{
488 489
	merge->ce_flags |= htons(CE_UPDATE);
	if (old) {
490
		/*
491 492 493 494 495
		 * 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.
496
		 */
497 498
		if (same(old, merge)) {
			*merge = *old;
D
Daniel Barkalow 已提交
499
		} else {
500
			verify_uptodate(old);
501
			invalidate_ce_path(old);
502
		}
503
	}
504
	else {
505
		verify_absent(merge->name, "overwritten");
506
		invalidate_ce_path(merge);
507
	}
508

509
	merge->ce_flags &= ~htons(CE_STAGEMASK);
510
	add_cache_entry(merge, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
511
	return 1;
512 513
}

D
Daniel Barkalow 已提交
514
static int deleted_entry(struct cache_entry *ce, struct cache_entry *old)
515 516 517
{
	if (old)
		verify_uptodate(old);
518 519
	else
		verify_absent(ce->name, "removed");
520
	ce->ce_mode = 0;
521
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD|ADD_CACHE_OK_TO_REPLACE);
522
	invalidate_ce_path(ce);
523 524 525
	return 1;
}

D
Daniel Barkalow 已提交
526
static int keep_entry(struct cache_entry *ce)
527
{
D
Daniel Barkalow 已提交
528 529
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
	return 1;
530 531
}

532 533 534 535
#if DBRT_DEBUG
static void show_stage_entry(FILE *o,
			     const char *label, const struct cache_entry *ce)
{
536 537 538 539 540 541 542 543 544
	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);
545 546 547
}
#endif

D
Daniel Barkalow 已提交
548
static int threeway_merge(struct cache_entry **stages)
549
{
D
Daniel Barkalow 已提交
550 551 552
	struct cache_entry *index;
	struct cache_entry *head; 
	struct cache_entry *remote = stages[head_idx + 1];
553
	int count;
D
Daniel Barkalow 已提交
554 555
	int head_match = 0;
	int remote_match = 0;
556
	const char *path = NULL;
557

D
Daniel Barkalow 已提交
558 559 560 561
	int df_conflict_head = 0;
	int df_conflict_remote = 0;

	int any_anc_missing = 0;
J
Junio C Hamano 已提交
562
	int no_anc_exists = 1;
D
Daniel Barkalow 已提交
563 564 565 566 567
	int i;

	for (i = 1; i < head_idx; i++) {
		if (!stages[i])
			any_anc_missing = 1;
568 569 570
		else {
			if (!path)
				path = stages[i]->name;
J
Junio C Hamano 已提交
571
			no_anc_exists = 0;
572
		}
573
	}
D
Daniel Barkalow 已提交
574 575 576 577 578 579 580 581 582 583 584 585 586 587

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

588 589 590 591 592 593 594
	if (!path && index)
		path = index->name;
	if (!path && head)
		path = head->name;
	if (!path && remote)
		path = remote->name;

D
Daniel Barkalow 已提交
595
	/* First, if there's a #16 situation, note that to prevent #13
596
	 * and #14.
D
Daniel Barkalow 已提交
597 598 599 600
	 */
	if (!same(remote, head)) {
		for (i = 1; i < head_idx; i++) {
			if (same(stages[i], head)) {
601
				head_match = i;
D
Daniel Barkalow 已提交
602 603
			}
			if (same(stages[i], remote)) {
604
				remote_match = i;
D
Daniel Barkalow 已提交
605
			}
606 607
		}
	}
D
Daniel Barkalow 已提交
608 609 610 611 612 613 614 615 616 617

	/* 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);
618
	}
619
	/*
D
Daniel Barkalow 已提交
620 621
	 * If we have an entry in the index cache, then we want to
	 * make sure that it matches head.
622
	 */
D
Daniel Barkalow 已提交
623 624
	if (index && !same(index, head)) {
		reject_merge(index);
625
	}
D
Daniel Barkalow 已提交
626 627 628 629 630 631 632 633 634 635 636 637 638 639

	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 已提交
640 641 642 643 644 645 646 647 648 649 650 651
	/* 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) ||
652 653 654
		    (remote_deleted && head && head_match)) {
			if (index)
				return deleted_entry(index, index);
655 656
			else if (path)
				verify_absent(path, "removed");
J
Junio C Hamano 已提交
657
			return 0;
658
		}
J
Junio C Hamano 已提交
659 660 661 662 663 664 665 666
		/*
		 * Added in both, identically.
		 */
		if (no_anc_exists && head && remote && same(head, remote))
			return merged_entry(head, index);

	}

D
Daniel Barkalow 已提交
667 668 669 670 671 672 673
	/* 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);
	}
674 675
	else if (path)
		verify_absent(path, "overwritten");
D
Daniel Barkalow 已提交
676

L
Linus Torvalds 已提交
677 678
	nontrivial_merge = 1;

D
Daniel Barkalow 已提交
679
	/* #2, #3, #4, #6, #7, #9, #11. */
680
	count = 0;
D
Daniel Barkalow 已提交
681 682 683 684 685 686 687 688 689
	if (!head_match || !remote_match) {
		for (i = 1; i < head_idx; i++) {
			if (stages[i]) {
				keep_entry(stages[i]);
				count++;
				break;
			}
		}
	}
690 691 692 693 694 695 696
#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 已提交
697 698
	if (head) { count += keep_entry(head); }
	if (remote) { count += keep_entry(remote); }
699
	return count;
700 701
}

702 703 704
/*
 * Two-way merge.
 *
705 706 707 708 709
 * 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>.
 *
710
 */
D
Daniel Barkalow 已提交
711
static int twoway_merge(struct cache_entry **src)
712
{
713 714
	struct cache_entry *current = src[0];
	struct cache_entry *oldtree = src[1], *newtree = src[2];
715

D
Daniel Barkalow 已提交
716
	if (merge_size != 2)
717
		return error("Cannot do a twoway merge of %d trees",
D
Daniel Barkalow 已提交
718
			     merge_size);
719

720 721 722 723 724 725 726 727 728
	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 已提交
729
			return keep_entry(current);
730 731 732
		}
		else if (oldtree && !newtree && same(current, oldtree)) {
			/* 10 or 11 */
D
Daniel Barkalow 已提交
733
			return deleted_entry(oldtree, current);
734 735 736 737
		}
		else if (oldtree && newtree &&
			 same(current, oldtree) && !same(current, newtree)) {
			/* 20 or 21 */
D
Daniel Barkalow 已提交
738
			return merged_entry(newtree, current);
739
		}
D
Daniel Barkalow 已提交
740
		else {
741
			/* all other failures */
D
Daniel Barkalow 已提交
742 743 744 745 746 747
			if (oldtree)
				reject_merge(oldtree);
			if (current)
				reject_merge(current);
			if (newtree)
				reject_merge(newtree);
748
			return -1;
D
Daniel Barkalow 已提交
749
		}
750
	}
751
	else if (newtree)
D
Daniel Barkalow 已提交
752
		return merged_entry(newtree, current);
753
	else
D
Daniel Barkalow 已提交
754
		return deleted_entry(oldtree, current);
J
Junio C Hamano 已提交
755 756
}

757 758 759 760
/*
 * Bind merge.
 *
 * Keep the index entries at stage0, collapse stage1 but make sure
761
 * stage0 does not have anything there.
762 763 764 765 766 767 768 769 770
 */
static int bind_merge(struct cache_entry **src)
{
	struct cache_entry *old = src[0];
	struct cache_entry *a = src[1];

	if (merge_size != 1)
		return error("Cannot do a bind merge of %d trees\n",
			     merge_size);
771
	if (a && old)
772
		die("Entry '%s' overlaps.  Cannot bind.", a->name);
773 774 775 776
	if (!a)
		return keep_entry(old);
	else
		return merged_entry(a, NULL);
777 778
}

779 780 781 782 783 784
/*
 * One-way merge.
 *
 * The rule is:
 * - take the stat information from stage0, take the data from stage1
 */
D
Daniel Barkalow 已提交
785
static int oneway_merge(struct cache_entry **src)
786
{
787 788
	struct cache_entry *old = src[0];
	struct cache_entry *a = src[1];
789

D
Daniel Barkalow 已提交
790
	if (merge_size != 1)
791
		return error("Cannot do a oneway merge of %d trees",
D
Daniel Barkalow 已提交
792
			     merge_size);
793

794
	if (!a)
795
		return deleted_entry(old, old);
796
	if (old && same(old, a)) {
L
Linus Torvalds 已提交
797 798 799 800 801 802
		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 已提交
803
		return keep_entry(old);
804
	}
805
	return merged_entry(a, old);
806 807
}

808 809
static int read_cache_unmerged(void)
{
810
	int i;
811
	struct cache_entry **dst;
812
	struct cache_entry *last = NULL;
813 814 815 816 817 818

	read_cache();
	dst = active_cache;
	for (i = 0; i < active_nr; i++) {
		struct cache_entry *ce = active_cache[i];
		if (ce_stage(ce)) {
819 820
			if (last && !strcmp(ce->name, last->name))
				continue;
821
			invalidate_ce_path(ce);
822 823 824
			last = ce;
			ce->ce_mode = 0;
			ce->ce_flags &= ~htons(CE_STAGEMASK);
825
		}
826
		*dst++ = ce;
827
	}
828 829
	active_nr = dst - active_cache;
	return !!last;
830 831
}

832 833
static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree)
{
834
	struct tree_desc desc;
835
	struct name_entry entry;
836
	int cnt;
837

838
	memcpy(it->sha1, tree->object.sha1, 20);
839 840 841
	desc.buf = tree->buffer;
	desc.size = tree->size;
	cnt = 0;
842 843
	while (tree_entry(&desc, &entry)) {
		if (!S_ISDIR(entry.mode))
844 845 846
			cnt++;
		else {
			struct cache_tree_sub *sub;
847
			struct tree *subtree = lookup_tree(entry.sha1);
848 849
			if (!subtree->object.parsed)
				parse_tree(subtree);
850
			sub = cache_tree_sub(it, entry.path);
851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868
			sub->cache_tree = cache_tree();
			prime_cache_tree_rec(sub->cache_tree, subtree);
			cnt += sub->cache_tree->entry_count;
		}
	}
	it->entry_count = cnt;
}

static void prime_cache_tree(void)
{
	struct tree *tree = (struct tree *)trees->item;
	if (!tree)
		return;
	active_cache_tree = cache_tree();
	prime_cache_tree_rec(active_cache_tree, tree);

}

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

871
static struct lock_file lock_file;
872

873
int cmd_read_tree(int argc, const char **argv, const char *unused_prefix)
874
{
L
Linus Torvalds 已提交
875
	int i, newfd, stage = 0;
876
	unsigned char sha1[20];
D
Daniel Barkalow 已提交
877
	merge_fn_t fn = NULL;
878

S
Shawn Pearce 已提交
879 880 881 882 883 884
	df_conflict_list.next = &df_conflict_list;
	state.base_dir = "";
	state.force = 1;
	state.quiet = 1;
	state.refresh_cache = 1;

885
	git_config(git_default_config);
886

887
	newfd = hold_lock_file_for_update(&lock_file, get_index_file());
888
	if (newfd < 0)
889
		die("unable to create new index file");
890

891 892
	git_config(git_default_config);

893
	merge = 0;
894
	reset = 0;
895 896 897
	for (i = 1; i < argc; i++) {
		const char *arg = argv[i];

898 899 900
		/* "-u" means "update", meaning that a merge will update
		 * the working tree.
		 */
901 902 903 904 905
		if (!strcmp(arg, "-u")) {
			update = 1;
			continue;
		}

J
Junio C Hamano 已提交
906 907 908 909 910
		if (!strcmp(arg, "-v")) {
			verbose_update = 1;
			continue;
		}

911 912 913 914 915 916 917 918
		/* "-i" means "index only", meaning that a merge will
		 * not even look at the working tree.
		 */
		if (!strcmp(arg, "-i")) {
			index_only = 1;
			continue;
		}

919 920 921 922 923 924 925 926 927 928 929 930 931 932 933
		/* "--prefix=<subdirectory>/" means keep the current index
		 *  entries and put the entries from the tree under the
		 * given subdirectory.
		 */
		if (!strncmp(arg, "--prefix=", 9)) {
			if (stage || merge || prefix)
				usage(read_tree_usage);
			prefix = arg + 9;
			merge = 1;
			stage = 1;
			if (read_cache_unmerged())
				die("you need to resolve your current index first");
			continue;
		}

934 935 936 937
		/* This differs from "-m" in that we'll silently ignore
		 * unmerged entries and overwrite working tree files that
		 * correspond to them.
		 */
938
		if (!strcmp(arg, "--reset")) {
939
			if (stage || merge || prefix)
940 941 942 943 944
				usage(read_tree_usage);
			reset = 1;
			merge = 1;
			stage = 1;
			read_cache_unmerged();
945
			continue;
946 947
		}

L
Linus Torvalds 已提交
948 949 950 951 952
		if (!strcmp(arg, "--trivial")) {
			trivial_merges_only = 1;
			continue;
		}

J
Junio C Hamano 已提交
953 954 955 956 957
		if (!strcmp(arg, "--aggressive")) {
			aggressive = 1;
			continue;
		}

958
		/* "-m" stands for "merge", meaning we start in stage 1 */
959
		if (!strcmp(arg, "-m")) {
960
			if (stage || merge || prefix)
961 962 963
				usage(read_tree_usage);
			if (read_cache_unmerged())
				die("you need to resolve your current index first");
964
			stage = 1;
965
			merge = 1;
966 967
			continue;
		}
J
Junio C Hamano 已提交
968

969 970 971 972
		/* using -u and -i at the same time makes no sense */
		if (1 < index_only + update)
			usage(read_tree_usage);

973 974
		if (get_sha1(arg, sha1))
			die("Not a valid object name %s", arg);
D
Daniel Barkalow 已提交
975
		if (list_tree(sha1) < 0)
976
			die("failed to unpack tree object %s", arg);
977
		stage++;
978
	}
979
	if ((update||index_only) && !merge)
980
		usage(read_tree_usage);
J
Junio C Hamano 已提交
981

982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000
	if (prefix) {
		int pfxlen = strlen(prefix);
		int pos;
		if (prefix[pfxlen-1] != '/')
			die("prefix must end with /");
		if (stage != 2)
			die("binding merge takes only one tree");
		pos = cache_name_pos(prefix, pfxlen);
		if (0 <= pos)
			die("corrupt index file");
		pos = -pos-1;
		if (pos < active_nr &&
		    !strncmp(active_cache[pos]->name, prefix, pfxlen))
			die("subdirectory '%s' already exists.", prefix);
		pos = cache_name_pos(prefix, pfxlen-1);
		if (0 <= pos)
			die("file '%.*s' already exists.", pfxlen-1, prefix);
	}

J
Junio C Hamano 已提交
1001
	if (merge) {
D
Daniel Barkalow 已提交
1002
		if (stage < 2)
1003
			die("just how do you expect me to merge %d trees?", stage-1);
D
Daniel Barkalow 已提交
1004 1005
		switch (stage - 1) {
		case 1:
1006
			fn = prefix ? bind_merge : oneway_merge;
D
Daniel Barkalow 已提交
1007 1008 1009 1010 1011 1012 1013
			break;
		case 2:
			fn = twoway_merge;
			break;
		case 3:
		default:
			fn = threeway_merge;
1014
			cache_tree_free(&active_cache_tree);
D
Daniel Barkalow 已提交
1015
			break;
J
Junio C Hamano 已提交
1016
		}
D
Daniel Barkalow 已提交
1017 1018 1019 1020 1021 1022 1023 1024

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

	unpack_trees(fn);
1025 1026 1027 1028 1029 1030 1031

	/*
	 * When reading only one tree (either the most basic form,
	 * "-m ent" or "--reset ent" form), we can obtain a fully
	 * valid cache-tree because the index must match exactly
	 * what came from the tree.
	 */
J
Junio C Hamano 已提交
1032
	if (trees && trees->item && !prefix && (!merge || (stage == 2))) {
1033
		cache_tree_free(&active_cache_tree);
1034 1035 1036
		prime_cache_tree();
	}

1037
	if (write_cache(newfd, active_cache, active_nr) ||
1038
	    close(newfd) || commit_lock_file(&lock_file))
1039
		die("unable to write new index file");
1040
	return 0;
1041
}