checkout.c 31.5 KB
Newer Older
D
Daniel Barkalow 已提交
1 2 3 4 5 6 7
#include "cache.h"
#include "builtin.h"
#include "parse-options.h"
#include "refs.h"
#include "commit.h"
#include "tree.h"
#include "tree-walk.h"
8
#include "cache-tree.h"
D
Daniel Barkalow 已提交
9 10 11 12 13 14 15
#include "unpack-trees.h"
#include "dir.h"
#include "run-command.h"
#include "merge-recursive.h"
#include "branch.h"
#include "diff.h"
#include "revision.h"
16
#include "remote.h"
17 18 19
#include "blob.h"
#include "xdiff-interface.h"
#include "ll-merge.h"
20
#include "resolve-undo.h"
21
#include "submodule.h"
J
Jeff King 已提交
22
#include "argv-array.h"
D
Daniel Barkalow 已提交
23 24

static const char * const checkout_usage[] = {
25 26
	N_("git checkout [options] <branch>"),
	N_("git checkout [options] [<branch>] -- <file>..."),
D
Daniel Barkalow 已提交
27 28 29
	NULL,
};

30
struct checkout_opts {
31
	int patch_mode;
32 33 34
	int quiet;
	int merge;
	int force;
35
	int force_detach;
36
	int writeout_stage;
37
	int overwrite_ignore;
38 39

	const char *new_branch;
T
Tay Ray Chuan 已提交
40
	const char *new_branch_force;
41
	const char *new_orphan_branch;
42 43
	int new_branch_log;
	enum branch_track track;
44
	struct diff_options diff_options;
45 46 47 48 49

	int branch_exists;
	const char *prefix;
	const char **pathspec;
	struct tree *source_tree;
50 51
};

D
Daniel Barkalow 已提交
52 53 54
static int post_checkout_hook(struct commit *old, struct commit *new,
			      int changed)
{
55 56 57 58
	return run_hook(NULL, "post-checkout",
			sha1_to_hex(old ? old->object.sha1 : null_sha1),
			sha1_to_hex(new ? new->object.sha1 : null_sha1),
			changed ? "1" : "0", NULL);
59 60
	/* "new" can be NULL when checking out from the index before
	   a commit exists. */
61

D
Daniel Barkalow 已提交
62 63 64
}

static int update_some(const unsigned char *sha1, const char *base, int baselen,
65
		const char *pathname, unsigned mode, int stage, void *context)
D
Daniel Barkalow 已提交
66 67 68 69 70 71 72 73 74 75 76 77
{
	int len;
	struct cache_entry *ce;

	if (S_ISDIR(mode))
		return READ_TREE_RECURSIVE;

	len = baselen + strlen(pathname);
	ce = xcalloc(1, cache_entry_size(len));
	hashcpy(ce->sha1, sha1);
	memcpy(ce->name, base, baselen);
	memcpy(ce->name + baselen, pathname, len - baselen);
78 79
	ce->ce_flags = create_ce_flags(0) | CE_UPDATE;
	ce->ce_namelen = len;
D
Daniel Barkalow 已提交
80 81 82 83 84 85 86
	ce->ce_mode = create_ce_mode(mode);
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
	return 0;
}

static int read_tree_some(struct tree *tree, const char **pathspec)
{
87 88 89 90
	struct pathspec ps;
	init_pathspec(&ps, pathspec);
	read_tree_recursive(tree, "", 0, 0, &ps, update_some, NULL);
	free_pathspec(&ps);
D
Daniel Barkalow 已提交
91 92 93 94 95 96 97 98

	/* update the index with the given tree's info
	 * for all args, expanding wildcards, and exit
	 * with any non-zero return code.
	 */
	return 0;
}

99 100 101 102 103 104 105 106
static int skip_same_name(struct cache_entry *ce, int pos)
{
	while (++pos < active_nr &&
	       !strcmp(active_cache[pos]->name, ce->name))
		; /* skip */
	return pos;
}

107 108 109 110 111 112 113 114
static int check_stage(int stage, struct cache_entry *ce, int pos)
{
	while (pos < active_nr &&
	       !strcmp(active_cache[pos]->name, ce->name)) {
		if (ce_stage(active_cache[pos]) == stage)
			return 0;
		pos++;
	}
115 116 117 118
	if (stage == 2)
		return error(_("path '%s' does not have our version"), ce->name);
	else
		return error(_("path '%s' does not have their version"), ce->name);
119 120
}

121
static int check_stages(unsigned stages, struct cache_entry *ce, int pos)
122
{
123 124 125 126 127 128 129 130 131 132 133 134 135
	unsigned seen = 0;
	const char *name = ce->name;

	while (pos < active_nr) {
		ce = active_cache[pos];
		if (strcmp(name, ce->name))
			break;
		seen |= (1 << ce_stage(ce));
		pos++;
	}
	if ((stages & seen) != stages)
		return error(_("path '%s' does not have all necessary versions"),
			     name);
136 137 138
	return 0;
}

139 140 141 142 143 144 145 146 147
static int checkout_stage(int stage, struct cache_entry *ce, int pos,
			  struct checkout *state)
{
	while (pos < active_nr &&
	       !strcmp(active_cache[pos]->name, ce->name)) {
		if (ce_stage(active_cache[pos]) == stage)
			return checkout_entry(active_cache[pos], state, NULL);
		pos++;
	}
148 149 150 151
	if (stage == 2)
		return error(_("path '%s' does not have our version"), ce->name);
	else
		return error(_("path '%s' does not have their version"), ce->name);
152
}
153

154 155 156 157 158 159 160 161
static int checkout_merged(int pos, struct checkout *state)
{
	struct cache_entry *ce = active_cache[pos];
	const char *path = ce->name;
	mmfile_t ancestor, ours, theirs;
	int status;
	unsigned char sha1[20];
	mmbuffer_t result_buf;
162
	unsigned char threeway[3][20];
163
	unsigned mode = 0;
164

165 166 167 168 169 170 171 172 173 174 175 176 177 178
	memset(threeway, 0, sizeof(threeway));
	while (pos < active_nr) {
		int stage;
		stage = ce_stage(ce);
		if (!stage || strcmp(path, ce->name))
			break;
		hashcpy(threeway[stage - 1], ce->sha1);
		if (stage == 2)
			mode = create_ce_mode(ce->ce_mode);
		pos++;
		ce = active_cache[pos];
	}
	if (is_null_sha1(threeway[1]) || is_null_sha1(threeway[2]))
		return error(_("path '%s' does not have necessary versions"), path);
179

180 181 182
	read_mmblob(&ancestor, threeway[0]);
	read_mmblob(&ours, threeway[1]);
	read_mmblob(&theirs, threeway[2]);
183

184 185 186 187
	/*
	 * NEEDSWORK: re-create conflicts from merges with
	 * merge.renormalize set, too
	 */
188
	status = ll_merge(&result_buf, path, &ancestor, "base",
189
			  &ours, "ours", &theirs, "theirs", NULL);
190 191 192 193 194
	free(ancestor.ptr);
	free(ours.ptr);
	free(theirs.ptr);
	if (status < 0 || !result_buf.ptr) {
		free(result_buf.ptr);
195
		return error(_("path '%s': cannot merge"), path);
196 197 198 199 200
	}

	/*
	 * NEEDSWORK:
	 * There is absolutely no reason to write this as a blob object
M
Mike Ralphson 已提交
201
	 * and create a phony cache entry just to leak.  This hack is
202 203 204 205 206 207 208 209 210 211
	 * primarily to get to the write_entry() machinery that massages
	 * the contents to work-tree format and writes out which only
	 * allows it for a cache entry.  The code in write_entry() needs
	 * to be refactored to allow us to feed a <buffer, size, mode>
	 * instead of a cache entry.  Such a refactoring would help
	 * merge_recursive as well (it also writes the merge result to the
	 * object database even when it may contain conflicts).
	 */
	if (write_sha1_file(result_buf.ptr, result_buf.size,
			    blob_type, sha1))
212
		die(_("Unable to add merge result for '%s'"), path);
213
	ce = make_cache_entry(mode, sha1, path, 2, 0);
214
	if (!ce)
215
		die(_("make_cache_entry failed for path '%s'"), path);
216 217 218
	status = checkout_entry(ce, state, NULL);
	return status;
}
219

220 221
static int checkout_paths(const struct checkout_opts *opts,
			  const char *revision)
D
Daniel Barkalow 已提交
222 223 224 225 226 227 228
{
	int pos;
	struct checkout state;
	static char *ps_matched;
	unsigned char rev[20];
	int flag;
	struct commit *head;
229
	int errs = 0;
230
	int stage = opts->writeout_stage;
231
	int merge = opts->merge;
232
	int newfd;
233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261
	struct lock_file *lock_file;

	if (opts->track != BRANCH_TRACK_UNSPECIFIED)
		die(_("'%s' cannot be used with updating paths"), "--track");

	if (opts->new_branch_log)
		die(_("'%s' cannot be used with updating paths"), "-l");

	if (opts->force && opts->patch_mode)
		die(_("'%s' cannot be used with updating paths"), "-f");

	if (opts->force_detach)
		die(_("'%s' cannot be used with updating paths"), "--detach");

	if (opts->merge && opts->patch_mode)
		die(_("'%s' cannot be used with %s"), "--merge", "--patch");

	if (opts->force && opts->merge)
		die(_("'%s' cannot be used with %s"), "-f", "-m");

	if (opts->new_branch)
		die(_("Cannot update paths and switch to branch '%s' at the same time."),
		    opts->new_branch);

	if (opts->patch_mode)
		return run_add_interactive(revision, "--patch=checkout",
					   opts->pathspec);

	lock_file = xcalloc(1, sizeof(struct lock_file));
262 263

	newfd = hold_locked_index(lock_file, 1);
264
	if (read_cache_preload(opts->pathspec) < 0)
265
		return error(_("corrupt index file"));
266

267 268
	if (opts->source_tree)
		read_tree_some(opts->source_tree, opts->pathspec);
269

270
	for (pos = 0; opts->pathspec[pos]; pos++)
D
Daniel Barkalow 已提交
271 272 273 274 275
		;
	ps_matched = xcalloc(1, pos);

	for (pos = 0; pos < active_nr; pos++) {
		struct cache_entry *ce = active_cache[pos];
276
		if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
277
			continue;
278
		match_pathspec(opts->pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
D
Daniel Barkalow 已提交
279 280
	}

281
	if (report_path_error(ps_matched, opts->pathspec, opts->prefix))
D
Daniel Barkalow 已提交
282 283
		return 1;

284 285
	/* "checkout -m path" to recreate conflicted state */
	if (opts->merge)
286
		unmerge_cache(opts->pathspec);
287

288 289 290
	/* Any unmerged paths? */
	for (pos = 0; pos < active_nr; pos++) {
		struct cache_entry *ce = active_cache[pos];
291
		if (match_pathspec(opts->pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
292 293
			if (!ce_stage(ce))
				continue;
294
			if (opts->force) {
295
				warning(_("path '%s' is unmerged"), ce->name);
296 297
			} else if (stage) {
				errs |= check_stage(stage, ce, pos);
298
			} else if (opts->merge) {
299
				errs |= check_stages((1<<2) | (1<<3), ce, pos);
300 301
			} else {
				errs = 1;
302
				error(_("path '%s' is unmerged"), ce->name);
303
			}
304 305 306 307 308 309
			pos = skip_same_name(ce, pos) - 1;
		}
	}
	if (errs)
		return 1;

310
	/* Now we are committed to check them out */
D
Daniel Barkalow 已提交
311 312 313 314 315
	memset(&state, 0, sizeof(state));
	state.force = 1;
	state.refresh_cache = 1;
	for (pos = 0; pos < active_nr; pos++) {
		struct cache_entry *ce = active_cache[pos];
316
		if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
317
			continue;
318
		if (match_pathspec(opts->pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
319 320 321 322
			if (!ce_stage(ce)) {
				errs |= checkout_entry(ce, &state, NULL);
				continue;
			}
323 324
			if (stage)
				errs |= checkout_stage(stage, ce, pos, &state);
325 326
			else if (merge)
				errs |= checkout_merged(pos, &state);
327
			pos = skip_same_name(ce, pos) - 1;
D
Daniel Barkalow 已提交
328 329 330
		}
	}

331 332
	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_locked_index(lock_file))
333
		die(_("unable to write new index file"));
334

335
	read_ref_full("HEAD", rev, 0, &flag);
D
Daniel Barkalow 已提交
336 337
	head = lookup_commit_reference_gently(rev, 1);

338 339
	errs |= post_checkout_hook(head, head, 0);
	return errs;
D
Daniel Barkalow 已提交
340 341
}

342 343
static void show_local_changes(struct object *head,
			       const struct diff_options *opts)
D
Daniel Barkalow 已提交
344 345 346 347
{
	struct rev_info rev;
	/* I think we want full paths, even if we're in a subdirectory. */
	init_revisions(&rev, NULL);
348
	rev.diffopt.flags = opts->flags;
D
Daniel Barkalow 已提交
349
	rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
T
Thomas Rast 已提交
350
	diff_setup_done(&rev.diffopt);
D
Daniel Barkalow 已提交
351 352 353 354
	add_pending_object(&rev, head, NULL);
	run_diff_index(&rev, 0);
}

355
static void describe_detached_head(const char *msg, struct commit *commit)
D
Daniel Barkalow 已提交
356
{
357
	struct strbuf sb = STRBUF_INIT;
D
Daniel Barkalow 已提交
358
	parse_commit(commit);
359
	pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
D
Daniel Barkalow 已提交
360 361 362 363 364
	fprintf(stderr, "%s %s... %s\n", msg,
		find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
	strbuf_release(&sb);
}

365 366
static int reset_tree(struct tree *tree, const struct checkout_opts *o,
		      int worktree, int *writeout_error)
D
Daniel Barkalow 已提交
367 368 369
{
	struct unpack_trees_options opts;
	struct tree_desc tree_desc;
370

D
Daniel Barkalow 已提交
371 372
	memset(&opts, 0, sizeof(opts));
	opts.head_idx = -1;
373 374
	opts.update = worktree;
	opts.skip_unmerged = !worktree;
D
Daniel Barkalow 已提交
375 376 377
	opts.reset = 1;
	opts.merge = 1;
	opts.fn = oneway_merge;
378
	opts.verbose_update = !o->quiet && isatty(2);
379 380
	opts.src_index = &the_index;
	opts.dst_index = &the_index;
D
Daniel Barkalow 已提交
381 382
	parse_tree(tree);
	init_tree_desc(&tree_desc, tree->buffer, tree->size);
383 384
	switch (unpack_trees(1, &tree_desc, &opts)) {
	case -2:
385
		*writeout_error = 1;
386 387 388 389 390 391 392 393 394
		/*
		 * We return 0 nevertheless, as the index is all right
		 * and more importantly we have made best efforts to
		 * update paths in the work tree, and we cannot revert
		 * them.
		 */
	case 0:
		return 0;
	default:
395
		return 128;
396
	}
D
Daniel Barkalow 已提交
397 398 399 400 401 402 403 404 405 406
}

struct branch_info {
	const char *name; /* The short name used */
	const char *path; /* The full name of a real branch */
	struct commit *commit; /* The named commit */
};

static void setup_branch_path(struct branch_info *branch)
{
407
	struct strbuf buf = STRBUF_INIT;
408

409 410
	strbuf_branchname(&buf, branch->name);
	if (strcmp(buf.buf, branch->name))
411
		branch->name = xstrdup(buf.buf);
412
	strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
D
Daniel Barkalow 已提交
413 414 415
	branch->path = strbuf_detach(&buf, NULL);
}

416 417 418 419
static int merge_working_tree(const struct checkout_opts *opts,
			      struct branch_info *old,
			      struct branch_info *new,
			      int *writeout_error)
D
Daniel Barkalow 已提交
420 421 422 423
{
	int ret;
	struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
	int newfd = hold_locked_index(lock_file, 1);
424

425
	if (read_cache_preload(NULL) < 0)
426
		return error(_("corrupt index file"));
D
Daniel Barkalow 已提交
427

428
	resolve_undo_clear();
D
Daniel Barkalow 已提交
429
	if (opts->force) {
430
		ret = reset_tree(new->commit->tree, opts, 1, writeout_error);
D
Daniel Barkalow 已提交
431 432 433 434 435 436
		if (ret)
			return ret;
	} else {
		struct tree_desc trees[2];
		struct tree *tree;
		struct unpack_trees_options topts;
437

D
Daniel Barkalow 已提交
438 439
		memset(&topts, 0, sizeof(topts));
		topts.head_idx = -1;
440 441
		topts.src_index = &the_index;
		topts.dst_index = &the_index;
D
Daniel Barkalow 已提交
442

443
		setup_unpack_trees_porcelain(&topts, "checkout");
444

D
Daniel Barkalow 已提交
445 446 447
		refresh_cache(REFRESH_QUIET);

		if (unmerged_cache()) {
448
			error(_("you need to resolve your current index first"));
449
			return 1;
D
Daniel Barkalow 已提交
450
		}
451 452

		/* 2-way merge to the new branch */
453
		topts.initial_checkout = is_cache_unborn();
454 455
		topts.update = 1;
		topts.merge = 1;
456
		topts.gently = opts->merge && old->commit;
457
		topts.verbose_update = !opts->quiet && isatty(2);
458
		topts.fn = twoway_merge;
459 460 461 462 463
		if (opts->overwrite_ignore) {
			topts.dir = xcalloc(1, sizeof(*topts.dir));
			topts.dir->flags |= DIR_SHOW_IGNORED;
			setup_standard_excludes(topts.dir);
		}
464 465
		tree = parse_tree_indirect(old->commit ?
					   old->commit->object.sha1 :
466
					   EMPTY_TREE_SHA1_BIN);
467 468 469 470
		init_tree_desc(&trees[0], tree->buffer, tree->size);
		tree = parse_tree_indirect(new->commit->object.sha1);
		init_tree_desc(&trees[1], tree->buffer, tree->size);

471
		ret = unpack_trees(2, trees, &topts);
472
		if (ret == -1) {
D
Daniel Barkalow 已提交
473 474 475 476 477 478 479
			/*
			 * Unpack couldn't do a trivial merge; either
			 * give up or do a real merge, depending on
			 * whether the merge flag was used.
			 */
			struct tree *result;
			struct tree *work;
480
			struct merge_options o;
D
Daniel Barkalow 已提交
481 482
			if (!opts->merge)
				return 1;
483 484 485 486 487 488 489

			/*
			 * Without old->commit, the below is the same as
			 * the two-tree unpack we already tried and failed.
			 */
			if (!old->commit)
				return 1;
D
Daniel Barkalow 已提交
490 491 492 493 494 495 496 497 498 499 500 501 502 503

			/* Do more real merge */

			/*
			 * We update the index fully, then write the
			 * tree from the index, then merge the new
			 * branch with the current tree, with the old
			 * branch as the base. Then we reset the index
			 * (but not the working tree) to the new
			 * branch, leaving the working tree as the
			 * merged version, but skipping unmerged
			 * entries in the index.
			 */

504
			add_files_to_cache(NULL, NULL, 0);
J
Jonathan Nieder 已提交
505 506 507 508 509 510 511
			/*
			 * NEEDSWORK: carrying over local changes
			 * when branches have different end-of-line
			 * normalization (or clean+smudge rules) is
			 * a pain; plumb in an option to set
			 * o.renormalize?
			 */
512 513 514
			init_merge_options(&o);
			o.verbosity = 0;
			work = write_tree_from_memory(&o);
D
Daniel Barkalow 已提交
515

516 517
			ret = reset_tree(new->commit->tree, opts, 1,
					 writeout_error);
D
Daniel Barkalow 已提交
518 519
			if (ret)
				return ret;
520
			o.ancestor = old->name;
521 522 523 524
			o.branch1 = new->name;
			o.branch2 = "local";
			merge_trees(&o, new->commit->tree, work,
				old->commit->tree, &result);
525 526
			ret = reset_tree(new->commit->tree, opts, 0,
					 writeout_error);
527 528
			if (ret)
				return ret;
D
Daniel Barkalow 已提交
529 530 531 532 533
		}
	}

	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_locked_index(lock_file))
534
		die(_("unable to write new index file"));
D
Daniel Barkalow 已提交
535

536
	if (!opts->force && !opts->quiet)
537
		show_local_changes(&new->commit->object, &opts->diff_options);
D
Daniel Barkalow 已提交
538 539 540 541

	return 0;
}

542
static void report_tracking(struct branch_info *new)
543
{
544
	struct strbuf sb = STRBUF_INIT;
545
	struct branch *branch = branch_get(new->name);
546

547
	if (!format_tracking_info(branch, &sb))
548
		return;
549 550
	fputs(sb.buf, stdout);
	strbuf_release(&sb);
551
}
552

553
static void update_refs_for_switch(const struct checkout_opts *opts,
D
Daniel Barkalow 已提交
554 555 556
				   struct branch_info *old,
				   struct branch_info *new)
{
557
	struct strbuf msg = STRBUF_INIT;
D
Daniel Barkalow 已提交
558 559
	const char *old_desc;
	if (opts->new_branch) {
560 561 562
		if (opts->new_orphan_branch) {
			if (opts->new_branch_log && !log_all_ref_updates) {
				int temp;
563
				char log_file[PATH_MAX];
564 565 566 567
				char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);

				temp = log_all_ref_updates;
				log_all_ref_updates = 1;
568
				if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
569
					fprintf(stderr, _("Can not do reflog for '%s'\n"),
570 571 572 573 574 575 576 577
					    opts->new_orphan_branch);
					log_all_ref_updates = temp;
					return;
				}
				log_all_ref_updates = temp;
			}
		}
		else
T
Tay Ray Chuan 已提交
578 579
			create_branch(old->name, opts->new_branch, new->name,
				      opts->new_branch_force ? 1 : 0,
580 581
				      opts->new_branch_log,
				      opts->new_branch_force ? 1 : 0,
582
				      opts->quiet,
583
				      opts->track);
D
Daniel Barkalow 已提交
584 585 586 587 588
		new->name = opts->new_branch;
		setup_branch_path(new);
	}

	old_desc = old->name;
589
	if (!old_desc && old->commit)
D
Daniel Barkalow 已提交
590 591
		old_desc = sha1_to_hex(old->commit->object.sha1);
	strbuf_addf(&msg, "checkout: moving from %s to %s",
592
		    old_desc ? old_desc : "(invalid)", new->name);
D
Daniel Barkalow 已提交
593

594 595 596 597 598 599 600
	if (!strcmp(new->name, "HEAD") && !new->path && !opts->force_detach) {
		/* Nothing to do. */
	} else if (opts->force_detach || !new->path) {	/* No longer on any branch. */
		update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL,
			   REF_NODEREF, DIE_ON_ERR);
		if (!opts->quiet) {
			if (old->path && advice_detached_head)
601
				detach_advice(new->name);
J
Junio C Hamano 已提交
602
			describe_detached_head(_("HEAD is now at"), new->commit);
603 604
		}
	} else if (new->path) {	/* Switch branches. */
D
Daniel Barkalow 已提交
605 606
		create_symref("HEAD", new->path, msg.buf);
		if (!opts->quiet) {
607
			if (old->path && !strcmp(new->path, old->path)) {
608 609 610 611 612 613
				if (opts->new_branch_force)
					fprintf(stderr, _("Reset branch '%s'\n"),
						new->name);
				else
					fprintf(stderr, _("Already on '%s'\n"),
						new->name);
614 615 616 617 618 619
			} else if (opts->new_branch) {
				if (opts->branch_exists)
					fprintf(stderr, _("Switched to and reset branch '%s'\n"), new->name);
				else
					fprintf(stderr, _("Switched to a new branch '%s'\n"), new->name);
			} else {
620
				fprintf(stderr, _("Switched to branch '%s'\n"),
621
					new->name);
622
			}
D
Daniel Barkalow 已提交
623
		}
624 625 626 627 628 629 630 631
		if (old->path && old->name) {
			char log_file[PATH_MAX], ref_file[PATH_MAX];

			git_snpath(log_file, sizeof(log_file), "logs/%s", old->path);
			git_snpath(ref_file, sizeof(ref_file), "%s", old->path);
			if (!file_exists(ref_file) && file_exists(log_file))
				remove_path(log_file);
		}
D
Daniel Barkalow 已提交
632 633 634
	}
	remove_branch_state();
	strbuf_release(&msg);
635 636
	if (!opts->quiet &&
	    (new->path || (!opts->force_detach && !strcmp(new->name, "HEAD"))))
637
		report_tracking(new);
D
Daniel Barkalow 已提交
638 639
}

640 641 642
static int add_pending_uninteresting_ref(const char *refname,
					 const unsigned char *sha1,
					 int flags, void *cb_data)
643
{
644
	add_pending_sha1(cb_data, refname, sha1, UNINTERESTING);
645 646
	return 0;
}
647 648 649 650

static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
{
	parse_commit(commit);
651 652 653 654
	strbuf_addstr(sb, "  ");
	strbuf_addstr(sb,
		find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
	strbuf_addch(sb, ' ');
655
	pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675
	strbuf_addch(sb, '\n');
}

#define ORPHAN_CUTOFF 4
static void suggest_reattach(struct commit *commit, struct rev_info *revs)
{
	struct commit *c, *last = NULL;
	struct strbuf sb = STRBUF_INIT;
	int lost = 0;
	while ((c = get_revision(revs)) != NULL) {
		if (lost < ORPHAN_CUTOFF)
			describe_one_orphan(&sb, c);
		last = c;
		lost++;
	}
	if (ORPHAN_CUTOFF < lost) {
		int more = lost - ORPHAN_CUTOFF;
		if (more == 1)
			describe_one_orphan(&sb, last);
		else
676
			strbuf_addf(&sb, _(" ... and %d more.\n"), more);
677 678 679
	}

	fprintf(stderr,
680 681 682 683 684
		Q_(
		/* The singular version */
		"Warning: you are leaving %d commit behind, "
		"not connected to\n"
		"any of your branches:\n\n"
685
		"%s\n",
686 687
		/* The plural version */
		"Warning: you are leaving %d commits behind, "
688 689
		"not connected to\n"
		"any of your branches:\n\n"
690
		"%s\n",
691 692 693
		/* Give ngettext() the count */
		lost),
		lost,
694
		sb.buf);
695
	strbuf_release(&sb);
696 697 698

	if (advice_detached_head)
		fprintf(stderr,
699
			_(
700 701
			"If you want to keep them by creating a new branch, "
			"this may be a good time\nto do so with:\n\n"
702
			" git branch new_branch_name %s\n\n"),
703
			sha1_to_hex(commit->object.sha1));
704 705 706 707 708 709 710
}

/*
 * We are about to leave commit that was at the tip of a detached
 * HEAD.  If it is not reachable from any ref, this is the last chance
 * for the user to do so without resorting to reflog.
 */
711
static void orphaned_commit_warning(struct commit *old, struct commit *new)
712 713
{
	struct rev_info revs;
714
	struct object *object = &old->object;
R
René Scharfe 已提交
715
	struct object_array refs;
716 717

	init_revisions(&revs, NULL);
718 719 720 721 722 723
	setup_revisions(0, NULL, &revs, NULL);

	object->flags &= ~UNINTERESTING;
	add_pending_object(&revs, object, sha1_to_hex(object->sha1));

	for_each_ref(add_pending_uninteresting_ref, &revs);
724
	add_pending_sha1(&revs, "HEAD", new->object.sha1, UNINTERESTING);
725

R
René Scharfe 已提交
726 727 728
	refs = revs.pending;
	revs.leak_pending = 1;

729
	if (prepare_revision_walk(&revs))
J
Junio C Hamano 已提交
730
		die(_("internal error in revision walk"));
731 732
	if (!(old->object.flags & UNINTERESTING))
		suggest_reattach(old, &revs);
733
	else
734
		describe_detached_head(_("Previous HEAD position was"), old);
735

736
	clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS);
R
René Scharfe 已提交
737
	free(refs.objects);
738 739
}

740 741
static int switch_branches(const struct checkout_opts *opts,
			   struct branch_info *new)
D
Daniel Barkalow 已提交
742 743 744
{
	int ret = 0;
	struct branch_info old;
745
	void *path_to_free;
D
Daniel Barkalow 已提交
746
	unsigned char rev[20];
747
	int flag, writeout_error = 0;
D
Daniel Barkalow 已提交
748
	memset(&old, 0, sizeof(old));
749
	old.path = path_to_free = resolve_refdup("HEAD", rev, 0, &flag);
D
Daniel Barkalow 已提交
750
	old.commit = lookup_commit_reference_gently(rev, 1);
751
	if (!(flag & REF_ISSYMREF))
D
Daniel Barkalow 已提交
752 753 754 755 756 757 758 759 760
		old.path = NULL;

	if (old.path && !prefixcmp(old.path, "refs/heads/"))
		old.name = old.path + strlen("refs/heads/");

	if (!new->name) {
		new->name = "HEAD";
		new->commit = old.commit;
		if (!new->commit)
761
			die(_("You are on a branch yet to be born"));
D
Daniel Barkalow 已提交
762 763 764
		parse_commit(new->commit);
	}

765
	ret = merge_working_tree(opts, &old, new, &writeout_error);
766 767
	if (ret) {
		free(path_to_free);
D
Daniel Barkalow 已提交
768
		return ret;
769
	}
D
Daniel Barkalow 已提交
770

771
	if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
772
		orphaned_commit_warning(old.commit, new->commit);
773

D
Daniel Barkalow 已提交
774 775
	update_refs_for_switch(opts, &old, new);

776
	ret = post_checkout_hook(old.commit, new->commit, 1);
777
	free(path_to_free);
778
	return ret || writeout_error;
D
Daniel Barkalow 已提交
779 780
}

781 782
static int git_checkout_config(const char *var, const char *value, void *cb)
{
783 784 785 786 787
	if (!strcmp(var, "diff.ignoresubmodules")) {
		struct checkout_opts *opts = cb;
		handle_ignore_submodules_arg(&opts->diff_options, value);
		return 0;
	}
788 789 790 791

	if (!prefixcmp(var, "submodule."))
		return parse_submodule_config_option(var, value);

792
	return git_xmerge_config(var, value, NULL);
793 794
}

795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821
struct tracking_name_data {
	const char *name;
	char *remote;
	int unique;
};

static int check_tracking_name(const char *refname, const unsigned char *sha1,
			       int flags, void *cb_data)
{
	struct tracking_name_data *cb = cb_data;
	const char *slash;

	if (prefixcmp(refname, "refs/remotes/"))
		return 0;
	slash = strchr(refname + 13, '/');
	if (!slash || strcmp(slash + 1, cb->name))
		return 0;
	if (cb->remote) {
		cb->unique = 0;
		return 0;
	}
	cb->remote = xstrdup(refname);
	return 0;
}

static const char *unique_tracking_name(const char *name)
{
822 823
	struct tracking_name_data cb_data = { NULL, NULL, 1 };
	cb_data.name = name;
824 825 826 827 828 829
	for_each_ref(check_tracking_name, &cb_data);
	if (cb_data.unique)
		return cb_data.remote;
	free(cb_data.remote);
	return NULL;
}
T
Thomas Rast 已提交
830

831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863
static int parse_branchname_arg(int argc, const char **argv,
				int dwim_new_local_branch_ok,
				struct branch_info *new,
				struct tree **source_tree,
				unsigned char rev[20],
				const char **new_branch)
{
	int argcount = 0;
	unsigned char branch_rev[20];
	const char *arg;
	int has_dash_dash;

	/*
	 * case 1: git checkout <ref> -- [<paths>]
	 *
	 *   <ref> must be a valid tree, everything after the '--' must be
	 *   a path.
	 *
	 * case 2: git checkout -- [<paths>]
	 *
	 *   everything after the '--' must be paths.
	 *
	 * case 3: git checkout <something> [<paths>]
	 *
	 *   With no paths, if <something> is a commit, that is to
	 *   switch to the branch or detach HEAD at it.  As a special case,
	 *   if <something> is A...B (missing A or B means HEAD but you can
	 *   omit at most one side), and if there is a unique merge base
	 *   between A and B, A...B names that merge base.
	 *
	 *   With no paths, if <something> is _not_ a commit, no -t nor -b
	 *   was given, and there is a tracking branch whose name is
	 *   <something> in one and only one remote, then this is a short-hand
864
	 *   to fork local <something> from that remote-tracking branch.
865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885
	 *
	 *   Otherwise <something> shall not be ambiguous.
	 *   - If it's *only* a reference, treat it like case (1).
	 *   - If it's only a path, treat it like case (2).
	 *   - else: fail.
	 *
	 */
	if (!argc)
		return 0;

	if (!strcmp(argv[0], "--"))	/* case (2) */
		return 1;

	arg = argv[0];
	has_dash_dash = (argc > 1) && !strcmp(argv[1], "--");

	if (!strcmp(arg, "-"))
		arg = "@{-1}";

	if (get_sha1_mb(arg, rev)) {
		if (has_dash_dash)          /* case (1) */
J
Junio C Hamano 已提交
886
			die(_("invalid reference: %s"), arg);
887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908
		if (dwim_new_local_branch_ok &&
		    !check_filename(NULL, arg) &&
		    argc == 1) {
			const char *remote = unique_tracking_name(arg);
			if (!remote || get_sha1(remote, rev))
				return argcount;
			*new_branch = arg;
			arg = remote;
			/* DWIMmed to create local branch */
		} else {
			return argcount;
		}
	}

	/* we can't end up being in (2) anymore, eat the argument */
	argcount++;
	argv++;
	argc--;

	new->name = arg;
	setup_branch_path(new);

909
	if (!check_refname_format(new->path, 0) &&
910
	    !read_ref(new->path, branch_rev))
911 912 913 914 915 916 917 918 919 920 921 922 923 924
		hashcpy(rev, branch_rev);
	else
		new->path = NULL; /* not an existing branch */

	new->commit = lookup_commit_reference_gently(rev, 1);
	if (!new->commit) {
		/* not a commit */
		*source_tree = parse_tree_indirect(rev);
	} else {
		parse_commit(new->commit);
		*source_tree = new->commit->tree;
	}

	if (!*source_tree)                   /* case (1): want a tree */
J
Junio C Hamano 已提交
925
		die(_("reference is not a tree: %s"), arg);
926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943
	if (!has_dash_dash) {/* case (3 -> 1) */
		/*
		 * Do not complain the most common case
		 *	git checkout branch
		 * even if there happen to be a file called 'branch';
		 * it would be extremely annoying.
		 */
		if (argc)
			verify_non_filename(NULL, arg);
	} else {
		argcount++;
		argv++;
		argc--;
	}

	return argcount;
}

944
static int switch_unborn_to_new_branch(const struct checkout_opts *opts)
945 946 947 948
{
	int status;
	struct strbuf branch_ref = STRBUF_INIT;

949 950
	if (!opts->new_branch)
		die(_("You are on a branch yet to be born"));
951 952 953
	strbuf_addf(&branch_ref, "refs/heads/%s", opts->new_branch);
	status = create_symref("HEAD", branch_ref.buf, "checkout -b");
	strbuf_release(&branch_ref);
954 955 956
	if (!opts->quiet)
		fprintf(stderr, _("Switched to a new branch '%s'\n"),
			opts->new_branch);
957 958 959
	return status;
}

960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004
static int checkout_branch(struct checkout_opts *opts,
			   struct branch_info *new)
{
	if (opts->pathspec)
		die(_("paths cannot be used with switching branches"));

	if (opts->patch_mode)
		die(_("'%s' cannot be used with switching branches"),
		    "--patch");

	if (opts->writeout_stage)
		die(_("'%s' cannot be used with switching branches"),
		    "--ours/--theirs");

	if (opts->force && opts->merge)
		die(_("'%s' cannot be used with '%s'"), "-f", "-m");

	if (opts->force_detach && opts->new_branch)
		die(_("'%s' cannot be used with '%s'"),
		    "--detach", "-b/-B/--orphan");

	if (opts->new_orphan_branch) {
		if (opts->track != BRANCH_TRACK_UNSPECIFIED)
			die(_("'%s' cannot be used with '%s'"), "--orphan", "-t");
	} else if (opts->force_detach) {
		if (opts->track != BRANCH_TRACK_UNSPECIFIED)
			die(_("'%s' cannot be used with '%s'"), "--detach", "-t");
	} else if (opts->track == BRANCH_TRACK_UNSPECIFIED)
		opts->track = git_branch_track;

	if (new->name && !new->commit)
		die(_("Cannot switch branch to a non-commit '%s'"),
		    new->name);

	if (!new->commit && opts->new_branch) {
		unsigned char rev[20];
		int flag;

		if (!read_ref_full("HEAD", rev, 0, &flag) &&
		    (flag & REF_ISSYMREF) && is_null_sha1(rev))
			return switch_unborn_to_new_branch(opts);
	}
	return switch_branches(opts, new);
}

D
Daniel Barkalow 已提交
1005 1006 1007 1008
int cmd_checkout(int argc, const char **argv, const char *prefix)
{
	struct checkout_opts opts;
	struct branch_info new;
1009
	char *conflict_style = NULL;
J
Junio C Hamano 已提交
1010
	int dwim_new_local_branch = 1;
D
Daniel Barkalow 已提交
1011
	struct option options[] = {
1012 1013 1014 1015 1016 1017 1018 1019
		OPT__QUIET(&opts.quiet, N_("suppress progress reporting")),
		OPT_STRING('b', NULL, &opts.new_branch, N_("branch"),
			   N_("create and checkout a new branch")),
		OPT_STRING('B', NULL, &opts.new_branch_force, N_("branch"),
			   N_("create/reset and checkout a branch")),
		OPT_BOOLEAN('l', NULL, &opts.new_branch_log, N_("create reflog for new branch")),
		OPT_BOOLEAN(0, "detach", &opts.force_detach, N_("detach the HEAD at named commit")),
		OPT_SET_INT('t', "track",  &opts.track, N_("set upstream info for new branch"),
1020
			BRANCH_TRACK_EXPLICIT),
1021 1022
		OPT_STRING(0, "orphan", &opts.new_orphan_branch, N_("new branch"), N_("new unparented branch")),
		OPT_SET_INT('2', "ours", &opts.writeout_stage, N_("checkout our version for unmerged files"),
1023
			    2),
1024
		OPT_SET_INT('3', "theirs", &opts.writeout_stage, N_("checkout their version for unmerged files"),
1025
			    3),
1026 1027 1028 1029 1030
		OPT__FORCE(&opts.force, N_("force checkout (throw away local modifications)")),
		OPT_BOOLEAN('m', "merge", &opts.merge, N_("perform a 3-way merge with the new branch")),
		OPT_BOOLEAN(0, "overwrite-ignore", &opts.overwrite_ignore, N_("update ignored files (default)")),
		OPT_STRING(0, "conflict", &conflict_style, N_("style"),
			   N_("conflict style (merge or diff3)")),
1031
		OPT_BOOLEAN('p', "patch", &opts.patch_mode, N_("select hunks interactively")),
J
Junio C Hamano 已提交
1032
		{ OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
1033
		  N_("second guess 'git checkout no-such-branch'"),
J
Junio C Hamano 已提交
1034
		  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
1035
		OPT_END(),
D
Daniel Barkalow 已提交
1036 1037 1038 1039
	};

	memset(&opts, 0, sizeof(opts));
	memset(&new, 0, sizeof(new));
1040
	opts.overwrite_ignore = 1;
1041
	opts.prefix = prefix;
D
Daniel Barkalow 已提交
1042

1043
	gitmodules_config();
1044
	git_config(git_checkout_config, &opts);
D
Daniel Barkalow 已提交
1045

1046
	opts.track = BRANCH_TRACK_UNSPECIFIED;
D
Daniel Barkalow 已提交
1047

1048
	argc = parse_options(argc, argv, prefix, options, checkout_usage,
1049
			     PARSE_OPT_KEEP_DASHDASH);
1050

1051 1052 1053 1054
	if (conflict_style) {
		opts.merge = 1; /* implied */
		git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
	}
T
Tay Ray Chuan 已提交
1055

1056 1057
	if ((!!opts.new_branch + !!opts.new_branch_force + !!opts.new_orphan_branch) > 1)
		die(_("-b, -B and --orphan are mutually exclusive"));
T
Tay Ray Chuan 已提交
1058

1059 1060 1061 1062 1063
	/*
	 * From here on, new_branch will contain the branch to be checked out,
	 * and new_branch_force and new_orphan_branch will tell us which one of
	 * -b/-B/--orphan is being used.
	 */
T
Tay Ray Chuan 已提交
1064 1065 1066
	if (opts.new_branch_force)
		opts.new_branch = opts.new_branch_force;

1067 1068
	if (opts.new_orphan_branch)
		opts.new_branch = opts.new_orphan_branch;
1069

1070 1071
	/* --track without -b/-B/--orphan should DWIM */
	if (opts.track != BRANCH_TRACK_UNSPECIFIED && !opts.new_branch) {
1072 1073
		const char *argv0 = argv[0];
		if (!argc || !strcmp(argv0, "--"))
1074
			die (_("--track needs a branch name"));
1075 1076 1077 1078 1079 1080
		if (!prefixcmp(argv0, "refs/"))
			argv0 += 5;
		if (!prefixcmp(argv0, "remotes/"))
			argv0 += 8;
		argv0 = strchr(argv0, '/');
		if (!argv0 || !argv0[1])
1081
			die (_("Missing branch name; try -b"));
1082
		opts.new_branch = argv0 + 1;
1083 1084
	}

1085
	/*
1086 1087
	 * Extract branch name from command line arguments, so
	 * all that is left is pathspecs.
1088
	 *
1089
	 * Handle
1090
	 *
1091 1092 1093
	 *  1) git checkout <tree> -- [<paths>]
	 *  2) git checkout -- [<paths>]
	 *  3) git checkout <something> [<paths>]
1094
	 *
1095 1096
	 * including "last branch" syntax and DWIM-ery for names of
	 * remote branches, erroring out for invalid or ambiguous cases.
1097
	 */
D
Daniel Barkalow 已提交
1098
	if (argc) {
1099
		unsigned char rev[20];
1100
		int dwim_ok =
1101
			!opts.patch_mode &&
1102 1103 1104
			dwim_new_local_branch &&
			opts.track == BRANCH_TRACK_UNSPECIFIED &&
			!opts.new_branch;
1105
		int n = parse_branchname_arg(argc, argv, dwim_ok,
1106 1107
					     &new, &opts.source_tree,
					     rev, &opts.new_branch);
1108 1109
		argv += n;
		argc -= n;
D
Daniel Barkalow 已提交
1110 1111 1112
	}

	if (argc) {
1113
		opts.pathspec = get_pathspec(prefix, argv);
1114

1115
		if (!opts.pathspec)
1116
			die(_("invalid path specification"));
1117

1118 1119 1120 1121 1122 1123 1124 1125
		/*
		 * Try to give more helpful suggestion.
		 * new_branch && argc > 1 will be caught later.
		 */
		if (opts.new_branch && argc == 1)
			die(_("Cannot update paths and switch to branch '%s' at the same time.\n"
			      "Did you intend to checkout '%s' which can not be resolved as commit?"),
			    opts.new_branch, argv[0]);
D
Daniel Barkalow 已提交
1126

1127
		if (opts.force_detach)
1128 1129
			die(_("git checkout: --detach does not take a path argument '%s'"),
			    argv[0]);
1130

1131
		if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge)
1132 1133
			die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\n"
			      "checking out of the index."));
D
Daniel Barkalow 已提交
1134 1135
	}

1136
	if (opts.new_branch) {
1137
		struct strbuf buf = STRBUF_INIT;
1138

1139 1140 1141 1142
		opts.branch_exists =
			validate_new_branchname(opts.new_branch, &buf,
						!!opts.new_branch_force,
						!!opts.new_branch_force);
1143

1144 1145 1146
		strbuf_release(&buf);
	}

1147 1148 1149 1150
	if (opts.patch_mode || opts.pathspec)
		return checkout_paths(&opts, new.name);
	else
		return checkout_branch(&opts, &new);
D
Daniel Barkalow 已提交
1151
}