checkout.c 30.3 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 31 32 33
struct checkout_opts {
	int quiet;
	int merge;
	int force;
34
	int force_detach;
35
	int writeout_stage;
36
	int writeout_error;
37
	int overwrite_ignore;
38

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

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

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

D
Daniel Barkalow 已提交
60 61 62
}

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

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

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

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

119
static int check_stages(unsigned stages, struct cache_entry *ce, int pos)
120
{
121 122 123 124 125 126 127 128 129 130 131 132 133
	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);
134 135 136
	return 0;
}

137 138 139 140 141 142 143 144 145
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++;
	}
146 147 148 149
	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);
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;
160
	unsigned char threeway[3][20];
161
	unsigned mode = 0;
162

163 164 165 166 167 168 169 170 171 172 173 174 175 176
	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);
177

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

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

	/*
	 * NEEDSWORK:
	 * There is absolutely no reason to write this as a blob object
M
Mike Ralphson 已提交
199
	 * and create a phony cache entry just to leak.  This hack is
200 201 202 203 204 205 206 207 208 209
	 * 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))
210
		die(_("Unable to add merge result for '%s'"), path);
211
	ce = make_cache_entry(mode, sha1, path, 2, 0);
212
	if (!ce)
213
		die(_("make_cache_entry failed for path '%s'"), path);
214 215 216
	status = checkout_entry(ce, state, NULL);
	return status;
}
217

218
static int checkout_paths(struct tree *source_tree, const char **pathspec,
219
			  const char *prefix, struct checkout_opts *opts)
D
Daniel Barkalow 已提交
220 221 222 223 224 225 226
{
	int pos;
	struct checkout state;
	static char *ps_matched;
	unsigned char rev[20];
	int flag;
	struct commit *head;
227
	int errs = 0;
228
	int stage = opts->writeout_stage;
229
	int merge = opts->merge;
230 231 232 233
	int newfd;
	struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));

	newfd = hold_locked_index(lock_file, 1);
234
	if (read_cache_preload(pathspec) < 0)
235
		return error(_("corrupt index file"));
236 237 238 239

	if (source_tree)
		read_tree_some(source_tree, pathspec);

D
Daniel Barkalow 已提交
240 241 242 243 244 245
	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];
246 247
		if (source_tree && !(ce->ce_flags & CE_UPDATE))
			continue;
248
		match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
D
Daniel Barkalow 已提交
249 250
	}

251
	if (report_path_error(ps_matched, pathspec, prefix))
D
Daniel Barkalow 已提交
252 253
		return 1;

254 255 256 257
	/* "checkout -m path" to recreate conflicted state */
	if (opts->merge)
		unmerge_cache(pathspec);

258 259 260
	/* Any unmerged paths? */
	for (pos = 0; pos < active_nr; pos++) {
		struct cache_entry *ce = active_cache[pos];
261
		if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
262 263
			if (!ce_stage(ce))
				continue;
264
			if (opts->force) {
265
				warning(_("path '%s' is unmerged"), ce->name);
266 267
			} else if (stage) {
				errs |= check_stage(stage, ce, pos);
268
			} else if (opts->merge) {
269
				errs |= check_stages((1<<2) | (1<<3), ce, pos);
270 271
			} else {
				errs = 1;
272
				error(_("path '%s' is unmerged"), ce->name);
273
			}
274 275 276 277 278 279
			pos = skip_same_name(ce, pos) - 1;
		}
	}
	if (errs)
		return 1;

280
	/* Now we are committed to check them out */
D
Daniel Barkalow 已提交
281 282 283 284 285
	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];
286 287
		if (source_tree && !(ce->ce_flags & CE_UPDATE))
			continue;
288
		if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
289 290 291 292
			if (!ce_stage(ce)) {
				errs |= checkout_entry(ce, &state, NULL);
				continue;
			}
293 294
			if (stage)
				errs |= checkout_stage(stage, ce, pos, &state);
295 296
			else if (merge)
				errs |= checkout_merged(pos, &state);
297
			pos = skip_same_name(ce, pos) - 1;
D
Daniel Barkalow 已提交
298 299 300
		}
	}

301 302
	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_locked_index(lock_file))
303
		die(_("unable to write new index file"));
304

305
	read_ref_full("HEAD", rev, 0, &flag);
D
Daniel Barkalow 已提交
306 307
	head = lookup_commit_reference_gently(rev, 1);

308 309
	errs |= post_checkout_hook(head, head, 0);
	return errs;
D
Daniel Barkalow 已提交
310 311
}

312
static void show_local_changes(struct object *head, struct diff_options *opts)
D
Daniel Barkalow 已提交
313 314 315 316
{
	struct rev_info rev;
	/* I think we want full paths, even if we're in a subdirectory. */
	init_revisions(&rev, NULL);
317
	rev.diffopt.flags = opts->flags;
D
Daniel Barkalow 已提交
318
	rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
T
Thomas Rast 已提交
319
	diff_setup_done(&rev.diffopt);
D
Daniel Barkalow 已提交
320 321 322 323
	add_pending_object(&rev, head, NULL);
	run_diff_index(&rev, 0);
}

324
static void describe_detached_head(const char *msg, struct commit *commit)
D
Daniel Barkalow 已提交
325
{
326
	struct strbuf sb = STRBUF_INIT;
D
Daniel Barkalow 已提交
327
	parse_commit(commit);
328
	pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
D
Daniel Barkalow 已提交
329 330 331 332 333
	fprintf(stderr, "%s %s... %s\n", msg,
		find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
	strbuf_release(&sb);
}

334
static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
D
Daniel Barkalow 已提交
335 336 337
{
	struct unpack_trees_options opts;
	struct tree_desc tree_desc;
338

D
Daniel Barkalow 已提交
339 340
	memset(&opts, 0, sizeof(opts));
	opts.head_idx = -1;
341 342
	opts.update = worktree;
	opts.skip_unmerged = !worktree;
D
Daniel Barkalow 已提交
343 344 345
	opts.reset = 1;
	opts.merge = 1;
	opts.fn = oneway_merge;
346
	opts.verbose_update = !o->quiet && isatty(2);
347 348
	opts.src_index = &the_index;
	opts.dst_index = &the_index;
D
Daniel Barkalow 已提交
349 350
	parse_tree(tree);
	init_tree_desc(&tree_desc, tree->buffer, tree->size);
351 352 353 354 355 356 357 358 359 360 361 362
	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:
363
		return 128;
364
	}
D
Daniel Barkalow 已提交
365 366 367 368 369 370 371 372 373 374
}

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

377 378
	strbuf_branchname(&buf, branch->name);
	if (strcmp(buf.buf, branch->name))
379
		branch->name = xstrdup(buf.buf);
380
	strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
D
Daniel Barkalow 已提交
381 382 383 384
	branch->path = strbuf_detach(&buf, NULL);
}

static int merge_working_tree(struct checkout_opts *opts,
385
			      struct branch_info *old, struct branch_info *new)
D
Daniel Barkalow 已提交
386 387 388 389
{
	int ret;
	struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
	int newfd = hold_locked_index(lock_file, 1);
390

391
	if (read_cache_preload(NULL) < 0)
392
		return error(_("corrupt index file"));
D
Daniel Barkalow 已提交
393

394
	resolve_undo_clear();
D
Daniel Barkalow 已提交
395
	if (opts->force) {
396
		ret = reset_tree(new->commit->tree, opts, 1);
D
Daniel Barkalow 已提交
397 398 399 400 401 402
		if (ret)
			return ret;
	} else {
		struct tree_desc trees[2];
		struct tree *tree;
		struct unpack_trees_options topts;
403

D
Daniel Barkalow 已提交
404 405
		memset(&topts, 0, sizeof(topts));
		topts.head_idx = -1;
406 407
		topts.src_index = &the_index;
		topts.dst_index = &the_index;
D
Daniel Barkalow 已提交
408

409
		setup_unpack_trees_porcelain(&topts, "checkout");
410

D
Daniel Barkalow 已提交
411 412 413
		refresh_cache(REFRESH_QUIET);

		if (unmerged_cache()) {
414
			error(_("you need to resolve your current index first"));
415
			return 1;
D
Daniel Barkalow 已提交
416
		}
417 418

		/* 2-way merge to the new branch */
419
		topts.initial_checkout = is_cache_unborn();
420 421
		topts.update = 1;
		topts.merge = 1;
422
		topts.gently = opts->merge && old->commit;
423
		topts.verbose_update = !opts->quiet && isatty(2);
424
		topts.fn = twoway_merge;
425 426 427 428 429
		if (opts->overwrite_ignore) {
			topts.dir = xcalloc(1, sizeof(*topts.dir));
			topts.dir->flags |= DIR_SHOW_IGNORED;
			setup_standard_excludes(topts.dir);
		}
430 431
		tree = parse_tree_indirect(old->commit ?
					   old->commit->object.sha1 :
432
					   EMPTY_TREE_SHA1_BIN);
433 434 435 436
		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);

437
		ret = unpack_trees(2, trees, &topts);
438
		if (ret == -1) {
D
Daniel Barkalow 已提交
439 440 441 442 443 444 445
			/*
			 * 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;
446
			struct merge_options o;
D
Daniel Barkalow 已提交
447 448
			if (!opts->merge)
				return 1;
449 450 451 452 453 454 455

			/*
			 * 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 已提交
456 457 458 459 460 461 462 463 464 465 466 467 468 469

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

470
			add_files_to_cache(NULL, NULL, 0);
J
Jonathan Nieder 已提交
471 472 473 474 475 476 477
			/*
			 * 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?
			 */
478 479 480
			init_merge_options(&o);
			o.verbosity = 0;
			work = write_tree_from_memory(&o);
D
Daniel Barkalow 已提交
481

482
			ret = reset_tree(new->commit->tree, opts, 1);
D
Daniel Barkalow 已提交
483 484
			if (ret)
				return ret;
485
			o.ancestor = old->name;
486 487 488 489
			o.branch1 = new->name;
			o.branch2 = "local";
			merge_trees(&o, new->commit->tree, work,
				old->commit->tree, &result);
490
			ret = reset_tree(new->commit->tree, opts, 0);
491 492
			if (ret)
				return ret;
D
Daniel Barkalow 已提交
493 494 495 496 497
		}
	}

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

500
	if (!opts->force && !opts->quiet)
501
		show_local_changes(&new->commit->object, &opts->diff_options);
D
Daniel Barkalow 已提交
502 503 504 505

	return 0;
}

506
static void report_tracking(struct branch_info *new)
507
{
508
	struct strbuf sb = STRBUF_INIT;
509
	struct branch *branch = branch_get(new->name);
510

511
	if (!format_tracking_info(branch, &sb))
512
		return;
513 514
	fputs(sb.buf, stdout);
	strbuf_release(&sb);
515
}
516

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

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

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

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

604 605 606
static int add_pending_uninteresting_ref(const char *refname,
					 const unsigned char *sha1,
					 int flags, void *cb_data)
607
{
608
	add_pending_sha1(cb_data, refname, sha1, UNINTERESTING);
609 610
	return 0;
}
611 612 613 614

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

	fprintf(stderr,
644 645 646 647 648
		Q_(
		/* The singular version */
		"Warning: you are leaving %d commit behind, "
		"not connected to\n"
		"any of your branches:\n\n"
649
		"%s\n",
650 651
		/* The plural version */
		"Warning: you are leaving %d commits behind, "
652 653
		"not connected to\n"
		"any of your branches:\n\n"
654
		"%s\n",
655 656 657
		/* Give ngettext() the count */
		lost),
		lost,
658
		sb.buf);
659
	strbuf_release(&sb);
660 661 662

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

/*
 * 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.
 */
675
static void orphaned_commit_warning(struct commit *old, struct commit *new)
676 677
{
	struct rev_info revs;
678
	struct object *object = &old->object;
R
René Scharfe 已提交
679
	struct object_array refs;
680 681

	init_revisions(&revs, NULL);
682 683 684 685 686 687
	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);
688
	add_pending_sha1(&revs, "HEAD", new->object.sha1, UNINTERESTING);
689

R
René Scharfe 已提交
690 691 692
	refs = revs.pending;
	revs.leak_pending = 1;

693
	if (prepare_revision_walk(&revs))
J
Junio C Hamano 已提交
694
		die(_("internal error in revision walk"));
695 696
	if (!(old->object.flags & UNINTERESTING))
		suggest_reattach(old, &revs);
697
	else
698
		describe_detached_head(_("Previous HEAD position was"), old);
699

700
	clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS);
R
René Scharfe 已提交
701
	free(refs.objects);
702 703
}

704
static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
D
Daniel Barkalow 已提交
705 706 707
{
	int ret = 0;
	struct branch_info old;
708
	void *path_to_free;
D
Daniel Barkalow 已提交
709 710 711
	unsigned char rev[20];
	int flag;
	memset(&old, 0, sizeof(old));
712
	old.path = path_to_free = resolve_refdup("HEAD", rev, 0, &flag);
D
Daniel Barkalow 已提交
713
	old.commit = lookup_commit_reference_gently(rev, 1);
714
	if (!(flag & REF_ISSYMREF))
D
Daniel Barkalow 已提交
715 716 717 718 719 720 721 722 723
		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)
724
			die(_("You are on a branch yet to be born"));
D
Daniel Barkalow 已提交
725 726 727
		parse_commit(new->commit);
	}

728
	ret = merge_working_tree(opts, &old, new);
729 730
	if (ret) {
		free(path_to_free);
D
Daniel Barkalow 已提交
731
		return ret;
732
	}
D
Daniel Barkalow 已提交
733

734
	if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
735
		orphaned_commit_warning(old.commit, new->commit);
736

D
Daniel Barkalow 已提交
737 738
	update_refs_for_switch(opts, &old, new);

739
	ret = post_checkout_hook(old.commit, new->commit, 1);
740
	free(path_to_free);
741
	return ret || opts->writeout_error;
D
Daniel Barkalow 已提交
742 743
}

744 745
static int git_checkout_config(const char *var, const char *value, void *cb)
{
746 747 748 749 750
	if (!strcmp(var, "diff.ignoresubmodules")) {
		struct checkout_opts *opts = cb;
		handle_ignore_submodules_arg(&opts->diff_options, value);
		return 0;
	}
751 752 753 754

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

755
	return git_xmerge_config(var, value, NULL);
756 757
}

T
Thomas Rast 已提交
758 759 760 761 762 763
static int interactive_checkout(const char *revision, const char **pathspec,
				struct checkout_opts *opts)
{
	return run_add_interactive(revision, "--patch=checkout", pathspec);
}

764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790
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)
{
791 792
	struct tracking_name_data cb_data = { NULL, NULL, 1 };
	cb_data.name = name;
793 794 795 796 797 798
	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 已提交
799

800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832
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
833
	 *   to fork local <something> from that remote-tracking branch.
834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854
	 *
	 *   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 已提交
855
			die(_("invalid reference: %s"), arg);
856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877
		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);

878
	if (!check_refname_format(new->path, 0) &&
879
	    !read_ref(new->path, branch_rev))
880 881 882 883 884 885 886 887 888 889 890 891 892 893
		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 已提交
894
		die(_("reference is not a tree: %s"), arg);
895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912
	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;
}

913 914 915 916 917
static int switch_unborn_to_new_branch(struct checkout_opts *opts)
{
	int status;
	struct strbuf branch_ref = STRBUF_INIT;

918 919
	if (!opts->new_branch)
		die(_("You are on a branch yet to be born"));
920 921 922 923 924 925
	strbuf_addf(&branch_ref, "refs/heads/%s", opts->new_branch);
	status = create_symref("HEAD", branch_ref.buf, "checkout -b");
	strbuf_release(&branch_ref);
	return status;
}

D
Daniel Barkalow 已提交
926 927 928 929 930 931
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;
932
	char *conflict_style = NULL;
T
Thomas Rast 已提交
933
	int patch_mode = 0;
J
Junio C Hamano 已提交
934
	int dwim_new_local_branch = 1;
D
Daniel Barkalow 已提交
935
	struct option options[] = {
936 937 938 939 940 941 942 943
		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"),
944
			BRANCH_TRACK_EXPLICIT),
945 946
		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"),
947
			    2),
948
		OPT_SET_INT('3', "theirs", &opts.writeout_stage, N_("checkout their version for unmerged files"),
949
			    3),
950 951 952 953 954 955
		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)")),
		OPT_BOOLEAN('p', "patch", &patch_mode, N_("select hunks interactively")),
J
Junio C Hamano 已提交
956
		{ OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
957
		  N_("second guess 'git checkout no-such-branch'"),
J
Junio C Hamano 已提交
958
		  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
959
		OPT_END(),
D
Daniel Barkalow 已提交
960 961 962 963
	};

	memset(&opts, 0, sizeof(opts));
	memset(&new, 0, sizeof(new));
964
	opts.overwrite_ignore = 1;
D
Daniel Barkalow 已提交
965

966
	gitmodules_config();
967
	git_config(git_checkout_config, &opts);
D
Daniel Barkalow 已提交
968

969
	opts.track = BRANCH_TRACK_UNSPECIFIED;
D
Daniel Barkalow 已提交
970

971
	argc = parse_options(argc, argv, prefix, options, checkout_usage,
972
			     PARSE_OPT_KEEP_DASHDASH);
973

T
Tay Ray Chuan 已提交
974 975
	/* we can assume from now on new_branch = !new_branch_force */
	if (opts.new_branch && opts.new_branch_force)
976
		die(_("-B cannot be used with -b"));
T
Tay Ray Chuan 已提交
977 978 979 980 981

	/* 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 已提交
982
	if (patch_mode && (opts.track > 0 || opts.new_branch
983 984
			   || opts.new_branch_log || opts.merge || opts.force
			   || opts.force_detach))
985
		die (_("--patch is incompatible with all other options"));
T
Thomas Rast 已提交
986

987
	if (opts.force_detach && (opts.new_branch || opts.new_orphan_branch))
988
		die(_("--detach cannot be used with -b/-B/--orphan"));
989
	if (opts.force_detach && 0 < opts.track)
990
		die(_("--detach cannot be used with -t"));
991

992
	/* --track without -b should DWIM */
993 994 995
	if (0 < opts.track && !opts.new_branch) {
		const char *argv0 = argv[0];
		if (!argc || !strcmp(argv0, "--"))
996
			die (_("--track needs a branch name"));
997 998 999 1000 1001 1002
		if (!prefixcmp(argv0, "refs/"))
			argv0 += 5;
		if (!prefixcmp(argv0, "remotes/"))
			argv0 += 8;
		argv0 = strchr(argv0, '/');
		if (!argv0 || !argv0[1])
1003
			die (_("Missing branch name; try -b"));
1004
		opts.new_branch = argv0 + 1;
1005 1006
	}

1007 1008
	if (opts.new_orphan_branch) {
		if (opts.new_branch)
1009
			die(_("--orphan and -b|-B are mutually exclusive"));
1010
		if (opts.track > 0)
1011
			die(_("--orphan cannot be used with -t"));
1012 1013 1014
		opts.new_branch = opts.new_orphan_branch;
	}

1015 1016 1017 1018 1019
	if (conflict_style) {
		opts.merge = 1; /* implied */
		git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
	}

1020
	if (opts.force && opts.merge)
1021
		die(_("git checkout: -f and -m are incompatible"));
1022 1023

	/*
1024 1025
	 * Extract branch name from command line arguments, so
	 * all that is left is pathspecs.
1026
	 *
1027
	 * Handle
1028
	 *
1029 1030 1031
	 *  1) git checkout <tree> -- [<paths>]
	 *  2) git checkout -- [<paths>]
	 *  3) git checkout <something> [<paths>]
1032
	 *
1033 1034
	 * including "last branch" syntax and DWIM-ery for names of
	 * remote branches, erroring out for invalid or ambiguous cases.
1035
	 */
D
Daniel Barkalow 已提交
1036
	if (argc) {
1037 1038 1039 1040 1041
		int dwim_ok =
			!patch_mode &&
			dwim_new_local_branch &&
			opts.track == BRANCH_TRACK_UNSPECIFIED &&
			!opts.new_branch;
1042
		int n = parse_branchname_arg(argc, argv, dwim_ok,
1043 1044 1045
				&new, &source_tree, rev, &opts.new_branch);
		argv += n;
		argc -= n;
D
Daniel Barkalow 已提交
1046 1047
	}

1048 1049 1050
	if (opts.track == BRANCH_TRACK_UNSPECIFIED)
		opts.track = git_branch_track;

D
Daniel Barkalow 已提交
1051 1052
	if (argc) {
		const char **pathspec = get_pathspec(prefix, argv);
1053 1054

		if (!pathspec)
1055
			die(_("invalid path specification"));
1056

T
Thomas Rast 已提交
1057 1058 1059
		if (patch_mode)
			return interactive_checkout(new.name, pathspec, &opts);

D
Daniel Barkalow 已提交
1060
		/* Checkout paths */
1061
		if (opts.new_branch) {
D
Daniel Barkalow 已提交
1062
			if (argc == 1) {
1063
				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 已提交
1064
			} else {
1065
				die(_("git checkout: updating paths is incompatible with switching branches."));
D
Daniel Barkalow 已提交
1066 1067 1068
			}
		}

1069
		if (opts.force_detach)
1070
			die(_("git checkout: --detach does not take a path argument"));
1071

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

1075
		return checkout_paths(source_tree, pathspec, prefix, &opts);
D
Daniel Barkalow 已提交
1076 1077
	}

T
Thomas Rast 已提交
1078 1079 1080
	if (patch_mode)
		return interactive_checkout(new.name, NULL, &opts);

1081
	if (opts.new_branch) {
1082
		struct strbuf buf = STRBUF_INIT;
1083

1084
		opts.branch_exists = validate_new_branchname(opts.new_branch, &buf,
1085 1086
							     !!opts.new_branch_force,
							     !!opts.new_branch_force);
1087

1088 1089 1090
		strbuf_release(&buf);
	}

D
Daniel Barkalow 已提交
1091
	if (new.name && !new.commit) {
1092
		die(_("Cannot switch branch to a non-commit."));
D
Daniel Barkalow 已提交
1093
	}
1094
	if (opts.writeout_stage)
1095
		die(_("--ours/--theirs is incompatible with switching branches."));
D
Daniel Barkalow 已提交
1096

1097
	if (!new.commit && opts.new_branch) {
1098 1099 1100
		unsigned char rev[20];
		int flag;

1101 1102
		if (!read_ref_full("HEAD", rev, 0, &flag) &&
		    (flag & REF_ISSYMREF) && is_null_sha1(rev))
1103 1104
			return switch_unborn_to_new_branch(&opts);
	}
1105
	return switch_branches(&opts, &new);
D
Daniel Barkalow 已提交
1106
}