builtin-read-tree.c 20.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
#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

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

D
Daniel Barkalow 已提交
31 32 33 34 35 36 37 38 39 40 41 42
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);

43
static int entcmp(const char *name1, int dir1, const char *name2, int dir2)
D
Daniel Barkalow 已提交
44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
{
	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 已提交
61
	return ret;
62 63
}

D
Daniel Barkalow 已提交
64 65
static int unpack_trees_rec(struct tree_entry_list **posns, int len,
			    const char *base, merge_fn_t fn, int *indpos)
66
{
D
Daniel Barkalow 已提交
67 68 69 70
	int baselen = strlen(base);
	int src_size = len + 1;
	do {
		int i;
71
		const char *first;
D
Daniel Barkalow 已提交
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 114 115
		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;
			}
		}

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

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

142
		subposns = xcalloc(len, sizeof(struct tree_list_entry *));
D
Daniel Barkalow 已提交
143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164

		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) {
165
				struct tree *tree = lookup_tree(posns[i]->sha1);
D
Daniel Barkalow 已提交
166
				any_dirs = 1;
167
				parse_tree(tree);
168
				subposns[i] = create_tree_entry_list(tree);
D
Daniel Barkalow 已提交
169 170 171 172 173 174 175 176 177 178 179 180 181 182
				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;

183
			ce = xcalloc(1, ce_size);
D
Daniel Barkalow 已提交
184 185 186 187 188 189 190 191
			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;

192
			memcpy(ce->sha1, posns[i]->sha1, 20);
D
Daniel Barkalow 已提交
193 194 195 196 197 198 199 200
			src[i + merge] = ce;
			subposns[i] = &df_conflict_list;
			posns[i] = posns[i]->next;
		}
		if (any_files) {
			if (merge) {
				int ret;

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

D
Daniel Barkalow 已提交
241
static void reject_merge(struct cache_entry *ce)
242
{
D
Daniel Barkalow 已提交
243 244
	die("Entry '%s' would be overwritten by merge. Cannot merge.", 
	    ce->name);
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 273 274 275
/* 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 已提交
276 277 278 279 280
static void progress_interval(int signum)
{
	progress_update = 1;
}

281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297
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 已提交
298 299 300 301 302 303 304 305 306
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 已提交
307 308 309 310 311 312 313 314 315 316 317 318 319 320 321
	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");
322
			setup_progress_signal();
J
Junio C Hamano 已提交
323 324 325 326 327
			progress_update = 1;
		}
		cnt = 0;
	}

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

		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 已提交
344 345
		if (!ce->ce_mode) {
			if (update)
346
				unlink_entry(ce->name);
D
Daniel Barkalow 已提交
347 348 349 350 351
			continue;
		}
		if (ce->ce_flags & mask) {
			ce->ce_flags &= ~mask;
			if (update)
352
				checkout_entry(ce, &state, NULL);
D
Daniel Barkalow 已提交
353 354
		}
	}
J
Junio C Hamano 已提交
355 356
	if (total) {
		signal(SIGALRM, SIG_IGN);
357
		fputc('\n', stderr);
J
Junio C Hamano 已提交
358
	}
D
Daniel Barkalow 已提交
359
}
360

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

	if (len) {
		posns = xmalloc(len * sizeof(struct tree_entry_list *));
		for (i = 0; i < len; i++) {
373
			posns[i] = create_tree_entry_list((struct tree *) posn->item);
374 375 376 377
			posn = posn->next;
		}
		if (unpack_trees_rec(posns, len, "", fn, &indpos))
			return -1;
378
	}
D
Daniel Barkalow 已提交
379

L
Linus Torvalds 已提交
380 381 382
	if (trivial_merges_only && nontrivial_merge)
		die("Merge requires file-level merging");

D
Daniel Barkalow 已提交
383 384
	check_updates(active_cache, active_nr);
	return 0;
385 386
}

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


407 408 409 410 411 412 413 414
/*
 * 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;

415
	if (index_only || reset)
416 417
		return;

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

433 434 435 436 437 438
static void invalidate_ce_path(struct cache_entry *ce)
{
	if (ce)
		cache_tree_invalidate_path(active_cache_tree, ce->name);
}

439 440 441 442 443 444 445 446 447 448 449 450 451 452 453
/*
 * 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 已提交
454
static int merged_entry(struct cache_entry *merge, struct cache_entry *old)
455
{
456 457
	merge->ce_flags |= htons(CE_UPDATE);
	if (old) {
458
		/*
459 460 461 462 463
		 * 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.
464
		 */
465 466
		if (same(old, merge)) {
			*merge = *old;
D
Daniel Barkalow 已提交
467
		} else {
468
			verify_uptodate(old);
469
			invalidate_ce_path(old);
470
		}
471
	}
472
	else {
473
		verify_absent(merge->name, "overwritten");
474
		invalidate_ce_path(merge);
475
	}
476

477
	merge->ce_flags &= ~htons(CE_STAGEMASK);
D
Daniel Barkalow 已提交
478
	add_cache_entry(merge, ADD_CACHE_OK_TO_ADD);
479
	return 1;
480 481
}

D
Daniel Barkalow 已提交
482
static int deleted_entry(struct cache_entry *ce, struct cache_entry *old)
483 484 485
{
	if (old)
		verify_uptodate(old);
486 487
	else
		verify_absent(ce->name, "removed");
488
	ce->ce_mode = 0;
D
Daniel Barkalow 已提交
489
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
490
	invalidate_ce_path(ce);
491 492 493
	return 1;
}

D
Daniel Barkalow 已提交
494
static int keep_entry(struct cache_entry *ce)
495
{
D
Daniel Barkalow 已提交
496 497
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
	return 1;
498 499
}

500 501 502 503
#if DBRT_DEBUG
static void show_stage_entry(FILE *o,
			     const char *label, const struct cache_entry *ce)
{
504 505 506 507 508 509 510 511 512
	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);
513 514 515
}
#endif

D
Daniel Barkalow 已提交
516
static int threeway_merge(struct cache_entry **stages)
517
{
D
Daniel Barkalow 已提交
518 519 520
	struct cache_entry *index;
	struct cache_entry *head; 
	struct cache_entry *remote = stages[head_idx + 1];
521
	int count;
D
Daniel Barkalow 已提交
522 523
	int head_match = 0;
	int remote_match = 0;
524
	const char *path = NULL;
525

D
Daniel Barkalow 已提交
526 527 528 529
	int df_conflict_head = 0;
	int df_conflict_remote = 0;

	int any_anc_missing = 0;
J
Junio C Hamano 已提交
530
	int no_anc_exists = 1;
D
Daniel Barkalow 已提交
531 532 533 534 535
	int i;

	for (i = 1; i < head_idx; i++) {
		if (!stages[i])
			any_anc_missing = 1;
536 537 538
		else {
			if (!path)
				path = stages[i]->name;
J
Junio C Hamano 已提交
539
			no_anc_exists = 0;
540
		}
541
	}
D
Daniel Barkalow 已提交
542 543 544 545 546 547 548 549 550 551 552 553 554 555

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

556 557 558 559 560 561 562
	if (!path && index)
		path = index->name;
	if (!path && head)
		path = head->name;
	if (!path && remote)
		path = remote->name;

D
Daniel Barkalow 已提交
563
	/* First, if there's a #16 situation, note that to prevent #13
564
	 * and #14.
D
Daniel Barkalow 已提交
565 566 567 568
	 */
	if (!same(remote, head)) {
		for (i = 1; i < head_idx; i++) {
			if (same(stages[i], head)) {
569
				head_match = i;
D
Daniel Barkalow 已提交
570 571
			}
			if (same(stages[i], remote)) {
572
				remote_match = i;
D
Daniel Barkalow 已提交
573
			}
574 575
		}
	}
D
Daniel Barkalow 已提交
576 577 578 579 580 581 582 583 584 585

	/* 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);
586
	}
587
	/*
D
Daniel Barkalow 已提交
588 589
	 * If we have an entry in the index cache, then we want to
	 * make sure that it matches head.
590
	 */
D
Daniel Barkalow 已提交
591 592
	if (index && !same(index, head)) {
		reject_merge(index);
593
	}
D
Daniel Barkalow 已提交
594 595 596 597 598 599 600 601 602 603 604 605 606 607

	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 已提交
608 609 610 611 612 613 614 615 616 617 618 619
	/* 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) ||
620 621 622
		    (remote_deleted && head && head_match)) {
			if (index)
				return deleted_entry(index, index);
623 624
			else if (path)
				verify_absent(path, "removed");
J
Junio C Hamano 已提交
625
			return 0;
626
		}
J
Junio C Hamano 已提交
627 628 629 630 631 632 633 634
		/*
		 * Added in both, identically.
		 */
		if (no_anc_exists && head && remote && same(head, remote))
			return merged_entry(head, index);

	}

D
Daniel Barkalow 已提交
635 636 637 638 639 640 641
	/* 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);
	}
642 643
	else if (path)
		verify_absent(path, "overwritten");
D
Daniel Barkalow 已提交
644

L
Linus Torvalds 已提交
645 646
	nontrivial_merge = 1;

D
Daniel Barkalow 已提交
647
	/* #2, #3, #4, #6, #7, #9, #11. */
648
	count = 0;
D
Daniel Barkalow 已提交
649 650 651 652 653 654 655 656 657
	if (!head_match || !remote_match) {
		for (i = 1; i < head_idx; i++) {
			if (stages[i]) {
				keep_entry(stages[i]);
				count++;
				break;
			}
		}
	}
658 659 660 661 662 663 664
#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 已提交
665 666
	if (head) { count += keep_entry(head); }
	if (remote) { count += keep_entry(remote); }
667
	return count;
668 669
}

670 671 672
/*
 * Two-way merge.
 *
673 674 675 676 677
 * 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>.
 *
678
 */
D
Daniel Barkalow 已提交
679
static int twoway_merge(struct cache_entry **src)
680
{
681 682
	struct cache_entry *current = src[0];
	struct cache_entry *oldtree = src[1], *newtree = src[2];
683

D
Daniel Barkalow 已提交
684
	if (merge_size != 2)
685
		return error("Cannot do a twoway merge of %d trees",
D
Daniel Barkalow 已提交
686
			     merge_size);
687

688 689 690 691 692 693 694 695 696
	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 已提交
697
			return keep_entry(current);
698 699 700
		}
		else if (oldtree && !newtree && same(current, oldtree)) {
			/* 10 or 11 */
D
Daniel Barkalow 已提交
701
			return deleted_entry(oldtree, current);
702 703 704 705
		}
		else if (oldtree && newtree &&
			 same(current, oldtree) && !same(current, newtree)) {
			/* 20 or 21 */
D
Daniel Barkalow 已提交
706
			return merged_entry(newtree, current);
707
		}
D
Daniel Barkalow 已提交
708
		else {
709
			/* all other failures */
D
Daniel Barkalow 已提交
710 711 712 713 714 715
			if (oldtree)
				reject_merge(oldtree);
			if (current)
				reject_merge(current);
			if (newtree)
				reject_merge(newtree);
716
			return -1;
D
Daniel Barkalow 已提交
717
		}
718
	}
719
	else if (newtree)
D
Daniel Barkalow 已提交
720
		return merged_entry(newtree, current);
721
	else
D
Daniel Barkalow 已提交
722
		return deleted_entry(oldtree, current);
J
Junio C Hamano 已提交
723 724
}

725 726 727 728 729 730
/*
 * One-way merge.
 *
 * The rule is:
 * - take the stat information from stage0, take the data from stage1
 */
D
Daniel Barkalow 已提交
731
static int oneway_merge(struct cache_entry **src)
732
{
733 734
	struct cache_entry *old = src[0];
	struct cache_entry *a = src[1];
735

D
Daniel Barkalow 已提交
736
	if (merge_size != 1)
737
		return error("Cannot do a oneway merge of %d trees",
D
Daniel Barkalow 已提交
738
			     merge_size);
739

740
	if (!a)
741
		return deleted_entry(old, old);
742
	if (old && same(old, a)) {
L
Linus Torvalds 已提交
743 744 745 746 747 748
		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 已提交
749
		return keep_entry(old);
750
	}
751
	return merged_entry(a, old);
752 753
}

754 755 756 757 758 759 760 761 762 763 764 765
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++;
766
			invalidate_ce_path(ce);
767 768 769 770 771 772 773 774 775 776
			continue;
		}
		if (deleted)
			*dst = ce;
		dst++;
	}
	active_nr -= deleted;
	return deleted;
}

777 778
static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree)
{
779
	struct tree_desc desc;
780
	int cnt;
781

782
	memcpy(it->sha1, tree->object.sha1, 20);
783 784 785 786 787 788 789 790 791 792 793
	desc.buf = tree->buffer;
	desc.size = tree->size;
	cnt = 0;
	while (desc.size) {
		unsigned mode;
		const char *name;
		const unsigned char *sha1;

		sha1 = tree_entry_extract(&desc, &name, &mode);
		update_tree_entry(&desc);
		if (!S_ISDIR(mode))
794 795 796
			cnt++;
		else {
			struct cache_tree_sub *sub;
797
			struct tree *subtree = lookup_tree(sha1);
798 799
			if (!subtree->object.parsed)
				parse_tree(subtree);
800
			sub = cache_tree_sub(it, name);
801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818
			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);

}

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

821 822
static struct cache_file cache_file;

P
Peter Eriksen 已提交
823
int cmd_read_tree(int argc, const char **argv, char **envp)
824
{
L
Linus Torvalds 已提交
825
	int i, newfd, stage = 0;
826
	unsigned char sha1[20];
D
Daniel Barkalow 已提交
827
	merge_fn_t fn = NULL;
828

829
	setup_git_directory();
830
	git_config(git_default_config);
831

832
	newfd = hold_index_file_for_update(&cache_file, get_index_file());
833
	if (newfd < 0)
834
		die("unable to create new cachefile");
835

836 837
	git_config(git_default_config);

838
	merge = 0;
839
	reset = 0;
840 841 842
	for (i = 1; i < argc; i++) {
		const char *arg = argv[i];

843 844 845
		/* "-u" means "update", meaning that a merge will update
		 * the working tree.
		 */
846 847 848 849 850
		if (!strcmp(arg, "-u")) {
			update = 1;
			continue;
		}

J
Junio C Hamano 已提交
851 852 853 854 855
		if (!strcmp(arg, "-v")) {
			verbose_update = 1;
			continue;
		}

856 857 858 859 860 861 862 863
		/* "-i" means "index only", meaning that a merge will
		 * not even look at the working tree.
		 */
		if (!strcmp(arg, "-i")) {
			index_only = 1;
			continue;
		}

864 865
		/* This differs from "-m" in that we'll silently ignore unmerged entries */
		if (!strcmp(arg, "--reset")) {
D
Daniel Barkalow 已提交
866
			if (stage || merge)
867 868 869 870 871
				usage(read_tree_usage);
			reset = 1;
			merge = 1;
			stage = 1;
			read_cache_unmerged();
872
			continue;
873 874
		}

L
Linus Torvalds 已提交
875 876 877 878 879
		if (!strcmp(arg, "--trivial")) {
			trivial_merges_only = 1;
			continue;
		}

J
Junio C Hamano 已提交
880 881 882 883 884
		if (!strcmp(arg, "--aggressive")) {
			aggressive = 1;
			continue;
		}

885
		/* "-m" stands for "merge", meaning we start in stage 1 */
886
		if (!strcmp(arg, "-m")) {
D
Daniel Barkalow 已提交
887
			if (stage || merge)
888 889 890
				usage(read_tree_usage);
			if (read_cache_unmerged())
				die("you need to resolve your current index first");
891
			stage = 1;
892
			merge = 1;
893 894
			continue;
		}
J
Junio C Hamano 已提交
895

896 897 898 899
		/* using -u and -i at the same time makes no sense */
		if (1 < index_only + update)
			usage(read_tree_usage);

900 901
		if (get_sha1(arg, sha1))
			die("Not a valid object name %s", arg);
D
Daniel Barkalow 已提交
902
		if (list_tree(sha1) < 0)
903
			die("failed to unpack tree object %s", arg);
904
		stage++;
905
	}
906
	if ((update||index_only) && !merge)
907
		usage(read_tree_usage);
J
Junio C Hamano 已提交
908 909

	if (merge) {
D
Daniel Barkalow 已提交
910
		if (stage < 2)
911
			die("just how do you expect me to merge %d trees?", stage-1);
D
Daniel Barkalow 已提交
912 913 914 915 916 917 918 919 920 921
		switch (stage - 1) {
		case 1:
			fn = oneway_merge;
			break;
		case 2:
			fn = twoway_merge;
			break;
		case 3:
		default:
			fn = threeway_merge;
922
			cache_tree_free(&active_cache_tree);
D
Daniel Barkalow 已提交
923
			break;
J
Junio C Hamano 已提交
924
		}
D
Daniel Barkalow 已提交
925 926 927 928 929 930 931 932

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

	unpack_trees(fn);
933 934 935 936 937 938 939

	/*
	 * 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.
	 */
940 941
	if (trees && trees->item && (!merge || (stage == 2))) {
		cache_tree_free(&active_cache_tree);
942 943 944
		prime_cache_tree();
	}

945 946
	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_index_file(&cache_file))
947
		die("unable to write new index file");
948
	return 0;
949
}