checkout.c 36.6 KB
Newer Older
D
Daniel Barkalow 已提交
1
#include "builtin.h"
2
#include "lockfile.h"
D
Daniel Barkalow 已提交
3 4 5 6 7
#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-config.h"
22
#include "submodule.h"
D
Daniel Barkalow 已提交
23

24 25
static int recurse_submodules = RECURSE_SUBMODULES_DEFAULT;

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

32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
static int option_parse_recurse_submodules(const struct option *opt,
					   const char *arg, int unset)
{
	if (unset) {
		recurse_submodules = RECURSE_SUBMODULES_OFF;
		return 0;
	}
	if (arg)
		recurse_submodules =
			parse_update_recurse_submodules_arg(opt->long_name,
							    arg);
	else
		recurse_submodules = RECURSE_SUBMODULES_ON;

	return 0;
}

49
struct checkout_opts {
50
	int patch_mode;
51 52 53
	int quiet;
	int merge;
	int force;
54
	int force_detach;
55
	int writeout_stage;
56
	int overwrite_ignore;
57
	int ignore_skipworktree;
58
	int ignore_other_worktrees;
59
	int show_progress;
60 61

	const char *new_branch;
T
Tay Ray Chuan 已提交
62
	const char *new_branch_force;
63
	const char *new_orphan_branch;
64 65
	int new_branch_log;
	enum branch_track track;
66
	struct diff_options diff_options;
67 68 69

	int branch_exists;
	const char *prefix;
70
	struct pathspec pathspec;
71
	struct tree *source_tree;
72 73
};

D
Daniel Barkalow 已提交
74 75 76
static int post_checkout_hook(struct commit *old, struct commit *new,
			      int changed)
{
77
	return run_hook_le(NULL, "post-checkout",
78 79
			   oid_to_hex(old ? &old->object.oid : &null_oid),
			   oid_to_hex(new ? &new->object.oid : &null_oid),
80
			   changed ? "1" : "0", NULL);
81 82
	/* "new" can be NULL when checking out from the index before
	   a commit exists. */
83

D
Daniel Barkalow 已提交
84 85
}

86
static int update_some(const unsigned char *sha1, struct strbuf *base,
87
		const char *pathname, unsigned mode, int stage, void *context)
D
Daniel Barkalow 已提交
88 89 90
{
	int len;
	struct cache_entry *ce;
91
	int pos;
D
Daniel Barkalow 已提交
92 93 94 95

	if (S_ISDIR(mode))
		return READ_TREE_RECURSIVE;

96
	len = base->len + strlen(pathname);
D
Daniel Barkalow 已提交
97
	ce = xcalloc(1, cache_entry_size(len));
98
	hashcpy(ce->oid.hash, sha1);
99 100
	memcpy(ce->name, base->buf, base->len);
	memcpy(ce->name + base->len, pathname, len - base->len);
101 102
	ce->ce_flags = create_ce_flags(0) | CE_UPDATE;
	ce->ce_namelen = len;
D
Daniel Barkalow 已提交
103
	ce->ce_mode = create_ce_mode(mode);
104 105 106 107 108 109 110 111 112 113

	/*
	 * If the entry is the same as the current index, we can leave the old
	 * entry in place. Whether it is UPTODATE or not, checkout_entry will
	 * do the right thing.
	 */
	pos = cache_name_pos(ce->name, ce->ce_namelen);
	if (pos >= 0) {
		struct cache_entry *old = active_cache[pos];
		if (ce->ce_mode == old->ce_mode &&
114
		    !oidcmp(&ce->oid, &old->oid)) {
115 116 117 118 119 120
			old->ce_flags |= CE_UPDATE;
			free(ce);
			return 0;
		}
	}

D
Daniel Barkalow 已提交
121 122 123 124
	add_cache_entry(ce, ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
	return 0;
}

125
static int read_tree_some(struct tree *tree, const struct pathspec *pathspec)
D
Daniel Barkalow 已提交
126
{
127
	read_tree_recursive(tree, "", 0, 0, pathspec, update_some, NULL);
D
Daniel Barkalow 已提交
128 129 130 131 132 133 134 135

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

136
static int skip_same_name(const struct cache_entry *ce, int pos)
137 138 139 140 141 142 143
{
	while (++pos < active_nr &&
	       !strcmp(active_cache[pos]->name, ce->name))
		; /* skip */
	return pos;
}

144
static int check_stage(int stage, const struct cache_entry *ce, int pos)
145 146 147 148 149 150 151
{
	while (pos < active_nr &&
	       !strcmp(active_cache[pos]->name, ce->name)) {
		if (ce_stage(active_cache[pos]) == stage)
			return 0;
		pos++;
	}
152 153 154 155
	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);
156 157
}

158
static int check_stages(unsigned stages, const struct cache_entry *ce, int pos)
159
{
160 161 162 163 164 165 166 167 168 169 170 171 172
	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);
173 174 175
	return 0;
}

176 177
static int checkout_stage(int stage, const struct cache_entry *ce, int pos,
			  const struct checkout *state)
178 179 180 181 182 183 184
{
	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++;
	}
185 186 187 188
	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);
189
}
190

191
static int checkout_merged(int pos, const struct checkout *state)
192 193 194 195 196
{
	struct cache_entry *ce = active_cache[pos];
	const char *path = ce->name;
	mmfile_t ancestor, ours, theirs;
	int status;
197
	struct object_id oid;
198
	mmbuffer_t result_buf;
199
	struct object_id threeway[3];
200
	unsigned mode = 0;
201

202 203 204 205 206 207
	memset(threeway, 0, sizeof(threeway));
	while (pos < active_nr) {
		int stage;
		stage = ce_stage(ce);
		if (!stage || strcmp(path, ce->name))
			break;
208
		oidcpy(&threeway[stage - 1], &ce->oid);
209 210 211 212 213
		if (stage == 2)
			mode = create_ce_mode(ce->ce_mode);
		pos++;
		ce = active_cache[pos];
	}
214
	if (is_null_oid(&threeway[1]) || is_null_oid(&threeway[2]))
215
		return error(_("path '%s' does not have necessary versions"), path);
216

217 218 219
	read_mmblob(&ancestor, &threeway[0]);
	read_mmblob(&ours, &threeway[1]);
	read_mmblob(&theirs, &threeway[2]);
220

221 222 223 224
	/*
	 * NEEDSWORK: re-create conflicts from merges with
	 * merge.renormalize set, too
	 */
225
	status = ll_merge(&result_buf, path, &ancestor, "base",
226
			  &ours, "ours", &theirs, "theirs", NULL);
227 228 229 230 231
	free(ancestor.ptr);
	free(ours.ptr);
	free(theirs.ptr);
	if (status < 0 || !result_buf.ptr) {
		free(result_buf.ptr);
232
		return error(_("path '%s': cannot merge"), path);
233 234 235 236 237
	}

	/*
	 * NEEDSWORK:
	 * There is absolutely no reason to write this as a blob object
M
Mike Ralphson 已提交
238
	 * and create a phony cache entry just to leak.  This hack is
239 240 241 242 243 244 245 246 247
	 * 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,
248
			    blob_type, oid.hash))
249
		die(_("Unable to add merge result for '%s'"), path);
250
	ce = make_cache_entry(mode, oid.hash, path, 2, 0);
251
	if (!ce)
252
		die(_("make_cache_entry failed for path '%s'"), path);
253 254 255
	status = checkout_entry(ce, state, NULL);
	return status;
}
256

257 258
static int checkout_paths(const struct checkout_opts *opts,
			  const char *revision)
D
Daniel Barkalow 已提交
259 260
{
	int pos;
R
René Scharfe 已提交
261
	struct checkout state = CHECKOUT_INIT;
D
Daniel Barkalow 已提交
262
	static char *ps_matched;
263
	struct object_id rev;
D
Daniel Barkalow 已提交
264
	struct commit *head;
265
	int errs = 0;
266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291
	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",
292
					   &opts->pathspec);
293 294

	lock_file = xcalloc(1, sizeof(struct lock_file));
295

296
	hold_locked_index(lock_file, LOCK_DIE_ON_ERROR);
297
	if (read_cache_preload(&opts->pathspec) < 0)
V
Vasco Almeida 已提交
298
		return error(_("index file corrupt"));
299

300
	if (opts->source_tree)
301
		read_tree_some(opts->source_tree, &opts->pathspec);
302

303
	ps_matched = xcalloc(opts->pathspec.nr, 1);
D
Daniel Barkalow 已提交
304

305 306 307 308
	/*
	 * Make sure all pathspecs participated in locating the paths
	 * to be checked out.
	 */
D
Daniel Barkalow 已提交
309 310
	for (pos = 0; pos < active_nr; pos++) {
		struct cache_entry *ce = active_cache[pos];
311
		ce->ce_flags &= ~CE_MATCHED;
312 313
		if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
			continue;
314
		if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
315 316 317 318 319 320 321
			/*
			 * "git checkout tree-ish -- path", but this entry
			 * is in the original index; it will not be checked
			 * out to the working tree and it does not matter
			 * if pathspec matched this entry.  We will not do
			 * anything to this entry at all.
			 */
322
			continue;
323 324 325 326 327 328 329 330 331 332 333 334 335 336
		/*
		 * Either this entry came from the tree-ish we are
		 * checking the paths out of, or we are checking out
		 * of the index.
		 *
		 * If it comes from the tree-ish, we already know it
		 * matches the pathspec and could just stamp
		 * CE_MATCHED to it from update_some(). But we still
		 * need ps_matched and read_tree_recursive (and
		 * eventually tree_entry_interesting) cannot fill
		 * ps_matched yet. Once it can, we can avoid calling
		 * match_pathspec() for _all_ entries when
		 * opts->source_tree != NULL.
		 */
337
		if (ce_path_match(ce, &opts->pathspec, ps_matched))
338
			ce->ce_flags |= CE_MATCHED;
D
Daniel Barkalow 已提交
339 340
	}

341
	if (report_path_error(ps_matched, &opts->pathspec, opts->prefix)) {
342
		free(ps_matched);
D
Daniel Barkalow 已提交
343
		return 1;
344 345
	}
	free(ps_matched);
D
Daniel Barkalow 已提交
346

347 348
	/* "checkout -m path" to recreate conflicted state */
	if (opts->merge)
349
		unmerge_marked_index(&the_index);
350

351 352
	/* Any unmerged paths? */
	for (pos = 0; pos < active_nr; pos++) {
353
		const struct cache_entry *ce = active_cache[pos];
354
		if (ce->ce_flags & CE_MATCHED) {
355 356
			if (!ce_stage(ce))
				continue;
357
			if (opts->force) {
358
				warning(_("path '%s' is unmerged"), ce->name);
359 360
			} else if (opts->writeout_stage) {
				errs |= check_stage(opts->writeout_stage, ce, pos);
361
			} else if (opts->merge) {
362
				errs |= check_stages((1<<2) | (1<<3), ce, pos);
363 364
			} else {
				errs = 1;
365
				error(_("path '%s' is unmerged"), ce->name);
366
			}
367 368 369 370 371 372
			pos = skip_same_name(ce, pos) - 1;
		}
	}
	if (errs)
		return 1;

373
	/* Now we are committed to check them out */
D
Daniel Barkalow 已提交
374 375
	state.force = 1;
	state.refresh_cache = 1;
376
	state.istate = &the_index;
D
Daniel Barkalow 已提交
377 378
	for (pos = 0; pos < active_nr; pos++) {
		struct cache_entry *ce = active_cache[pos];
379
		if (ce->ce_flags & CE_MATCHED) {
380 381 382 383
			if (!ce_stage(ce)) {
				errs |= checkout_entry(ce, &state, NULL);
				continue;
			}
384 385 386
			if (opts->writeout_stage)
				errs |= checkout_stage(opts->writeout_stage, ce, pos, &state);
			else if (opts->merge)
387
				errs |= checkout_merged(pos, &state);
388
			pos = skip_same_name(ce, pos) - 1;
D
Daniel Barkalow 已提交
389 390 391
		}
	}

392
	if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
393
		die(_("unable to write new index file"));
394

395 396
	read_ref_full("HEAD", 0, rev.hash, NULL);
	head = lookup_commit_reference_gently(rev.hash, 1);
D
Daniel Barkalow 已提交
397

398 399
	errs |= post_checkout_hook(head, head, 0);
	return errs;
D
Daniel Barkalow 已提交
400 401
}

402 403
static void show_local_changes(struct object *head,
			       const struct diff_options *opts)
D
Daniel Barkalow 已提交
404 405 406 407
{
	struct rev_info rev;
	/* I think we want full paths, even if we're in a subdirectory. */
	init_revisions(&rev, NULL);
408
	rev.diffopt.flags = opts->flags;
D
Daniel Barkalow 已提交
409
	rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
T
Thomas Rast 已提交
410
	diff_setup_done(&rev.diffopt);
D
Daniel Barkalow 已提交
411 412 413 414
	add_pending_object(&rev, head, NULL);
	run_diff_index(&rev, 0);
}

415
static void describe_detached_head(const char *msg, struct commit *commit)
D
Daniel Barkalow 已提交
416
{
417
	struct strbuf sb = STRBUF_INIT;
418 419
	if (!parse_commit(commit))
		pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
D
Daniel Barkalow 已提交
420
	fprintf(stderr, "%s %s... %s\n", msg,
B
brian m. carlson 已提交
421
		find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV), sb.buf);
D
Daniel Barkalow 已提交
422 423 424
	strbuf_release(&sb);
}

425 426
static int reset_tree(struct tree *tree, const struct checkout_opts *o,
		      int worktree, int *writeout_error)
D
Daniel Barkalow 已提交
427 428 429
{
	struct unpack_trees_options opts;
	struct tree_desc tree_desc;
430

D
Daniel Barkalow 已提交
431 432
	memset(&opts, 0, sizeof(opts));
	opts.head_idx = -1;
433 434
	opts.update = worktree;
	opts.skip_unmerged = !worktree;
D
Daniel Barkalow 已提交
435 436 437
	opts.reset = 1;
	opts.merge = 1;
	opts.fn = oneway_merge;
438
	opts.verbose_update = o->show_progress;
439 440
	opts.src_index = &the_index;
	opts.dst_index = &the_index;
D
Daniel Barkalow 已提交
441 442
	parse_tree(tree);
	init_tree_desc(&tree_desc, tree->buffer, tree->size);
443 444
	switch (unpack_trees(1, &tree_desc, &opts)) {
	case -2:
445
		*writeout_error = 1;
446 447 448 449 450 451 452 453 454
		/*
		 * 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:
455
		return 128;
456
	}
D
Daniel Barkalow 已提交
457 458 459 460 461 462
}

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 */
463 464 465 466 467
	/*
	 * if not null the branch is detached because it's already
	 * checked out in this checkout
	 */
	char *checkout;
D
Daniel Barkalow 已提交
468 469 470 471
};

static void setup_branch_path(struct branch_info *branch)
{
472
	struct strbuf buf = STRBUF_INIT;
473

474
	strbuf_branchname(&buf, branch->name, INTERPRET_BRANCH_LOCAL);
475
	if (strcmp(buf.buf, branch->name))
476
		branch->name = xstrdup(buf.buf);
477
	strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
D
Daniel Barkalow 已提交
478 479 480
	branch->path = strbuf_detach(&buf, NULL);
}

481 482 483 484
static int merge_working_tree(const struct checkout_opts *opts,
			      struct branch_info *old,
			      struct branch_info *new,
			      int *writeout_error)
D
Daniel Barkalow 已提交
485 486 487
{
	int ret;
	struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
488

489
	hold_locked_index(lock_file, LOCK_DIE_ON_ERROR);
490
	if (read_cache_preload(NULL) < 0)
V
Vasco Almeida 已提交
491
		return error(_("index file corrupt"));
D
Daniel Barkalow 已提交
492

493
	resolve_undo_clear();
D
Daniel Barkalow 已提交
494
	if (opts->force) {
495
		ret = reset_tree(new->commit->tree, opts, 1, writeout_error);
D
Daniel Barkalow 已提交
496 497 498 499 500 501
		if (ret)
			return ret;
	} else {
		struct tree_desc trees[2];
		struct tree *tree;
		struct unpack_trees_options topts;
502

D
Daniel Barkalow 已提交
503 504
		memset(&topts, 0, sizeof(topts));
		topts.head_idx = -1;
505 506
		topts.src_index = &the_index;
		topts.dst_index = &the_index;
D
Daniel Barkalow 已提交
507

508
		setup_unpack_trees_porcelain(&topts, "checkout");
509

D
Daniel Barkalow 已提交
510 511 512
		refresh_cache(REFRESH_QUIET);

		if (unmerged_cache()) {
513
			error(_("you need to resolve your current index first"));
514
			return 1;
D
Daniel Barkalow 已提交
515
		}
516 517

		/* 2-way merge to the new branch */
518
		topts.initial_checkout = is_cache_unborn();
519 520
		topts.update = 1;
		topts.merge = 1;
521
		topts.gently = opts->merge && old->commit;
522
		topts.verbose_update = opts->show_progress;
523
		topts.fn = twoway_merge;
524 525 526 527 528
		if (opts->overwrite_ignore) {
			topts.dir = xcalloc(1, sizeof(*topts.dir));
			topts.dir->flags |= DIR_SHOW_IGNORED;
			setup_standard_excludes(topts.dir);
		}
529
		tree = parse_tree_indirect(old->commit ?
B
brian m. carlson 已提交
530
					   old->commit->object.oid.hash :
531
					   EMPTY_TREE_SHA1_BIN);
532
		init_tree_desc(&trees[0], tree->buffer, tree->size);
533
		tree = parse_tree_indirect(new->commit->object.oid.hash);
534 535
		init_tree_desc(&trees[1], tree->buffer, tree->size);

536
		ret = unpack_trees(2, trees, &topts);
537
		if (ret == -1) {
D
Daniel Barkalow 已提交
538 539 540 541 542 543 544
			/*
			 * 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;
545
			struct merge_options o;
D
Daniel Barkalow 已提交
546 547
			if (!opts->merge)
				return 1;
548 549 550 551 552 553 554

			/*
			 * 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 已提交
555 556 557 558 559 560 561 562 563 564 565 566 567 568

			/* 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.
			 */

569
			add_files_to_cache(NULL, NULL, 0);
J
Jonathan Nieder 已提交
570 571 572 573 574 575 576
			/*
			 * 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?
			 */
577 578 579
			init_merge_options(&o);
			o.verbosity = 0;
			work = write_tree_from_memory(&o);
D
Daniel Barkalow 已提交
580

581 582
			ret = reset_tree(new->commit->tree, opts, 1,
					 writeout_error);
D
Daniel Barkalow 已提交
583 584
			if (ret)
				return ret;
585
			o.ancestor = old->name;
586 587
			o.branch1 = new->name;
			o.branch2 = "local";
588
			ret = merge_trees(&o, new->commit->tree, work,
589
				old->commit->tree, &result);
590 591
			if (ret < 0)
				exit(128);
592 593
			ret = reset_tree(new->commit->tree, opts, 0,
					 writeout_error);
594
			strbuf_release(&o.obuf);
595 596
			if (ret)
				return ret;
D
Daniel Barkalow 已提交
597 598 599
		}
	}

600 601 602 603
	if (!active_cache_tree)
		active_cache_tree = cache_tree();

	if (!cache_tree_fully_valid(active_cache_tree))
604
		cache_tree_update(&the_index, WRITE_TREE_SILENT | WRITE_TREE_REPAIR);
605

606
	if (write_locked_index(&the_index, lock_file, COMMIT_LOCK))
607
		die(_("unable to write new index file"));
D
Daniel Barkalow 已提交
608

609
	if (!opts->force && !opts->quiet)
610
		show_local_changes(&new->commit->object, &opts->diff_options);
D
Daniel Barkalow 已提交
611 612 613 614

	return 0;
}

615
static void report_tracking(struct branch_info *new)
616
{
617
	struct strbuf sb = STRBUF_INIT;
618
	struct branch *branch = branch_get(new->name);
619

620
	if (!format_tracking_info(branch, &sb))
621
		return;
622 623
	fputs(sb.buf, stdout);
	strbuf_release(&sb);
624
}
625

626
static void update_refs_for_switch(const struct checkout_opts *opts,
D
Daniel Barkalow 已提交
627 628 629
				   struct branch_info *old,
				   struct branch_info *new)
{
630
	struct strbuf msg = STRBUF_INIT;
631
	const char *old_desc, *reflog_msg;
D
Daniel Barkalow 已提交
632
	if (opts->new_branch) {
633
		if (opts->new_orphan_branch) {
634 635 636 637 638
			char *refname;

			refname = mkpathdup("refs/heads/%s", opts->new_orphan_branch);
			if (opts->new_branch_log &&
			    !should_autocreate_reflog(refname)) {
639
				int ret;
640
				struct strbuf err = STRBUF_INIT;
641

642
				ret = safe_create_reflog(refname, 1, &err);
643
				if (ret) {
644 645 646
					fprintf(stderr, _("Can not do reflog for '%s': %s\n"),
						opts->new_orphan_branch, err.buf);
					strbuf_release(&err);
647
					free(refname);
648 649
					return;
				}
650
				strbuf_release(&err);
651
			}
652
			free(refname);
653 654
		}
		else
655
			create_branch(opts->new_branch, new->name,
T
Tay Ray Chuan 已提交
656
				      opts->new_branch_force ? 1 : 0,
657 658
				      opts->new_branch_log,
				      opts->new_branch_force ? 1 : 0,
659
				      opts->quiet,
660
				      opts->track);
D
Daniel Barkalow 已提交
661 662 663 664 665
		new->name = opts->new_branch;
		setup_branch_path(new);
	}

	old_desc = old->name;
666
	if (!old_desc && old->commit)
667
		old_desc = oid_to_hex(&old->commit->object.oid);
668 669 670 671 672 673 674

	reflog_msg = getenv("GIT_REFLOG_ACTION");
	if (!reflog_msg)
		strbuf_addf(&msg, "checkout: moving from %s to %s",
			old_desc ? old_desc : "(invalid)", new->name);
	else
		strbuf_insert(&msg, 0, reflog_msg, strlen(reflog_msg));
D
Daniel Barkalow 已提交
675

676 677 678
	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. */
B
brian m. carlson 已提交
679
		update_ref(msg.buf, "HEAD", new->commit->object.oid.hash, NULL,
680
			   REF_NODEREF, UPDATE_REFS_DIE_ON_ERR);
681
		if (!opts->quiet) {
682 683
			if (old->path &&
			    advice_detached_head && !opts->force_detach)
684
				detach_advice(new->name);
J
Junio C Hamano 已提交
685
			describe_detached_head(_("HEAD is now at"), new->commit);
686 687
		}
	} else if (new->path) {	/* Switch branches. */
688
		if (create_symref("HEAD", new->path, msg.buf) < 0)
689
			die(_("unable to update HEAD"));
D
Daniel Barkalow 已提交
690
		if (!opts->quiet) {
691
			if (old->path && !strcmp(new->path, old->path)) {
692 693 694 695 696 697
				if (opts->new_branch_force)
					fprintf(stderr, _("Reset branch '%s'\n"),
						new->name);
				else
					fprintf(stderr, _("Already on '%s'\n"),
						new->name);
698 699 700 701 702 703
			} 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 {
704
				fprintf(stderr, _("Switched to branch '%s'\n"),
705
					new->name);
706
			}
D
Daniel Barkalow 已提交
707
		}
708
		if (old->path && old->name) {
709
			if (!ref_exists(old->path) && reflog_exists(old->path))
710
				delete_reflog(old->path);
711
		}
D
Daniel Barkalow 已提交
712 713 714
	}
	remove_branch_state();
	strbuf_release(&msg);
715 716
	if (!opts->quiet &&
	    (new->path || (!opts->force_detach && !strcmp(new->name, "HEAD"))))
717
		report_tracking(new);
D
Daniel Barkalow 已提交
718 719
}

720
static int add_pending_uninteresting_ref(const char *refname,
721
					 const struct object_id *oid,
722
					 int flags, void *cb_data)
723
{
724
	add_pending_sha1(cb_data, refname, oid->hash, UNINTERESTING);
725 726
	return 0;
}
727 728 729

static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
{
730
	strbuf_addstr(sb, "  ");
731
	strbuf_add_unique_abbrev(sb, commit->object.oid.hash, DEFAULT_ABBREV);
732
	strbuf_addch(sb, ' ');
733 734
	if (!parse_commit(commit))
		pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754
	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
755
			strbuf_addf(&sb, _(" ... and %d more.\n"), more);
756 757 758
	}

	fprintf(stderr,
759 760 761 762 763
		Q_(
		/* The singular version */
		"Warning: you are leaving %d commit behind, "
		"not connected to\n"
		"any of your branches:\n\n"
764
		"%s\n",
765 766
		/* The plural version */
		"Warning: you are leaving %d commits behind, "
767 768
		"not connected to\n"
		"any of your branches:\n\n"
769
		"%s\n",
770 771 772
		/* Give ngettext() the count */
		lost),
		lost,
773
		sb.buf);
774
	strbuf_release(&sb);
775 776 777

	if (advice_detached_head)
		fprintf(stderr,
778 779 780 781 782 783
			Q_(
			/* The singular version */
			"If you want to keep it by creating a new branch, "
			"this may be a good time\nto do so with:\n\n"
			" git branch <new-branch-name> %s\n\n",
			/* The plural version */
784 785
			"If you want to keep them by creating a new branch, "
			"this may be a good time\nto do so with:\n\n"
786 787 788
			" git branch <new-branch-name> %s\n\n",
			/* Give ngettext() the count */
			lost),
B
brian m. carlson 已提交
789
			find_unique_abbrev(commit->object.oid.hash, DEFAULT_ABBREV));
790 791 792 793 794 795 796
}

/*
 * 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.
 */
797
static void orphaned_commit_warning(struct commit *old, struct commit *new)
798 799
{
	struct rev_info revs;
800
	struct object *object = &old->object;
R
René Scharfe 已提交
801
	struct object_array refs;
802 803

	init_revisions(&revs, NULL);
804 805 806
	setup_revisions(0, NULL, &revs, NULL);

	object->flags &= ~UNINTERESTING;
807
	add_pending_object(&revs, object, oid_to_hex(&object->oid));
808

809
	for_each_ref(add_pending_uninteresting_ref, &revs);
810
	add_pending_sha1(&revs, "HEAD", new->object.oid.hash, UNINTERESTING);
811

R
René Scharfe 已提交
812 813 814
	refs = revs.pending;
	revs.leak_pending = 1;

815
	if (prepare_revision_walk(&revs))
J
Junio C Hamano 已提交
816
		die(_("internal error in revision walk"));
817 818
	if (!(old->object.flags & UNINTERESTING))
		suggest_reattach(old, &revs);
819
	else
820
		describe_detached_head(_("Previous HEAD position was"), old);
821

822
	clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS);
R
René Scharfe 已提交
823
	free(refs.objects);
824 825
}

826 827
static int switch_branches(const struct checkout_opts *opts,
			   struct branch_info *new)
D
Daniel Barkalow 已提交
828 829 830
{
	int ret = 0;
	struct branch_info old;
831
	void *path_to_free;
832
	struct object_id rev;
833
	int flag, writeout_error = 0;
D
Daniel Barkalow 已提交
834
	memset(&old, 0, sizeof(old));
835 836
	old.path = path_to_free = resolve_refdup("HEAD", 0, rev.hash, &flag);
	old.commit = lookup_commit_reference_gently(rev.hash, 1);
837
	if (!(flag & REF_ISSYMREF))
D
Daniel Barkalow 已提交
838 839
		old.path = NULL;

840 841
	if (old.path)
		skip_prefix(old.path, "refs/heads/", &old.name);
D
Daniel Barkalow 已提交
842 843 844 845 846

	if (!new->name) {
		new->name = "HEAD";
		new->commit = old.commit;
		if (!new->commit)
847
			die(_("You are on a branch yet to be born"));
848
		parse_commit_or_die(new->commit);
D
Daniel Barkalow 已提交
849 850
	}

851
	ret = merge_working_tree(opts, &old, new, &writeout_error);
852 853
	if (ret) {
		free(path_to_free);
D
Daniel Barkalow 已提交
854
		return ret;
855
	}
D
Daniel Barkalow 已提交
856

857
	if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
858
		orphaned_commit_warning(old.commit, new->commit);
859

D
Daniel Barkalow 已提交
860 861
	update_refs_for_switch(opts, &old, new);

862
	ret = post_checkout_hook(old.commit, new->commit, 1);
863
	free(path_to_free);
864
	return ret || writeout_error;
D
Daniel Barkalow 已提交
865 866
}

867 868
static int git_checkout_config(const char *var, const char *value, void *cb)
{
869 870 871 872 873
	if (!strcmp(var, "diff.ignoresubmodules")) {
		struct checkout_opts *opts = cb;
		handle_ignore_submodules_arg(&opts->diff_options, value);
		return 0;
	}
874

875
	if (starts_with(var, "submodule."))
876 877
		return parse_submodule_config_option(var, value);

878
	return git_xmerge_config(var, value, NULL);
879 880
}

881
struct tracking_name_data {
882 883
	/* const */ char *src_ref;
	char *dst_ref;
884
	struct object_id *dst_oid;
885 886 887
	int unique;
};

888
static int check_tracking_name(struct remote *remote, void *cb_data)
889 890
{
	struct tracking_name_data *cb = cb_data;
891 892 893 894
	struct refspec query;
	memset(&query, 0, sizeof(struct refspec));
	query.src = cb->src_ref;
	if (remote_find_tracking(remote, &query) ||
895
	    get_oid(query.dst, cb->dst_oid)) {
896
		free(query.dst);
897
		return 0;
898
	}
899
	if (cb->dst_ref) {
900
		free(query.dst);
901 902 903
		cb->unique = 0;
		return 0;
	}
904
	cb->dst_ref = query.dst;
905 906 907
	return 0;
}

908
static const char *unique_tracking_name(const char *name, struct object_id *oid)
909
{
910
	struct tracking_name_data cb_data = { NULL, NULL, NULL, 1 };
911
	cb_data.src_ref = xstrfmt("refs/heads/%s", name);
912
	cb_data.dst_oid = oid;
913
	for_each_remote(check_tracking_name, &cb_data);
914
	free(cb_data.src_ref);
915
	if (cb_data.unique)
916 917
		return cb_data.dst_ref;
	free(cb_data.dst_ref);
918 919
	return NULL;
}
T
Thomas Rast 已提交
920

921 922 923
static int parse_branchname_arg(int argc, const char **argv,
				int dwim_new_local_branch_ok,
				struct branch_info *new,
924
				struct checkout_opts *opts,
925
				struct object_id *rev)
926
{
927 928
	struct tree **source_tree = &opts->source_tree;
	const char **new_branch = &opts->new_branch;
929
	int argcount = 0;
930
	struct object_id branch_rev;
931
	const char *arg;
932 933 934
	int dash_dash_pos;
	int has_dash_dash = 0;
	int i;
935 936 937 938 939 940 941 942 943 944 945

	/*
	 * 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.
	 *
946
	 * case 3: git checkout <something> [--]
947
	 *
948 949 950 951 952
	 *   (a) 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.
953
	 *
954
	 *   (b) If <something> is _not_ a commit, either "--" is present
J
Justin Lebar 已提交
955
	 *       or <something> is not a path, no -t or -b was given, and
956 957 958
	 *       and there is a tracking branch whose name is <something>
	 *       in one and only one remote, then this is a short-hand to
	 *       fork local <something> from that remote-tracking branch.
959
	 *
960 961 962 963 964 965 966 967 968 969
	 *   (c) Otherwise, if "--" is present, treat it like case (1).
	 *
	 *   (d) Otherwise :
	 *       - if it's a reference, treat it like case (1)
	 *       - else if it's a path, treat it like case (2)
	 *       - else: fail.
	 *
	 * case 4: git checkout <something> <paths>
	 *
	 *   The first argument must not be ambiguous.
970 971 972 973 974 975 976 977 978
	 *   - 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;

	arg = argv[0];
979 980 981 982 983 984 985 986 987 988 989 990 991
	dash_dash_pos = -1;
	for (i = 0; i < argc; i++) {
		if (!strcmp(argv[i], "--")) {
			dash_dash_pos = i;
			break;
		}
	}
	if (dash_dash_pos == 0)
		return 1; /* case (2) */
	else if (dash_dash_pos == 1)
		has_dash_dash = 1; /* case (3) or (1) */
	else if (dash_dash_pos >= 2)
		die(_("only one reference expected, %d given."), dash_dash_pos);
992 993 994 995

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

996
	if (get_oid_mb(arg, rev)) {
997 998 999 1000 1001 1002 1003 1004 1005 1006
		/*
		 * Either case (3) or (4), with <something> not being
		 * a commit, or an attempt to use case (1) with an
		 * invalid ref.
		 *
		 * It's likely an error, but we need to find out if
		 * we should auto-create the branch, case (3).(b).
		 */
		int recover_with_dwim = dwim_new_local_branch_ok;

1007
		if (!has_dash_dash &&
1008
		    (check_filename(opts->prefix, arg) || !no_wildcard(arg)))
1009 1010 1011 1012 1013 1014 1015 1016 1017 1018
			recover_with_dwim = 0;
		/*
		 * Accept "git checkout foo" and "git checkout foo --"
		 * as candidates for dwim.
		 */
		if (!(argc == 1 && !has_dash_dash) &&
		    !(argc == 2 && has_dash_dash))
			recover_with_dwim = 0;

		if (recover_with_dwim) {
1019
			const char *remote = unique_tracking_name(arg, rev);
1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031
			if (remote) {
				*new_branch = arg;
				arg = remote;
				/* DWIMmed to create local branch, case (3).(b) */
			} else {
				recover_with_dwim = 0;
			}
		}

		if (!recover_with_dwim) {
			if (has_dash_dash)
				die(_("invalid reference: %s"), arg);
1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043
			return argcount;
		}
	}

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

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

1044
	if (!check_refname_format(new->path, 0) &&
1045 1046
	    !read_ref(new->path, branch_rev.hash))
		oidcpy(rev, &branch_rev);
1047 1048 1049
	else
		new->path = NULL; /* not an existing branch */

1050
	new->commit = lookup_commit_reference_gently(rev->hash, 1);
1051 1052
	if (!new->commit) {
		/* not a commit */
1053
		*source_tree = parse_tree_indirect(rev->hash);
1054
	} else {
1055
		parse_commit_or_die(new->commit);
1056 1057 1058 1059
		*source_tree = new->commit->tree;
	}

	if (!*source_tree)                   /* case (1): want a tree */
J
Junio C Hamano 已提交
1060
		die(_("reference is not a tree: %s"), arg);
1061
	if (!has_dash_dash) {	/* case (3).(d) -> (1) */
1062 1063 1064 1065 1066 1067 1068
		/*
		 * 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)
1069
			verify_non_filename(opts->prefix, arg);
1070 1071 1072 1073 1074 1075 1076 1077 1078
	} else {
		argcount++;
		argv++;
		argc--;
	}

	return argcount;
}

1079
static int switch_unborn_to_new_branch(const struct checkout_opts *opts)
1080 1081 1082 1083
{
	int status;
	struct strbuf branch_ref = STRBUF_INIT;

1084 1085
	if (!opts->new_branch)
		die(_("You are on a branch yet to be born"));
1086 1087 1088
	strbuf_addf(&branch_ref, "refs/heads/%s", opts->new_branch);
	status = create_symref("HEAD", branch_ref.buf, "checkout -b");
	strbuf_release(&branch_ref);
1089 1090 1091
	if (!opts->quiet)
		fprintf(stderr, _("Switched to a new branch '%s'\n"),
			opts->new_branch);
1092 1093 1094
	return status;
}

1095 1096 1097
static int checkout_branch(struct checkout_opts *opts,
			   struct branch_info *new)
{
1098
	if (opts->pathspec.nr)
1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128
		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);

1129 1130
	if (new->path && !opts->force_detach && !opts->new_branch &&
	    !opts->ignore_other_worktrees) {
1131
		struct object_id oid;
1132
		int flag;
1133
		char *head_ref = resolve_refdup("HEAD", 0, oid.hash, &flag);
1134
		if (head_ref &&
1135
		    (!(flag & REF_ISSYMREF) || strcmp(head_ref, new->path)))
1136
			die_if_checked_out(new->path, 1);
1137 1138 1139
		free(head_ref);
	}

1140
	if (!new->commit && opts->new_branch) {
1141
		struct object_id rev;
1142 1143
		int flag;

1144 1145
		if (!read_ref_full("HEAD", 0, rev.hash, &flag) &&
		    (flag & REF_ISSYMREF) && is_null_oid(&rev))
1146 1147 1148 1149 1150
			return switch_unborn_to_new_branch(opts);
	}
	return switch_branches(opts, new);
}

D
Daniel Barkalow 已提交
1151 1152 1153 1154
int cmd_checkout(int argc, const char **argv, const char *prefix)
{
	struct checkout_opts opts;
	struct branch_info new;
1155
	char *conflict_style = NULL;
J
Junio C Hamano 已提交
1156
	int dwim_new_local_branch = 1;
D
Daniel Barkalow 已提交
1157
	struct option options[] = {
1158 1159 1160 1161 1162
		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")),
1163
		OPT_BOOL('l', NULL, &opts.new_branch_log, N_("create reflog for new branch")),
V
Vasco Almeida 已提交
1164
		OPT_BOOL(0, "detach", &opts.force_detach, N_("detach HEAD at named commit")),
1165
		OPT_SET_INT('t', "track",  &opts.track, N_("set upstream info for new branch"),
1166
			BRANCH_TRACK_EXPLICIT),
1167
		OPT_STRING(0, "orphan", &opts.new_orphan_branch, N_("new-branch"), N_("new unparented branch")),
1168
		OPT_SET_INT('2', "ours", &opts.writeout_stage, N_("checkout our version for unmerged files"),
1169
			    2),
1170
		OPT_SET_INT('3', "theirs", &opts.writeout_stage, N_("checkout their version for unmerged files"),
1171
			    3),
1172
		OPT__FORCE(&opts.force, N_("force checkout (throw away local modifications)")),
1173 1174
		OPT_BOOL('m', "merge", &opts.merge, N_("perform a 3-way merge with the new branch")),
		OPT_BOOL(0, "overwrite-ignore", &opts.overwrite_ignore, N_("update ignored files (default)")),
1175 1176
		OPT_STRING(0, "conflict", &conflict_style, N_("style"),
			   N_("conflict style (merge or diff3)")),
1177
		OPT_BOOL('p', "patch", &opts.patch_mode, N_("select hunks interactively")),
1178 1179
		OPT_BOOL(0, "ignore-skip-worktree-bits", &opts.ignore_skipworktree,
			 N_("do not limit pathspecs to sparse entries only")),
1180
		OPT_HIDDEN_BOOL(0, "guess", &dwim_new_local_branch,
1181
				N_("second guess 'git checkout <no-such-branch>'")),
1182 1183
		OPT_BOOL(0, "ignore-other-worktrees", &opts.ignore_other_worktrees,
			 N_("do not check if another worktree is holding the given ref")),
1184 1185 1186
		{ OPTION_CALLBACK, 0, "recurse-submodules", &recurse_submodules,
			    "checkout", "control recursive updating of submodules",
			    PARSE_OPT_OPTARG, option_parse_recurse_submodules },
1187
		OPT_BOOL(0, "progress", &opts.show_progress, N_("force progress reporting")),
1188
		OPT_END(),
D
Daniel Barkalow 已提交
1189 1190 1191 1192
	};

	memset(&opts, 0, sizeof(opts));
	memset(&new, 0, sizeof(new));
1193
	opts.overwrite_ignore = 1;
1194
	opts.prefix = prefix;
1195
	opts.show_progress = -1;
D
Daniel Barkalow 已提交
1196

1197
	gitmodules_config();
1198
	git_config(git_checkout_config, &opts);
D
Daniel Barkalow 已提交
1199

1200
	opts.track = BRANCH_TRACK_UNSPECIFIED;
D
Daniel Barkalow 已提交
1201

1202
	argc = parse_options(argc, argv, prefix, options, checkout_usage,
1203
			     PARSE_OPT_KEEP_DASHDASH);
1204

1205 1206 1207 1208 1209 1210 1211
	if (opts.show_progress < 0) {
		if (opts.quiet)
			opts.show_progress = 0;
		else
			opts.show_progress = isatty(2);
	}

1212 1213 1214 1215
	if (conflict_style) {
		opts.merge = 1; /* implied */
		git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
	}
T
Tay Ray Chuan 已提交
1216

1217 1218 1219 1220 1221 1222
	if (recurse_submodules != RECURSE_SUBMODULES_OFF) {
		git_config(submodule_config, NULL);
		if (recurse_submodules != RECURSE_SUBMODULES_DEFAULT)
			set_config_update_recurse_submodules(recurse_submodules);
	}

1223 1224
	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 已提交
1225

1226 1227 1228 1229 1230
	/*
	 * 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 已提交
1231 1232 1233
	if (opts.new_branch_force)
		opts.new_branch = opts.new_branch_force;

1234 1235
	if (opts.new_orphan_branch)
		opts.new_branch = opts.new_orphan_branch;
1236

1237 1238
	/* --track without -b/-B/--orphan should DWIM */
	if (opts.track != BRANCH_TRACK_UNSPECIFIED && !opts.new_branch) {
1239 1240
		const char *argv0 = argv[0];
		if (!argc || !strcmp(argv0, "--"))
1241
			die (_("--track needs a branch name"));
1242 1243
		skip_prefix(argv0, "refs/", &argv0);
		skip_prefix(argv0, "remotes/", &argv0);
1244 1245
		argv0 = strchr(argv0, '/');
		if (!argv0 || !argv0[1])
1246
			die (_("Missing branch name; try -b"));
1247
		opts.new_branch = argv0 + 1;
1248 1249
	}

1250
	/*
1251 1252
	 * Extract branch name from command line arguments, so
	 * all that is left is pathspecs.
1253
	 *
1254
	 * Handle
1255
	 *
1256 1257 1258
	 *  1) git checkout <tree> -- [<paths>]
	 *  2) git checkout -- [<paths>]
	 *  3) git checkout <something> [<paths>]
1259
	 *
1260 1261
	 * including "last branch" syntax and DWIM-ery for names of
	 * remote branches, erroring out for invalid or ambiguous cases.
1262
	 */
D
Daniel Barkalow 已提交
1263
	if (argc) {
1264
		struct object_id rev;
1265
		int dwim_ok =
1266
			!opts.patch_mode &&
1267 1268 1269
			dwim_new_local_branch &&
			opts.track == BRANCH_TRACK_UNSPECIFIED &&
			!opts.new_branch;
1270
		int n = parse_branchname_arg(argc, argv, dwim_ok,
1271
					     &new, &opts, &rev);
1272 1273
		argv += n;
		argc -= n;
D
Daniel Barkalow 已提交
1274 1275 1276
	}

	if (argc) {
1277 1278 1279
		parse_pathspec(&opts.pathspec, 0,
			       opts.patch_mode ? PATHSPEC_PREFIX_ORIGIN : 0,
			       prefix, argv);
1280

1281
		if (!opts.pathspec.nr)
1282
			die(_("invalid path specification"));
1283

1284 1285 1286 1287 1288 1289 1290 1291
		/*
		 * 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 已提交
1292

1293
		if (opts.force_detach)
1294 1295
			die(_("git checkout: --detach does not take a path argument '%s'"),
			    argv[0]);
1296

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

1302
	if (opts.new_branch) {
1303
		struct strbuf buf = STRBUF_INIT;
1304

1305 1306 1307 1308
		opts.branch_exists =
			validate_new_branchname(opts.new_branch, &buf,
						!!opts.new_branch_force,
						!!opts.new_branch_force);
1309

1310 1311 1312
		strbuf_release(&buf);
	}

1313
	if (opts.patch_mode || opts.pathspec.nr)
1314 1315 1316
		return checkout_paths(&opts, new.name);
	else
		return checkout_branch(&opts, &new);
D
Daniel Barkalow 已提交
1317
}