builtin-read-tree.c 21.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
static struct object_list *trees = NULL;

33 34 35 36 37 38 39 40 41 42 43
static struct cache_entry df_conflict_entry = {
};

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 46 47 48 49 50 51 52
};

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

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

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

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

63
	while (tree_entry(&desc, &one)) {
64 65 66
		struct tree_entry_list *entry;

		entry = xmalloc(sizeof(struct tree_entry_list));
67 68 69 70 71 72
		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;
73 74 75 76 77 78 79 80
		entry->next = NULL;

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

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

D
Daniel Barkalow 已提交
102 103
static int unpack_trees_rec(struct tree_entry_list **posns, int len,
			    const char *base, merge_fn_t fn, int *indpos)
104
{
D
Daniel Barkalow 已提交
105 106 107 108
	int baselen = strlen(base);
	int src_size = len + 1;
	do {
		int i;
109
		const char *first;
D
Daniel Barkalow 已提交
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 151 152 153
		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;
			}
		}

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

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

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

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

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

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

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

D
Daniel Barkalow 已提交
279
static void reject_merge(struct cache_entry *ce)
280
{
D
Daniel Barkalow 已提交
281 282
	die("Entry '%s' would be overwritten by merge. Cannot merge.", 
	    ce->name);
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 311 312 313
/* 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 已提交
314 315 316 317 318
static void progress_interval(int signum)
{
	progress_update = 1;
}

319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335
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 已提交
336 337 338 339 340 341 342 343 344
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 已提交
345 346 347 348 349 350 351 352 353 354 355 356 357 358 359
	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");
360
			setup_progress_signal();
J
Junio C Hamano 已提交
361 362 363 364 365
			progress_update = 1;
		}
		cnt = 0;
	}

D
Daniel Barkalow 已提交
366 367
	while (nr--) {
		struct cache_entry *ce = *src++;
J
Junio C Hamano 已提交
368 369 370 371 372 373 374 375 376 377 378 379 380 381

		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 已提交
382 383
		if (!ce->ce_mode) {
			if (update)
384
				unlink_entry(ce->name);
D
Daniel Barkalow 已提交
385 386 387 388 389
			continue;
		}
		if (ce->ce_flags & mask) {
			ce->ce_flags &= ~mask;
			if (update)
390
				checkout_entry(ce, &state, NULL);
D
Daniel Barkalow 已提交
391 392
		}
	}
J
Junio C Hamano 已提交
393 394
	if (total) {
		signal(SIGALRM, SIG_IGN);
395
		fputc('\n', stderr);
J
Junio C Hamano 已提交
396
	}
D
Daniel Barkalow 已提交
397
}
398

D
Daniel Barkalow 已提交
399
static int unpack_trees(merge_fn_t fn)
400
{
D
Daniel Barkalow 已提交
401 402
	int indpos = 0;
	unsigned len = object_list_length(trees);
403
	struct tree_entry_list **posns;
D
Daniel Barkalow 已提交
404 405 406
	int i;
	struct object_list *posn = trees;
	merge_size = len;
407 408 409 410

	if (len) {
		posns = xmalloc(len * sizeof(struct tree_entry_list *));
		for (i = 0; i < len; i++) {
411
			posns[i] = create_tree_entry_list((struct tree *) posn->item);
412 413 414 415
			posn = posn->next;
		}
		if (unpack_trees_rec(posns, len, "", fn, &indpos))
			return -1;
416
	}
D
Daniel Barkalow 已提交
417

L
Linus Torvalds 已提交
418 419 420
	if (trivial_merges_only && nontrivial_merge)
		die("Merge requires file-level merging");

D
Daniel Barkalow 已提交
421 422
	check_updates(active_cache, active_nr);
	return 0;
423 424
}

D
Daniel Barkalow 已提交
425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444
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);
}


445 446 447 448 449 450 451 452
/*
 * 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;

453
	if (index_only || reset)
454 455
		return;

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

471 472 473 474 475 476
static void invalidate_ce_path(struct cache_entry *ce)
{
	if (ce)
		cache_tree_invalidate_path(active_cache_tree, ce->name);
}

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

515
	merge->ce_flags &= ~htons(CE_STAGEMASK);
D
Daniel Barkalow 已提交
516
	add_cache_entry(merge, ADD_CACHE_OK_TO_ADD);
517
	return 1;
518 519
}

D
Daniel Barkalow 已提交
520
static int deleted_entry(struct cache_entry *ce, struct cache_entry *old)
521 522 523
{
	if (old)
		verify_uptodate(old);
524 525
	else
		verify_absent(ce->name, "removed");
526
	ce->ce_mode = 0;
D
Daniel Barkalow 已提交
527
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
528
	invalidate_ce_path(ce);
529 530 531
	return 1;
}

D
Daniel Barkalow 已提交
532
static int keep_entry(struct cache_entry *ce)
533
{
D
Daniel Barkalow 已提交
534 535
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD);
	return 1;
536 537
}

538 539 540 541
#if DBRT_DEBUG
static void show_stage_entry(FILE *o,
			     const char *label, const struct cache_entry *ce)
{
542 543 544 545 546 547 548 549 550
	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);
551 552 553
}
#endif

D
Daniel Barkalow 已提交
554
static int threeway_merge(struct cache_entry **stages)
555
{
D
Daniel Barkalow 已提交
556 557 558
	struct cache_entry *index;
	struct cache_entry *head; 
	struct cache_entry *remote = stages[head_idx + 1];
559
	int count;
D
Daniel Barkalow 已提交
560 561
	int head_match = 0;
	int remote_match = 0;
562
	const char *path = NULL;
563

D
Daniel Barkalow 已提交
564 565 566 567
	int df_conflict_head = 0;
	int df_conflict_remote = 0;

	int any_anc_missing = 0;
J
Junio C Hamano 已提交
568
	int no_anc_exists = 1;
D
Daniel Barkalow 已提交
569 570 571 572 573
	int i;

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

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

594 595 596 597 598 599 600
	if (!path && index)
		path = index->name;
	if (!path && head)
		path = head->name;
	if (!path && remote)
		path = remote->name;

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

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

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

	}

D
Daniel Barkalow 已提交
673 674 675 676 677 678 679
	/* 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);
	}
680 681
	else if (path)
		verify_absent(path, "overwritten");
D
Daniel Barkalow 已提交
682

L
Linus Torvalds 已提交
683 684
	nontrivial_merge = 1;

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

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

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

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

763 764 765 766 767 768
/*
 * One-way merge.
 *
 * The rule is:
 * - take the stat information from stage0, take the data from stage1
 */
D
Daniel Barkalow 已提交
769
static int oneway_merge(struct cache_entry **src)
770
{
771 772
	struct cache_entry *old = src[0];
	struct cache_entry *a = src[1];
773

D
Daniel Barkalow 已提交
774
	if (merge_size != 1)
775
		return error("Cannot do a oneway merge of %d trees",
D
Daniel Barkalow 已提交
776
			     merge_size);
777

778
	if (!a)
779
		return deleted_entry(old, old);
780
	if (old && same(old, a)) {
L
Linus Torvalds 已提交
781 782 783 784 785 786
		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 已提交
787
		return keep_entry(old);
788
	}
789
	return merged_entry(a, old);
790 791
}

792 793
static int read_cache_unmerged(void)
{
794
	int i;
795
	struct cache_entry **dst;
796
	struct cache_entry *last = NULL;
797 798 799 800 801 802

	read_cache();
	dst = active_cache;
	for (i = 0; i < active_nr; i++) {
		struct cache_entry *ce = active_cache[i];
		if (ce_stage(ce)) {
803 804
			if (last && !strcmp(ce->name, last->name))
				continue;
805
			invalidate_ce_path(ce);
806 807 808
			last = ce;
			ce->ce_mode = 0;
			ce->ce_flags &= ~htons(CE_STAGEMASK);
809
		}
810
		*dst++ = ce;
811
	}
812 813
	active_nr = dst - active_cache;
	return !!last;
814 815
}

816 817
static void prime_cache_tree_rec(struct cache_tree *it, struct tree *tree)
{
818
	struct tree_desc desc;
819
	struct name_entry entry;
820
	int cnt;
821

822
	memcpy(it->sha1, tree->object.sha1, 20);
823 824 825
	desc.buf = tree->buffer;
	desc.size = tree->size;
	cnt = 0;
826 827
	while (tree_entry(&desc, &entry)) {
		if (!S_ISDIR(entry.mode))
828 829 830
			cnt++;
		else {
			struct cache_tree_sub *sub;
831
			struct tree *subtree = lookup_tree(entry.sha1);
832 833
			if (!subtree->object.parsed)
				parse_tree(subtree);
834
			sub = cache_tree_sub(it, entry.path);
835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852
			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);

}

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

855 856
static struct cache_file cache_file;

P
Peter Eriksen 已提交
857
int cmd_read_tree(int argc, const char **argv, char **envp)
858
{
L
Linus Torvalds 已提交
859
	int i, newfd, stage = 0;
860
	unsigned char sha1[20];
D
Daniel Barkalow 已提交
861
	merge_fn_t fn = NULL;
862

863
	setup_git_directory();
864
	git_config(git_default_config);
865

866
	newfd = hold_index_file_for_update(&cache_file, get_index_file());
867
	if (newfd < 0)
868
		die("unable to create new cachefile");
869

870 871
	git_config(git_default_config);

872
	merge = 0;
873
	reset = 0;
874 875 876
	for (i = 1; i < argc; i++) {
		const char *arg = argv[i];

877 878 879
		/* "-u" means "update", meaning that a merge will update
		 * the working tree.
		 */
880 881 882 883 884
		if (!strcmp(arg, "-u")) {
			update = 1;
			continue;
		}

J
Junio C Hamano 已提交
885 886 887 888 889
		if (!strcmp(arg, "-v")) {
			verbose_update = 1;
			continue;
		}

890 891 892 893 894 895 896 897
		/* "-i" means "index only", meaning that a merge will
		 * not even look at the working tree.
		 */
		if (!strcmp(arg, "-i")) {
			index_only = 1;
			continue;
		}

898 899 900 901
		/* This differs from "-m" in that we'll silently ignore
		 * unmerged entries and overwrite working tree files that
		 * correspond to them.
		 */
902
		if (!strcmp(arg, "--reset")) {
D
Daniel Barkalow 已提交
903
			if (stage || merge)
904 905 906 907 908
				usage(read_tree_usage);
			reset = 1;
			merge = 1;
			stage = 1;
			read_cache_unmerged();
909
			continue;
910 911
		}

L
Linus Torvalds 已提交
912 913 914 915 916
		if (!strcmp(arg, "--trivial")) {
			trivial_merges_only = 1;
			continue;
		}

J
Junio C Hamano 已提交
917 918 919 920 921
		if (!strcmp(arg, "--aggressive")) {
			aggressive = 1;
			continue;
		}

922
		/* "-m" stands for "merge", meaning we start in stage 1 */
923
		if (!strcmp(arg, "-m")) {
D
Daniel Barkalow 已提交
924
			if (stage || merge)
925 926 927
				usage(read_tree_usage);
			if (read_cache_unmerged())
				die("you need to resolve your current index first");
928
			stage = 1;
929
			merge = 1;
930 931
			continue;
		}
J
Junio C Hamano 已提交
932

933 934 935 936
		/* using -u and -i at the same time makes no sense */
		if (1 < index_only + update)
			usage(read_tree_usage);

937 938
		if (get_sha1(arg, sha1))
			die("Not a valid object name %s", arg);
D
Daniel Barkalow 已提交
939
		if (list_tree(sha1) < 0)
940
			die("failed to unpack tree object %s", arg);
941
		stage++;
942
	}
943
	if ((update||index_only) && !merge)
944
		usage(read_tree_usage);
J
Junio C Hamano 已提交
945 946

	if (merge) {
D
Daniel Barkalow 已提交
947
		if (stage < 2)
948
			die("just how do you expect me to merge %d trees?", stage-1);
D
Daniel Barkalow 已提交
949 950 951 952 953 954 955 956 957 958
		switch (stage - 1) {
		case 1:
			fn = oneway_merge;
			break;
		case 2:
			fn = twoway_merge;
			break;
		case 3:
		default:
			fn = threeway_merge;
959
			cache_tree_free(&active_cache_tree);
D
Daniel Barkalow 已提交
960
			break;
J
Junio C Hamano 已提交
961
		}
D
Daniel Barkalow 已提交
962 963 964 965 966 967 968 969

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

	unpack_trees(fn);
970 971 972 973 974 975 976

	/*
	 * 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.
	 */
977 978
	if (trees && trees->item && (!merge || (stage == 2))) {
		cache_tree_free(&active_cache_tree);
979 980 981
		prime_cache_tree();
	}

982 983
	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_index_file(&cache_file))
984
		die("unable to write new index file");
985
	return 0;
986
}