checkout.c 30.9 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"
D
Daniel Barkalow 已提交
22 23 24 25 26 27 28

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

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

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

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

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

D
Daniel Barkalow 已提交
58 59 60
}

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

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

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

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

116 117 118 119 120 121 122 123
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)
124
		return error(_("path '%s' does not have all three versions"),
125 126 127 128
			     ce->name);
	return 0;
}

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

144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
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)
159
		return error(_("path '%s' does not have all 3 versions"), path);
160

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

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

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

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

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

	if (source_tree)
		read_tree_some(source_tree, pathspec);

D
Daniel Barkalow 已提交
225 226 227 228 229 230
	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];
231
		match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
D
Daniel Barkalow 已提交
232 233
	}

234
	if (report_path_error(ps_matched, pathspec, prefix))
D
Daniel Barkalow 已提交
235 236
		return 1;

237 238 239 240
	/* "checkout -m path" to recreate conflicted state */
	if (opts->merge)
		unmerge_cache(pathspec);

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

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

282 283
	if (write_cache(newfd, active_cache, active_nr) ||
	    commit_locked_index(lock_file))
284
		die(_("unable to write new index file"));
285

D
Daniel Barkalow 已提交
286 287 288
	resolve_ref("HEAD", rev, 0, &flag);
	head = lookup_commit_reference_gently(rev, 1);

289 290
	errs |= post_checkout_hook(head, head, 0);
	return errs;
D
Daniel Barkalow 已提交
291 292
}

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

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

316
static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
D
Daniel Barkalow 已提交
317 318 319
{
	struct unpack_trees_options opts;
	struct tree_desc tree_desc;
320

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

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

359 360
	strbuf_branchname(&buf, branch->name);
	if (strcmp(buf.buf, branch->name))
361
		branch->name = xstrdup(buf.buf);
362
	strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
D
Daniel Barkalow 已提交
363 364 365 366
	branch->path = strbuf_detach(&buf, NULL);
}

static int merge_working_tree(struct checkout_opts *opts,
367
			      struct branch_info *old, struct branch_info *new)
D
Daniel Barkalow 已提交
368 369 370 371
{
	int ret;
	struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
	int newfd = hold_locked_index(lock_file, 1);
372

373
	if (read_cache_preload(NULL) < 0)
374
		return error(_("corrupt index file"));
D
Daniel Barkalow 已提交
375

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

D
Daniel Barkalow 已提交
386 387
		memset(&topts, 0, sizeof(topts));
		topts.head_idx = -1;
388 389
		topts.src_index = &the_index;
		topts.dst_index = &the_index;
D
Daniel Barkalow 已提交
390

391
		setup_unpack_trees_porcelain(&topts, "checkout");
392

D
Daniel Barkalow 已提交
393 394 395
		refresh_cache(REFRESH_QUIET);

		if (unmerged_cache()) {
396
			error(_("you need to resolve your current index first"));
397
			return 1;
D
Daniel Barkalow 已提交
398
		}
399 400

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

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

			/*
			 * 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 已提交
436 437 438 439 440 441 442 443 444 445 446 447 448 449

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

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

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

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

480
	if (!opts->force && !opts->quiet)
481
		show_local_changes(&new->commit->object, &opts->diff_options);
D
Daniel Barkalow 已提交
482 483 484 485

	return 0;
}

486
static void report_tracking(struct branch_info *new)
487
{
488
	struct strbuf sb = STRBUF_INIT;
489
	struct branch *branch = branch_get(new->name);
490

491
	if (!format_tracking_info(branch, &sb))
492
		return;
493 494
	fputs(sb.buf, stdout);
	strbuf_release(&sb);
495
}
496

497 498 499 500 501 502 503 504 505 506 507 508 509 510
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 已提交
511 512 513 514
static void update_refs_for_switch(struct checkout_opts *opts,
				   struct branch_info *old,
				   struct branch_info *new)
{
515
	struct strbuf msg = STRBUF_INIT;
D
Daniel Barkalow 已提交
516 517
	const char *old_desc;
	if (opts->new_branch) {
518 519 520
		if (opts->new_orphan_branch) {
			if (opts->new_branch_log && !log_all_ref_updates) {
				int temp;
521
				char log_file[PATH_MAX];
522 523 524 525
				char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);

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

	old_desc = old->name;
544
	if (!old_desc && old->commit)
D
Daniel Barkalow 已提交
545 546
		old_desc = sha1_to_hex(old->commit->object.sha1);
	strbuf_addf(&msg, "checkout: moving from %s to %s",
547
		    old_desc ? old_desc : "(invalid)", new->name);
D
Daniel Barkalow 已提交
548

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

591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611
struct rev_list_args {
	int argc;
	int alloc;
	const char **argv;
};

static void add_one_rev_list_arg(struct rev_list_args *args, const char *s)
{
	ALLOC_GROW(args->argv, args->argc + 1, args->alloc);
	args->argv[args->argc++] = s;
}

static int add_one_ref_to_rev_list_arg(const char *refname,
				       const unsigned char *sha1,
				       int flags,
				       void *cb_data)
{
	add_one_rev_list_arg(cb_data, refname);
	return 0;
}

612 613 614 615 616 617 618 619 620 621
static int clear_commit_marks_from_one_ref(const char *refname,
				      const unsigned char *sha1,
				      int flags,
				      void *cb_data)
{
	struct commit *commit = lookup_commit_reference_gently(sha1, 1);
	if (commit)
		clear_commit_marks(commit, -1);
	return 0;
}
622 623 624 625

static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
{
	parse_commit(commit);
626 627 628 629
	strbuf_addstr(sb, "  ");
	strbuf_addstr(sb,
		find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
	strbuf_addch(sb, ' ');
630
	pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650
	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
651
			strbuf_addf(&sb, _(" ... and %d more.\n"), more);
652 653 654
	}

	fprintf(stderr,
655 656 657 658 659 660 661 662 663 664 665
		Q_(
		/* The singular version */
		"Warning: you are leaving %d commit behind, "
		"not connected to\n"
		"any of your branches:\n\n"
		"%s\n"
		"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 */
		"Warning: you are leaving %d commits behind, "
666 667 668 669 670 671
		"not connected to\n"
		"any of your branches:\n\n"
		"%s\n"
		"If you want to keep them 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",
672 673 674
		/* Give ngettext() the count */
		lost),
		lost,
675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698
		sb.buf,
		sha1_to_hex(commit->object.sha1));
	strbuf_release(&sb);
}

/*
 * 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_list_args args = { 0, 0, NULL };
	struct rev_info revs;

	add_one_rev_list_arg(&args, "(internal)");
	add_one_rev_list_arg(&args, sha1_to_hex(commit->object.sha1));
	add_one_rev_list_arg(&args, "--not");
	for_each_ref(add_one_ref_to_rev_list_arg, &args);
	add_one_rev_list_arg(&args, "--");
	add_one_rev_list_arg(&args, NULL);

	init_revisions(&revs, NULL);
	if (setup_revisions(args.argc - 1, args.argv, &revs, NULL) != 1)
J
Junio C Hamano 已提交
699
		die(_("internal error: only -- alone should have been left"));
700
	if (prepare_revision_walk(&revs))
J
Junio C Hamano 已提交
701
		die(_("internal error in revision walk"));
702 703 704
	if (!(commit->object.flags & UNINTERESTING))
		suggest_reattach(commit, &revs);
	else
J
Junio C Hamano 已提交
705
		describe_detached_head(_("Previous HEAD position was"), commit);
706 707 708

	clear_commit_marks(commit, -1);
	for_each_ref(clear_commit_marks_from_one_ref, NULL);
709 710
}

711
static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
D
Daniel Barkalow 已提交
712 713 714 715 716 717
{
	int ret = 0;
	struct branch_info old;
	unsigned char rev[20];
	int flag;
	memset(&old, 0, sizeof(old));
718
	old.path = xstrdup(resolve_ref("HEAD", rev, 0, &flag));
D
Daniel Barkalow 已提交
719
	old.commit = lookup_commit_reference_gently(rev, 1);
720 721
	if (!(flag & REF_ISSYMREF)) {
		free((char *)old.path);
D
Daniel Barkalow 已提交
722
		old.path = NULL;
723
	}
D
Daniel Barkalow 已提交
724 725 726 727 728 729 730 731

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

736
	ret = merge_working_tree(opts, &old, new);
D
Daniel Barkalow 已提交
737 738 739
	if (ret)
		return ret;

740
	if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
741
		orphaned_commit_warning(old.commit);
742

D
Daniel Barkalow 已提交
743 744
	update_refs_for_switch(opts, &old, new);

745
	ret = post_checkout_hook(old.commit, new->commit, 1);
746
	free((char *)old.path);
747
	return ret || opts->writeout_error;
D
Daniel Barkalow 已提交
748 749
}

750 751
static int git_checkout_config(const char *var, const char *value, void *cb)
{
752 753 754 755 756
	if (!strcmp(var, "diff.ignoresubmodules")) {
		struct checkout_opts *opts = cb;
		handle_ignore_submodules_arg(&opts->diff_options, value);
		return 0;
	}
757 758 759 760

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

761
	return git_xmerge_config(var, value, NULL);
762 763
}

T
Thomas Rast 已提交
764 765 766 767 768 769
static int interactive_checkout(const char *revision, const char **pathspec,
				struct checkout_opts *opts)
{
	return run_add_interactive(revision, "--patch=checkout", pathspec);
}

770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796
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)
{
797 798
	struct tracking_name_data cb_data = { NULL, NULL, 1 };
	cb_data.name = name;
799 800 801 802 803 804
	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 已提交
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 833 834 835 836 837 838
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
839
	 *   to fork local <something> from that remote-tracking branch.
840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860
	 *
	 *   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 已提交
861
			die(_("invalid reference: %s"), arg);
862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883
		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);

884
	if (check_ref_format(new->path) == CHECK_REF_FORMAT_OK &&
885 886 887 888 889 890 891 892 893 894 895 896 897 898 899
	    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 已提交
900
		die(_("reference is not a tree: %s"), arg);
901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918
	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;
}

919 920 921 922 923 924 925 926 927 928 929
static int switch_unborn_to_new_branch(struct checkout_opts *opts)
{
	int status;
	struct strbuf branch_ref = STRBUF_INIT;

	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 已提交
930 931 932 933 934 935
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;
936
	char *conflict_style = NULL;
T
Thomas Rast 已提交
937
	int patch_mode = 0;
J
Junio C Hamano 已提交
938
	int dwim_new_local_branch = 1;
D
Daniel Barkalow 已提交
939
	struct option options[] = {
940
		OPT__QUIET(&opts.quiet, "suppress progress reporting"),
941 942
		OPT_STRING('b', NULL, &opts.new_branch, "branch",
			   "create and checkout a new branch"),
T
Tay Ray Chuan 已提交
943 944
		OPT_STRING('B', NULL, &opts.new_branch_force, "branch",
			   "create/reset and checkout a branch"),
945
		OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "create reflog for new branch"),
946
		OPT_BOOLEAN(0, "detach", &opts.force_detach, "detach the HEAD at named commit"),
947
		OPT_SET_INT('t', "track",  &opts.track, "set upstream info for new branch",
948
			BRANCH_TRACK_EXPLICIT),
949
		OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"),
950
		OPT_SET_INT('2', "ours", &opts.writeout_stage, "checkout our version for unmerged files",
951
			    2),
952
		OPT_SET_INT('3', "theirs", &opts.writeout_stage, "checkout their version for unmerged files",
953
			    3),
R
René Scharfe 已提交
954
		OPT__FORCE(&opts.force, "force checkout (throw away local modifications)"),
955
		OPT_BOOLEAN('m', "merge", &opts.merge, "perform a 3-way merge with the new branch"),
956 957
		OPT_STRING(0, "conflict", &conflict_style, "style",
			   "conflict style (merge or diff3)"),
T
Thomas Rast 已提交
958
		OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
J
Junio C Hamano 已提交
959 960 961
		{ OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
		  "second guess 'git checkout no-such-branch'",
		  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
962
		OPT_END(),
D
Daniel Barkalow 已提交
963 964 965 966 967
	};

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

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

971
	opts.track = BRANCH_TRACK_UNSPECIFIED;
D
Daniel Barkalow 已提交
972

973
	argc = parse_options(argc, argv, prefix, options, checkout_usage,
974
			     PARSE_OPT_KEEP_DASHDASH);
975

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

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

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

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

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

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

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

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

1050 1051 1052
	if (opts.track == BRANCH_TRACK_UNSPECIFIED)
		opts.track = git_branch_track;

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

		if (!pathspec)
1057
			die(_("invalid path specification"));
1058

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

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

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

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

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

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

1083
	if (opts.new_branch) {
1084
		struct strbuf buf = STRBUF_INIT;
1085
		if (strbuf_check_branch_ref(&buf, opts.new_branch))
1086
			die(_("git checkout: we do not like '%s' as a branch name."),
1087
			    opts.new_branch);
1088
		if (ref_exists(buf.buf)) {
T
Tay Ray Chuan 已提交
1089 1090
			opts.branch_exists = 1;
			if (!opts.new_branch_force)
1091
				die(_("git checkout: branch %s already exists"),
T
Tay Ray Chuan 已提交
1092 1093
				    opts.new_branch);
		}
1094 1095 1096
		strbuf_release(&buf);
	}

D
Daniel Barkalow 已提交
1097
	if (new.name && !new.commit) {
1098
		die(_("Cannot switch branch to a non-commit."));
D
Daniel Barkalow 已提交
1099
	}
1100
	if (opts.writeout_stage)
1101
		die(_("--ours/--theirs is incompatible with switching branches."));
D
Daniel Barkalow 已提交
1102

1103 1104 1105 1106 1107 1108 1109 1110
	if (!new.commit) {
		unsigned char rev[20];
		int flag;

		resolve_ref("HEAD", rev, 0, &flag);
		if ((flag & REF_ISSYMREF) && is_null_sha1(rev))
			return switch_unborn_to_new_branch(&opts);
	}
1111
	return switch_branches(&opts, &new);
D
Daniel Barkalow 已提交
1112
}