checkout.c 29.7 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 25 26 27 28 29

static const char * const checkout_usage[] = {
	"git checkout [options] <branch>",
	"git checkout [options] [<branch>] -- <file>...",
	NULL,
};

30 31 32 33
struct checkout_opts {
	int quiet;
	int merge;
	int force;
34
	int force_detach;
35
	int writeout_stage;
36 37
	int writeout_error;

T
Tay Ray Chuan 已提交
38 39 40
	/* not set by parse_options */
	int branch_exists;

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

D
Daniel Barkalow 已提交
49 50 51
static int post_checkout_hook(struct commit *old, struct commit *new,
			      int changed)
{
52 53 54 55
	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);
56 57
	/* "new" can be NULL when checking out from the index before
	   a commit exists. */
58

D
Daniel Barkalow 已提交
59 60 61
}

static int update_some(const unsigned char *sha1, const char *base, int baselen,
62
		const char *pathname, unsigned mode, int stage, void *context)
D
Daniel Barkalow 已提交
63 64 65 66 67 68 69 70 71 72 73 74
{
	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);
75
	ce->ce_flags = create_ce_flags(len, 0) | CE_UPDATE;
D
Daniel Barkalow 已提交
76 77 78 79 80 81 82
	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)
{
83 84 85 86
	struct pathspec ps;
	init_pathspec(&ps, pathspec);
	read_tree_recursive(tree, "", 0, 0, &ps, update_some, NULL);
	free_pathspec(&ps);
D
Daniel Barkalow 已提交
87 88 89 90 91 92 93 94

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

95 96 97 98 99 100 101 102
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;
}

103 104 105 106 107 108 109 110
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++;
	}
111 112 113 114
	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);
115 116
}

117 118 119 120 121 122 123 124
static int check_all_stages(struct cache_entry *ce, int pos)
{
	if (ce_stage(ce) != 1 ||
	    active_nr <= pos + 2 ||
	    strcmp(active_cache[pos+1]->name, ce->name) ||
	    ce_stage(active_cache[pos+1]) != 2 ||
	    strcmp(active_cache[pos+2]->name, ce->name) ||
	    ce_stage(active_cache[pos+2]) != 3)
125
		return error(_("path '%s' does not have all three versions"),
126 127 128 129
			     ce->name);
	return 0;
}

130 131 132 133 134 135 136 137 138
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++;
	}
139 140 141 142
	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);
143
}
144

145 146 147 148 149 150 151 152 153 154 155 156 157 158 159
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;

	if (ce_stage(ce) != 1 ||
	    active_nr <= pos + 2 ||
	    strcmp(active_cache[pos+1]->name, path) ||
	    ce_stage(active_cache[pos+1]) != 2 ||
	    strcmp(active_cache[pos+2]->name, path) ||
	    ce_stage(active_cache[pos+2]) != 3)
160
		return error(_("path '%s' does not have all 3 versions"), path);
161

162 163 164
	read_mmblob(&ancestor, active_cache[pos]->sha1);
	read_mmblob(&ours, active_cache[pos+1]->sha1);
	read_mmblob(&theirs, active_cache[pos+2]->sha1);
165

166 167 168 169
	/*
	 * NEEDSWORK: re-create conflicts from merges with
	 * merge.renormalize set, too
	 */
170
	status = ll_merge(&result_buf, path, &ancestor, "base",
171
			  &ours, "ours", &theirs, "theirs", NULL);
172 173 174 175 176
	free(ancestor.ptr);
	free(ours.ptr);
	free(theirs.ptr);
	if (status < 0 || !result_buf.ptr) {
		free(result_buf.ptr);
177
		return error(_("path '%s': cannot merge"), path);
178 179 180 181 182
	}

	/*
	 * NEEDSWORK:
	 * There is absolutely no reason to write this as a blob object
M
Mike Ralphson 已提交
183
	 * and create a phony cache entry just to leak.  This hack is
184 185 186 187 188 189 190 191 192 193
	 * 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))
194
		die(_("Unable to add merge result for '%s'"), path);
195 196 197
	ce = make_cache_entry(create_ce_mode(active_cache[pos+1]->ce_mode),
			      sha1,
			      path, 2, 0);
198
	if (!ce)
199
		die(_("make_cache_entry failed for path '%s'"), path);
200 201 202
	status = checkout_entry(ce, state, NULL);
	return status;
}
203

204
static int checkout_paths(struct tree *source_tree, const char **pathspec,
205
			  const char *prefix, struct checkout_opts *opts)
D
Daniel Barkalow 已提交
206 207 208 209 210 211 212
{
	int pos;
	struct checkout state;
	static char *ps_matched;
	unsigned char rev[20];
	int flag;
	struct commit *head;
213
	int errs = 0;
214
	int stage = opts->writeout_stage;
215
	int merge = opts->merge;
216 217 218 219
	int newfd;
	struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));

	newfd = hold_locked_index(lock_file, 1);
220
	if (read_cache_preload(pathspec) < 0)
221
		return error(_("corrupt index file"));
222 223 224 225

	if (source_tree)
		read_tree_some(source_tree, pathspec);

D
Daniel Barkalow 已提交
226 227 228 229 230 231
	for (pos = 0; pathspec[pos]; pos++)
		;
	ps_matched = xcalloc(1, pos);

	for (pos = 0; pos < active_nr; pos++) {
		struct cache_entry *ce = active_cache[pos];
232 233
		if (source_tree && !(ce->ce_flags & CE_UPDATE))
			continue;
234
		match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
D
Daniel Barkalow 已提交
235 236
	}

237
	if (report_path_error(ps_matched, pathspec, prefix))
D
Daniel Barkalow 已提交
238 239
		return 1;

240 241 242 243
	/* "checkout -m path" to recreate conflicted state */
	if (opts->merge)
		unmerge_cache(pathspec);

244 245 246
	/* Any unmerged paths? */
	for (pos = 0; pos < active_nr; pos++) {
		struct cache_entry *ce = active_cache[pos];
247
		if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
248 249
			if (!ce_stage(ce))
				continue;
250
			if (opts->force) {
251
				warning(_("path '%s' is unmerged"), ce->name);
252 253
			} else if (stage) {
				errs |= check_stage(stage, ce, pos);
254 255
			} else if (opts->merge) {
				errs |= check_all_stages(ce, pos);
256 257
			} else {
				errs = 1;
258
				error(_("path '%s' is unmerged"), ce->name);
259
			}
260 261 262 263 264 265
			pos = skip_same_name(ce, pos) - 1;
		}
	}
	if (errs)
		return 1;

266
	/* Now we are committed to check them out */
D
Daniel Barkalow 已提交
267 268 269 270 271
	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];
272 273
		if (source_tree && !(ce->ce_flags & CE_UPDATE))
			continue;
274
		if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
275 276 277 278
			if (!ce_stage(ce)) {
				errs |= checkout_entry(ce, &state, NULL);
				continue;
			}
279 280
			if (stage)
				errs |= checkout_stage(stage, ce, pos, &state);
281 282
			else if (merge)
				errs |= checkout_merged(pos, &state);
283
			pos = skip_same_name(ce, pos) - 1;
D
Daniel Barkalow 已提交
284 285 286
		}
	}

287 288
	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_locked_index(lock_file))
289
		die(_("unable to write new index file"));
290

D
Daniel Barkalow 已提交
291 292 293
	resolve_ref("HEAD", rev, 0, &flag);
	head = lookup_commit_reference_gently(rev, 1);

294 295
	errs |= post_checkout_hook(head, head, 0);
	return errs;
D
Daniel Barkalow 已提交
296 297
}

298
static void show_local_changes(struct object *head, struct diff_options *opts)
D
Daniel Barkalow 已提交
299 300 301 302
{
	struct rev_info rev;
	/* I think we want full paths, even if we're in a subdirectory. */
	init_revisions(&rev, NULL);
303
	rev.diffopt.flags = opts->flags;
D
Daniel Barkalow 已提交
304
	rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
305
	if (diff_setup_done(&rev.diffopt) < 0)
306
		die(_("diff_setup_done failed"));
D
Daniel Barkalow 已提交
307 308 309 310
	add_pending_object(&rev, head, NULL);
	run_diff_index(&rev, 0);
}

311
static void describe_detached_head(const char *msg, struct commit *commit)
D
Daniel Barkalow 已提交
312
{
313
	struct strbuf sb = STRBUF_INIT;
D
Daniel Barkalow 已提交
314
	parse_commit(commit);
315
	pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
D
Daniel Barkalow 已提交
316 317 318 319 320
	fprintf(stderr, "%s %s... %s\n", msg,
		find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
	strbuf_release(&sb);
}

321
static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
D
Daniel Barkalow 已提交
322 323 324
{
	struct unpack_trees_options opts;
	struct tree_desc tree_desc;
325

D
Daniel Barkalow 已提交
326 327
	memset(&opts, 0, sizeof(opts));
	opts.head_idx = -1;
328 329
	opts.update = worktree;
	opts.skip_unmerged = !worktree;
D
Daniel Barkalow 已提交
330 331 332
	opts.reset = 1;
	opts.merge = 1;
	opts.fn = oneway_merge;
333
	opts.verbose_update = !o->quiet;
334 335
	opts.src_index = &the_index;
	opts.dst_index = &the_index;
D
Daniel Barkalow 已提交
336 337
	parse_tree(tree);
	init_tree_desc(&tree_desc, tree->buffer, tree->size);
338 339 340 341 342 343 344 345 346 347 348 349
	switch (unpack_trees(1, &tree_desc, &opts)) {
	case -2:
		o->writeout_error = 1;
		/*
		 * 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:
350
		return 128;
351
	}
D
Daniel Barkalow 已提交
352 353 354 355 356 357 358 359 360 361
}

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)
{
362
	struct strbuf buf = STRBUF_INIT;
363

364 365
	strbuf_branchname(&buf, branch->name);
	if (strcmp(buf.buf, branch->name))
366
		branch->name = xstrdup(buf.buf);
367
	strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
D
Daniel Barkalow 已提交
368 369 370 371
	branch->path = strbuf_detach(&buf, NULL);
}

static int merge_working_tree(struct checkout_opts *opts,
372
			      struct branch_info *old, struct branch_info *new)
D
Daniel Barkalow 已提交
373 374 375 376
{
	int ret;
	struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
	int newfd = hold_locked_index(lock_file, 1);
377

378
	if (read_cache_preload(NULL) < 0)
379
		return error(_("corrupt index file"));
D
Daniel Barkalow 已提交
380

381
	resolve_undo_clear();
D
Daniel Barkalow 已提交
382
	if (opts->force) {
383
		ret = reset_tree(new->commit->tree, opts, 1);
D
Daniel Barkalow 已提交
384 385 386 387 388 389
		if (ret)
			return ret;
	} else {
		struct tree_desc trees[2];
		struct tree *tree;
		struct unpack_trees_options topts;
390

D
Daniel Barkalow 已提交
391 392
		memset(&topts, 0, sizeof(topts));
		topts.head_idx = -1;
393 394
		topts.src_index = &the_index;
		topts.dst_index = &the_index;
D
Daniel Barkalow 已提交
395

396
		setup_unpack_trees_porcelain(&topts, "checkout");
397

D
Daniel Barkalow 已提交
398 399 400
		refresh_cache(REFRESH_QUIET);

		if (unmerged_cache()) {
401
			error(_("you need to resolve your current index first"));
402
			return 1;
D
Daniel Barkalow 已提交
403
		}
404 405

		/* 2-way merge to the new branch */
406
		topts.initial_checkout = is_cache_unborn();
407 408
		topts.update = 1;
		topts.merge = 1;
409
		topts.gently = opts->merge && old->commit;
410 411 412
		topts.verbose_update = !opts->quiet;
		topts.fn = twoway_merge;
		topts.dir = xcalloc(1, sizeof(*topts.dir));
413
		topts.dir->flags |= DIR_SHOW_IGNORED;
414
		setup_standard_excludes(topts.dir);
415 416
		tree = parse_tree_indirect(old->commit ?
					   old->commit->object.sha1 :
417
					   EMPTY_TREE_SHA1_BIN);
418 419 420 421
		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);

422
		ret = unpack_trees(2, trees, &topts);
423
		if (ret == -1) {
D
Daniel Barkalow 已提交
424 425 426 427 428 429 430
			/*
			 * 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;
431
			struct merge_options o;
D
Daniel Barkalow 已提交
432 433
			if (!opts->merge)
				return 1;
434 435 436 437 438 439 440

			/*
			 * 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 已提交
441 442 443 444 445 446 447 448 449 450 451 452 453 454

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

455
			add_files_to_cache(NULL, NULL, 0);
J
Jonathan Nieder 已提交
456 457 458 459 460 461 462
			/*
			 * 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?
			 */
463 464 465
			init_merge_options(&o);
			o.verbosity = 0;
			work = write_tree_from_memory(&o);
D
Daniel Barkalow 已提交
466

467
			ret = reset_tree(new->commit->tree, opts, 1);
D
Daniel Barkalow 已提交
468 469
			if (ret)
				return ret;
470
			o.ancestor = old->name;
471 472 473 474
			o.branch1 = new->name;
			o.branch2 = "local";
			merge_trees(&o, new->commit->tree, work,
				old->commit->tree, &result);
475
			ret = reset_tree(new->commit->tree, opts, 0);
476 477
			if (ret)
				return ret;
D
Daniel Barkalow 已提交
478 479 480 481 482
		}
	}

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

485
	if (!opts->force && !opts->quiet)
486
		show_local_changes(&new->commit->object, &opts->diff_options);
D
Daniel Barkalow 已提交
487 488 489 490

	return 0;
}

491
static void report_tracking(struct branch_info *new)
492
{
493
	struct strbuf sb = STRBUF_INIT;
494
	struct branch *branch = branch_get(new->name);
495

496
	if (!format_tracking_info(branch, &sb))
497
		return;
498 499
	fputs(sb.buf, stdout);
	strbuf_release(&sb);
500
}
501

502 503 504 505 506 507 508 509 510 511 512 513 514 515
static void detach_advice(const char *old_path, const char *new_name)
{
	const char fmt[] =
	"Note: checking out '%s'.\n\n"
	"You are in 'detached HEAD' state. You can look around, make experimental\n"
	"changes and commit them, and you can discard any commits you make in this\n"
	"state without impacting any branches by performing another checkout.\n\n"
	"If you want to create a new branch to retain commits you create, you may\n"
	"do so (now or later) by using -b with the checkout command again. Example:\n\n"
	"  git checkout -b new_branch_name\n\n";

	fprintf(stderr, fmt, new_name);
}

D
Daniel Barkalow 已提交
516 517 518 519
static void update_refs_for_switch(struct checkout_opts *opts,
				   struct branch_info *old,
				   struct branch_info *new)
{
520
	struct strbuf msg = STRBUF_INIT;
D
Daniel Barkalow 已提交
521 522
	const char *old_desc;
	if (opts->new_branch) {
523 524 525
		if (opts->new_orphan_branch) {
			if (opts->new_branch_log && !log_all_ref_updates) {
				int temp;
526
				char log_file[PATH_MAX];
527 528 529 530
				char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);

				temp = log_all_ref_updates;
				log_all_ref_updates = 1;
531
				if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
532
					fprintf(stderr, _("Can not do reflog for '%s'\n"),
533 534 535 536 537 538 539 540
					    opts->new_orphan_branch);
					log_all_ref_updates = temp;
					return;
				}
				log_all_ref_updates = temp;
			}
		}
		else
T
Tay Ray Chuan 已提交
541 542
			create_branch(old->name, opts->new_branch, new->name,
				      opts->new_branch_force ? 1 : 0,
543
				      opts->new_branch_log, opts->track);
D
Daniel Barkalow 已提交
544 545 546 547 548
		new->name = opts->new_branch;
		setup_branch_path(new);
	}

	old_desc = old->name;
549
	if (!old_desc && old->commit)
D
Daniel Barkalow 已提交
550 551
		old_desc = sha1_to_hex(old->commit->object.sha1);
	strbuf_addf(&msg, "checkout: moving from %s to %s",
552
		    old_desc ? old_desc : "(invalid)", new->name);
D
Daniel Barkalow 已提交
553

554 555 556 557 558 559 560 561
	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)
				detach_advice(old->path, new->name);
J
Junio C Hamano 已提交
562
			describe_detached_head(_("HEAD is now at"), new->commit);
563 564
		}
	} else if (new->path) {	/* Switch branches. */
D
Daniel Barkalow 已提交
565 566
		create_symref("HEAD", new->path, msg.buf);
		if (!opts->quiet) {
567
			if (old->path && !strcmp(new->path, old->path)) {
568
				fprintf(stderr, _("Already on '%s'\n"),
D
Daniel Barkalow 已提交
569
					new->name);
570 571 572 573 574 575
			} 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 {
576
				fprintf(stderr, _("Switched to branch '%s'\n"),
577
					new->name);
578
			}
D
Daniel Barkalow 已提交
579
		}
580 581 582 583 584 585 586 587
		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 已提交
588 589 590
	}
	remove_branch_state();
	strbuf_release(&msg);
591 592
	if (!opts->quiet &&
	    (new->path || (!opts->force_detach && !strcmp(new->name, "HEAD"))))
593
		report_tracking(new);
D
Daniel Barkalow 已提交
594 595
}

596 597 598
static int add_pending_uninteresting_ref(const char *refname,
					 const unsigned char *sha1,
					 int flags, void *cb_data)
599
{
600
	add_pending_sha1(cb_data, refname, sha1, flags | UNINTERESTING);
601 602
	return 0;
}
603 604 605 606

static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
{
	parse_commit(commit);
607 608 609 610
	strbuf_addstr(sb, "  ");
	strbuf_addstr(sb,
		find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
	strbuf_addch(sb, ' ');
611
	pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631
	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
632
			strbuf_addf(&sb, _(" ... and %d more.\n"), more);
633 634 635
	}

	fprintf(stderr,
636 637 638 639 640
		Q_(
		/* The singular version */
		"Warning: you are leaving %d commit behind, "
		"not connected to\n"
		"any of your branches:\n\n"
641
		"%s\n",
642 643
		/* The plural version */
		"Warning: you are leaving %d commits behind, "
644 645
		"not connected to\n"
		"any of your branches:\n\n"
646
		"%s\n",
647 648 649
		/* Give ngettext() the count */
		lost),
		lost,
650
		sb.buf);
651
	strbuf_release(&sb);
652 653 654

	if (advice_detached_head)
		fprintf(stderr,
655
			_(
656 657
			"If you want to keep them by creating a new branch, "
			"this may be a good time\nto do so with:\n\n"
658
			" git branch new_branch_name %s\n\n"),
659
			sha1_to_hex(commit->object.sha1));
660 661 662 663 664 665 666 667 668 669
}

/*
 * 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.
 */
static void orphaned_commit_warning(struct commit *commit)
{
	struct rev_info revs;
670
	struct object *object = &commit->object;
R
René Scharfe 已提交
671
	struct object_array refs;
672 673

	init_revisions(&revs, NULL);
674 675 676 677 678 679 680
	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);

R
René Scharfe 已提交
681 682 683
	refs = revs.pending;
	revs.leak_pending = 1;

684
	if (prepare_revision_walk(&revs))
J
Junio C Hamano 已提交
685
		die(_("internal error in revision walk"));
686 687 688
	if (!(commit->object.flags & UNINTERESTING))
		suggest_reattach(commit, &revs);
	else
J
Junio C Hamano 已提交
689
		describe_detached_head(_("Previous HEAD position was"), commit);
690

691
	clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS);
R
René Scharfe 已提交
692
	free(refs.objects);
693 694
}

695
static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
D
Daniel Barkalow 已提交
696 697 698 699 700 701
{
	int ret = 0;
	struct branch_info old;
	unsigned char rev[20];
	int flag;
	memset(&old, 0, sizeof(old));
702
	old.path = xstrdup(resolve_ref("HEAD", rev, 0, &flag));
D
Daniel Barkalow 已提交
703
	old.commit = lookup_commit_reference_gently(rev, 1);
704 705
	if (!(flag & REF_ISSYMREF)) {
		free((char *)old.path);
D
Daniel Barkalow 已提交
706
		old.path = NULL;
707
	}
D
Daniel Barkalow 已提交
708 709 710 711 712 713 714 715

	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)
716
			die(_("You are on a branch yet to be born"));
D
Daniel Barkalow 已提交
717 718 719
		parse_commit(new->commit);
	}

720
	ret = merge_working_tree(opts, &old, new);
D
Daniel Barkalow 已提交
721 722 723
	if (ret)
		return ret;

724
	if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
725
		orphaned_commit_warning(old.commit);
726

D
Daniel Barkalow 已提交
727 728
	update_refs_for_switch(opts, &old, new);

729
	ret = post_checkout_hook(old.commit, new->commit, 1);
730
	free((char *)old.path);
731
	return ret || opts->writeout_error;
D
Daniel Barkalow 已提交
732 733
}

734 735
static int git_checkout_config(const char *var, const char *value, void *cb)
{
736 737 738 739 740
	if (!strcmp(var, "diff.ignoresubmodules")) {
		struct checkout_opts *opts = cb;
		handle_ignore_submodules_arg(&opts->diff_options, value);
		return 0;
	}
741 742 743 744

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

745
	return git_xmerge_config(var, value, NULL);
746 747
}

T
Thomas Rast 已提交
748 749 750 751 752 753
static int interactive_checkout(const char *revision, const char **pathspec,
				struct checkout_opts *opts)
{
	return run_add_interactive(revision, "--patch=checkout", pathspec);
}

754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780
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)
{
781 782
	struct tracking_name_data cb_data = { NULL, NULL, 1 };
	cb_data.name = name;
783 784 785 786 787 788
	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 已提交
789

790 791 792 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 822
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
823
	 *   to fork local <something> from that remote-tracking branch.
824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844
	 *
	 *   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 已提交
845
			die(_("invalid reference: %s"), arg);
846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867
		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);

868
	if (!check_refname_format(new->path, 0) &&
869 870 871 872 873 874 875 876 877 878 879 880 881 882 883
	    resolve_ref(new->path, branch_rev, 1, NULL))
		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 已提交
884
		die(_("reference is not a tree: %s"), arg);
885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902
	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;
}

D
Daniel Barkalow 已提交
903 904 905 906 907 908
int cmd_checkout(int argc, const char **argv, const char *prefix)
{
	struct checkout_opts opts;
	unsigned char rev[20];
	struct branch_info new;
	struct tree *source_tree = NULL;
909
	char *conflict_style = NULL;
T
Thomas Rast 已提交
910
	int patch_mode = 0;
J
Junio C Hamano 已提交
911
	int dwim_new_local_branch = 1;
D
Daniel Barkalow 已提交
912
	struct option options[] = {
913
		OPT__QUIET(&opts.quiet, "suppress progress reporting"),
914 915
		OPT_STRING('b', NULL, &opts.new_branch, "branch",
			   "create and checkout a new branch"),
T
Tay Ray Chuan 已提交
916 917
		OPT_STRING('B', NULL, &opts.new_branch_force, "branch",
			   "create/reset and checkout a branch"),
918
		OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "create reflog for new branch"),
919
		OPT_BOOLEAN(0, "detach", &opts.force_detach, "detach the HEAD at named commit"),
920
		OPT_SET_INT('t', "track",  &opts.track, "set upstream info for new branch",
921
			BRANCH_TRACK_EXPLICIT),
922
		OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"),
923
		OPT_SET_INT('2', "ours", &opts.writeout_stage, "checkout our version for unmerged files",
924
			    2),
925
		OPT_SET_INT('3', "theirs", &opts.writeout_stage, "checkout their version for unmerged files",
926
			    3),
R
René Scharfe 已提交
927
		OPT__FORCE(&opts.force, "force checkout (throw away local modifications)"),
928
		OPT_BOOLEAN('m', "merge", &opts.merge, "perform a 3-way merge with the new branch"),
929 930
		OPT_STRING(0, "conflict", &conflict_style, "style",
			   "conflict style (merge or diff3)"),
T
Thomas Rast 已提交
931
		OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
J
Junio C Hamano 已提交
932 933 934
		{ OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
		  "second guess 'git checkout no-such-branch'",
		  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
935
		OPT_END(),
D
Daniel Barkalow 已提交
936 937 938 939 940
	};

	memset(&opts, 0, sizeof(opts));
	memset(&new, 0, sizeof(new));

941
	gitmodules_config();
942
	git_config(git_checkout_config, &opts);
D
Daniel Barkalow 已提交
943

944
	opts.track = BRANCH_TRACK_UNSPECIFIED;
D
Daniel Barkalow 已提交
945

946
	argc = parse_options(argc, argv, prefix, options, checkout_usage,
947
			     PARSE_OPT_KEEP_DASHDASH);
948

T
Tay Ray Chuan 已提交
949 950
	/* we can assume from now on new_branch = !new_branch_force */
	if (opts.new_branch && opts.new_branch_force)
951
		die(_("-B cannot be used with -b"));
T
Tay Ray Chuan 已提交
952 953 954 955 956

	/* copy -B over to -b, so that we can just check the latter */
	if (opts.new_branch_force)
		opts.new_branch = opts.new_branch_force;

T
Thomas Rast 已提交
957
	if (patch_mode && (opts.track > 0 || opts.new_branch
958 959
			   || opts.new_branch_log || opts.merge || opts.force
			   || opts.force_detach))
960
		die (_("--patch is incompatible with all other options"));
T
Thomas Rast 已提交
961

962
	if (opts.force_detach && (opts.new_branch || opts.new_orphan_branch))
963
		die(_("--detach cannot be used with -b/-B/--orphan"));
964
	if (opts.force_detach && 0 < opts.track)
965
		die(_("--detach cannot be used with -t"));
966

967
	/* --track without -b should DWIM */
968 969 970
	if (0 < opts.track && !opts.new_branch) {
		const char *argv0 = argv[0];
		if (!argc || !strcmp(argv0, "--"))
971
			die (_("--track needs a branch name"));
972 973 974 975 976 977
		if (!prefixcmp(argv0, "refs/"))
			argv0 += 5;
		if (!prefixcmp(argv0, "remotes/"))
			argv0 += 8;
		argv0 = strchr(argv0, '/');
		if (!argv0 || !argv0[1])
978
			die (_("Missing branch name; try -b"));
979
		opts.new_branch = argv0 + 1;
980 981
	}

982 983
	if (opts.new_orphan_branch) {
		if (opts.new_branch)
984
			die(_("--orphan and -b|-B are mutually exclusive"));
985
		if (opts.track > 0)
986
			die(_("--orphan cannot be used with -t"));
987 988 989
		opts.new_branch = opts.new_orphan_branch;
	}

990 991 992 993 994
	if (conflict_style) {
		opts.merge = 1; /* implied */
		git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
	}

995
	if (opts.force && opts.merge)
996
		die(_("git checkout: -f and -m are incompatible"));
997 998

	/*
999 1000
	 * Extract branch name from command line arguments, so
	 * all that is left is pathspecs.
1001
	 *
1002
	 * Handle
1003
	 *
1004 1005 1006
	 *  1) git checkout <tree> -- [<paths>]
	 *  2) git checkout -- [<paths>]
	 *  3) git checkout <something> [<paths>]
1007
	 *
1008 1009
	 * including "last branch" syntax and DWIM-ery for names of
	 * remote branches, erroring out for invalid or ambiguous cases.
1010
	 */
D
Daniel Barkalow 已提交
1011
	if (argc) {
1012 1013 1014 1015 1016
		int dwim_ok =
			!patch_mode &&
			dwim_new_local_branch &&
			opts.track == BRANCH_TRACK_UNSPECIFIED &&
			!opts.new_branch;
1017
		int n = parse_branchname_arg(argc, argv, dwim_ok,
1018 1019 1020
				&new, &source_tree, rev, &opts.new_branch);
		argv += n;
		argc -= n;
D
Daniel Barkalow 已提交
1021 1022
	}

1023 1024 1025
	if (opts.track == BRANCH_TRACK_UNSPECIFIED)
		opts.track = git_branch_track;

D
Daniel Barkalow 已提交
1026 1027
	if (argc) {
		const char **pathspec = get_pathspec(prefix, argv);
1028 1029

		if (!pathspec)
1030
			die(_("invalid path specification"));
1031

T
Thomas Rast 已提交
1032 1033 1034
		if (patch_mode)
			return interactive_checkout(new.name, pathspec, &opts);

D
Daniel Barkalow 已提交
1035
		/* Checkout paths */
1036
		if (opts.new_branch) {
D
Daniel Barkalow 已提交
1037
			if (argc == 1) {
1038
				die(_("git checkout: updating paths is incompatible with switching branches.\nDid you intend to checkout '%s' which can not be resolved as commit?"), argv[0]);
D
Daniel Barkalow 已提交
1039
			} else {
1040
				die(_("git checkout: updating paths is incompatible with switching branches."));
D
Daniel Barkalow 已提交
1041 1042 1043
			}
		}

1044
		if (opts.force_detach)
1045
			die(_("git checkout: --detach does not take a path argument"));
1046

1047
		if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge)
1048
			die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index."));
1049

1050
		return checkout_paths(source_tree, pathspec, prefix, &opts);
D
Daniel Barkalow 已提交
1051 1052
	}

T
Thomas Rast 已提交
1053 1054 1055
	if (patch_mode)
		return interactive_checkout(new.name, NULL, &opts);

1056
	if (opts.new_branch) {
1057
		struct strbuf buf = STRBUF_INIT;
1058

1059 1060
		opts.branch_exists = validate_new_branchname(opts.new_branch, &buf,
							     !!opts.new_branch_force, 0);
1061

1062 1063 1064
		strbuf_release(&buf);
	}

D
Daniel Barkalow 已提交
1065
	if (new.name && !new.commit) {
1066
		die(_("Cannot switch branch to a non-commit."));
D
Daniel Barkalow 已提交
1067
	}
1068
	if (opts.writeout_stage)
1069
		die(_("--ours/--theirs is incompatible with switching branches."));
D
Daniel Barkalow 已提交
1070

1071
	return switch_branches(&opts, &new);
D
Daniel Barkalow 已提交
1072
}