1#include "cache.h"
2#include "builtin.h"
3#include "parse-options.h"
4#include "refs.h"
5#include "commit.h"
6#include "tree.h"
7#include "tree-walk.h"
8#include "cache-tree.h"
9#include "unpack-trees.h"
10#include "dir.h"
11#include "run-command.h"
12#include "merge-recursive.h"
13#include "branch.h"
14#include "diff.h"
15#include "revision.h"
16#include "remote.h"
17#include "blob.h"
18#include "xdiff-interface.h"
19#include "ll-merge.h"
20#include "resolve-undo.h"
21#include "submodule.h"
22#include "argv-array.h"
23
24static const char * const checkout_usage[] = {
25 "git checkout [options] <branch>",
26 "git checkout [options] [<branch>] -- <file>...",
27 NULL,
28};
29
30struct checkout_opts {
31 int quiet;
32 int merge;
33 int force;
34 int force_detach;
35 int writeout_stage;
36 int writeout_error;
37 int overwrite_ignore;
38
39 /* not set by parse_options */
40 int branch_exists;
41
42 const char *new_branch;
43 const char *new_branch_force;
44 const char *new_orphan_branch;
45 int new_branch_log;
46 enum branch_track track;
47 struct diff_options diff_options;
48};
49
50static int post_checkout_hook(struct commit *old, struct commit *new,
51 int changed)
52{
53 return run_hook(NULL, "post-checkout",
54 sha1_to_hex(old ? old->object.sha1 : null_sha1),
55 sha1_to_hex(new ? new->object.sha1 : null_sha1),
56 changed ? "1" : "0", NULL);
57 /* "new" can be NULL when checking out from the index before
58 a commit exists. */
59
60}
61
62static int update_some(const unsigned char *sha1, const char *base, int baselen,
63 const char *pathname, unsigned mode, int stage, void *context)
64{
65 int len;
66 struct cache_entry *ce;
67
68 if (S_ISDIR(mode))
69 return READ_TREE_RECURSIVE;
70
71 len = baselen + strlen(pathname);
72 ce = xcalloc(1, cache_entry_size(len));
73 hashcpy(ce->sha1, sha1);
74 memcpy(ce->name, base, baselen);
75 memcpy(ce->name + baselen, pathname, len - baselen);
76 ce->ce_flags = create_ce_flags(len, 0) | CE_UPDATE;
77 ce->ce_mode = create_ce_mode(mode);
78 add_cache_entry(ce, ADD_CACHE_OK_TO_ADD | ADD_CACHE_OK_TO_REPLACE);
79 return 0;
80}
81
82static int read_tree_some(struct tree *tree, const char **pathspec)
83{
84 struct pathspec ps;
85 init_pathspec(&ps, pathspec);
86 read_tree_recursive(tree, "", 0, 0, &ps, update_some, NULL);
87 free_pathspec(&ps);
88
89 /* update the index with the given tree's info
90 * for all args, expanding wildcards, and exit
91 * with any non-zero return code.
92 */
93 return 0;
94}
95
96static int skip_same_name(struct cache_entry *ce, int pos)
97{
98 while (++pos < active_nr &&
99 !strcmp(active_cache[pos]->name, ce->name))
100 ; /* skip */
101 return pos;
102}
103
104static int check_stage(int stage, struct cache_entry *ce, int pos)
105{
106 while (pos < active_nr &&
107 !strcmp(active_cache[pos]->name, ce->name)) {
108 if (ce_stage(active_cache[pos]) == stage)
109 return 0;
110 pos++;
111 }
112 if (stage == 2)
113 return error(_("path '%s' does not have our version"), ce->name);
114 else
115 return error(_("path '%s' does not have their version"), ce->name);
116}
117
118static int check_all_stages(struct cache_entry *ce, int pos)
119{
120 if (ce_stage(ce) != 1 ||
121 active_nr <= pos + 2 ||
122 strcmp(active_cache[pos+1]->name, ce->name) ||
123 ce_stage(active_cache[pos+1]) != 2 ||
124 strcmp(active_cache[pos+2]->name, ce->name) ||
125 ce_stage(active_cache[pos+2]) != 3)
126 return error(_("path '%s' does not have all three versions"),
127 ce->name);
128 return 0;
129}
130
131static int checkout_stage(int stage, struct cache_entry *ce, int pos,
132 struct checkout *state)
133{
134 while (pos < active_nr &&
135 !strcmp(active_cache[pos]->name, ce->name)) {
136 if (ce_stage(active_cache[pos]) == stage)
137 return checkout_entry(active_cache[pos], state, NULL);
138 pos++;
139 }
140 if (stage == 2)
141 return error(_("path '%s' does not have our version"), ce->name);
142 else
143 return error(_("path '%s' does not have their version"), ce->name);
144}
145
146static int checkout_merged(int pos, struct checkout *state)
147{
148 struct cache_entry *ce = active_cache[pos];
149 const char *path = ce->name;
150 mmfile_t ancestor, ours, theirs;
151 int status;
152 unsigned char sha1[20];
153 mmbuffer_t result_buf;
154
155 if (ce_stage(ce) != 1 ||
156 active_nr <= pos + 2 ||
157 strcmp(active_cache[pos+1]->name, path) ||
158 ce_stage(active_cache[pos+1]) != 2 ||
159 strcmp(active_cache[pos+2]->name, path) ||
160 ce_stage(active_cache[pos+2]) != 3)
161 return error(_("path '%s' does not have all 3 versions"), path);
162
163 read_mmblob(&ancestor, active_cache[pos]->sha1);
164 read_mmblob(&ours, active_cache[pos+1]->sha1);
165 read_mmblob(&theirs, active_cache[pos+2]->sha1);
166
167 /*
168 * NEEDSWORK: re-create conflicts from merges with
169 * merge.renormalize set, too
170 */
171 status = ll_merge(&result_buf, path, &ancestor, "base",
172 &ours, "ours", &theirs, "theirs", NULL);
173 free(ancestor.ptr);
174 free(ours.ptr);
175 free(theirs.ptr);
176 if (status < 0 || !result_buf.ptr) {
177 free(result_buf.ptr);
178 return error(_("path '%s': cannot merge"), path);
179 }
180
181 /*
182 * NEEDSWORK:
183 * There is absolutely no reason to write this as a blob object
184 * and create a phony cache entry just to leak. This hack is
185 * primarily to get to the write_entry() machinery that massages
186 * the contents to work-tree format and writes out which only
187 * allows it for a cache entry. The code in write_entry() needs
188 * to be refactored to allow us to feed a <buffer, size, mode>
189 * instead of a cache entry. Such a refactoring would help
190 * merge_recursive as well (it also writes the merge result to the
191 * object database even when it may contain conflicts).
192 */
193 if (write_sha1_file(result_buf.ptr, result_buf.size,
194 blob_type, sha1))
195 die(_("Unable to add merge result for '%s'"), path);
196 ce = make_cache_entry(create_ce_mode(active_cache[pos+1]->ce_mode),
197 sha1,
198 path, 2, 0);
199 if (!ce)
200 die(_("make_cache_entry failed for path '%s'"), path);
201 status = checkout_entry(ce, state, NULL);
202 return status;
203}
204
205static int checkout_paths(struct tree *source_tree, const char **pathspec,
206 const char *prefix, struct checkout_opts *opts)
207{
208 int pos;
209 struct checkout state;
210 static char *ps_matched;
211 unsigned char rev[20];
212 int flag;
213 struct commit *head;
214 int errs = 0;
215 int stage = opts->writeout_stage;
216 int merge = opts->merge;
217 int newfd;
218 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
219
220 newfd = hold_locked_index(lock_file, 1);
221 if (read_cache_preload(pathspec) < 0)
222 return error(_("corrupt index file"));
223
224 if (source_tree)
225 read_tree_some(source_tree, pathspec);
226
227 for (pos = 0; pathspec[pos]; pos++)
228 ;
229 ps_matched = xcalloc(1, pos);
230
231 for (pos = 0; pos < active_nr; pos++) {
232 struct cache_entry *ce = active_cache[pos];
233 if (source_tree && !(ce->ce_flags & CE_UPDATE))
234 continue;
235 match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
236 }
237
238 if (report_path_error(ps_matched, pathspec, prefix))
239 return 1;
240
241 /* "checkout -m path" to recreate conflicted state */
242 if (opts->merge)
243 unmerge_cache(pathspec);
244
245 /* Any unmerged paths? */
246 for (pos = 0; pos < active_nr; pos++) {
247 struct cache_entry *ce = active_cache[pos];
248 if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
249 if (!ce_stage(ce))
250 continue;
251 if (opts->force) {
252 warning(_("path '%s' is unmerged"), ce->name);
253 } else if (stage) {
254 errs |= check_stage(stage, ce, pos);
255 } else if (opts->merge) {
256 errs |= check_all_stages(ce, pos);
257 } else {
258 errs = 1;
259 error(_("path '%s' is unmerged"), ce->name);
260 }
261 pos = skip_same_name(ce, pos) - 1;
262 }
263 }
264 if (errs)
265 return 1;
266
267 /* Now we are committed to check them out */
268 memset(&state, 0, sizeof(state));
269 state.force = 1;
270 state.refresh_cache = 1;
271 for (pos = 0; pos < active_nr; pos++) {
272 struct cache_entry *ce = active_cache[pos];
273 if (source_tree && !(ce->ce_flags & CE_UPDATE))
274 continue;
275 if (match_pathspec(pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
276 if (!ce_stage(ce)) {
277 errs |= checkout_entry(ce, &state, NULL);
278 continue;
279 }
280 if (stage)
281 errs |= checkout_stage(stage, ce, pos, &state);
282 else if (merge)
283 errs |= checkout_merged(pos, &state);
284 pos = skip_same_name(ce, pos) - 1;
285 }
286 }
287
288 if (write_cache(newfd, active_cache, active_nr) ||
289 commit_locked_index(lock_file))
290 die(_("unable to write new index file"));
291
292 resolve_ref("HEAD", rev, 0, &flag);
293 head = lookup_commit_reference_gently(rev, 1);
294
295 errs |= post_checkout_hook(head, head, 0);
296 return errs;
297}
298
299static void show_local_changes(struct object *head, struct diff_options *opts)
300{
301 struct rev_info rev;
302 /* I think we want full paths, even if we're in a subdirectory. */
303 init_revisions(&rev, NULL);
304 rev.diffopt.flags = opts->flags;
305 rev.diffopt.output_format |= DIFF_FORMAT_NAME_STATUS;
306 if (diff_setup_done(&rev.diffopt) < 0)
307 die(_("diff_setup_done failed"));
308 add_pending_object(&rev, head, NULL);
309 run_diff_index(&rev, 0);
310}
311
312static void describe_detached_head(const char *msg, struct commit *commit)
313{
314 struct strbuf sb = STRBUF_INIT;
315 parse_commit(commit);
316 pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
317 fprintf(stderr, "%s %s... %s\n", msg,
318 find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
319 strbuf_release(&sb);
320}
321
322static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
323{
324 struct unpack_trees_options opts;
325 struct tree_desc tree_desc;
326
327 memset(&opts, 0, sizeof(opts));
328 opts.head_idx = -1;
329 opts.update = worktree;
330 opts.skip_unmerged = !worktree;
331 opts.reset = 1;
332 opts.merge = 1;
333 opts.fn = oneway_merge;
334 opts.verbose_update = !o->quiet;
335 opts.src_index = &the_index;
336 opts.dst_index = &the_index;
337 parse_tree(tree);
338 init_tree_desc(&tree_desc, tree->buffer, tree->size);
339 switch (unpack_trees(1, &tree_desc, &opts)) {
340 case -2:
341 o->writeout_error = 1;
342 /*
343 * We return 0 nevertheless, as the index is all right
344 * and more importantly we have made best efforts to
345 * update paths in the work tree, and we cannot revert
346 * them.
347 */
348 case 0:
349 return 0;
350 default:
351 return 128;
352 }
353}
354
355struct branch_info {
356 const char *name; /* The short name used */
357 const char *path; /* The full name of a real branch */
358 struct commit *commit; /* The named commit */
359};
360
361static void setup_branch_path(struct branch_info *branch)
362{
363 struct strbuf buf = STRBUF_INIT;
364
365 strbuf_branchname(&buf, branch->name);
366 if (strcmp(buf.buf, branch->name))
367 branch->name = xstrdup(buf.buf);
368 strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
369 branch->path = strbuf_detach(&buf, NULL);
370}
371
372static int merge_working_tree(struct checkout_opts *opts,
373 struct branch_info *old, struct branch_info *new)
374{
375 int ret;
376 struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
377 int newfd = hold_locked_index(lock_file, 1);
378
379 if (read_cache_preload(NULL) < 0)
380 return error(_("corrupt index file"));
381
382 resolve_undo_clear();
383 if (opts->force) {
384 ret = reset_tree(new->commit->tree, opts, 1);
385 if (ret)
386 return ret;
387 } else {
388 struct tree_desc trees[2];
389 struct tree *tree;
390 struct unpack_trees_options topts;
391
392 memset(&topts, 0, sizeof(topts));
393 topts.head_idx = -1;
394 topts.src_index = &the_index;
395 topts.dst_index = &the_index;
396
397 setup_unpack_trees_porcelain(&topts, "checkout");
398
399 refresh_cache(REFRESH_QUIET);
400
401 if (unmerged_cache()) {
402 error(_("you need to resolve your current index first"));
403 return 1;
404 }
405
406 /* 2-way merge to the new branch */
407 topts.initial_checkout = is_cache_unborn();
408 topts.update = 1;
409 topts.merge = 1;
410 topts.gently = opts->merge && old->commit;
411 topts.verbose_update = !opts->quiet;
412 topts.fn = twoway_merge;
413 if (opts->overwrite_ignore) {
414 topts.dir = xcalloc(1, sizeof(*topts.dir));
415 topts.dir->flags |= DIR_SHOW_IGNORED;
416 setup_standard_excludes(topts.dir);
417 }
418 tree = parse_tree_indirect(old->commit ?
419 old->commit->object.sha1 :
420 EMPTY_TREE_SHA1_BIN);
421 init_tree_desc(&trees[0], tree->buffer, tree->size);
422 tree = parse_tree_indirect(new->commit->object.sha1);
423 init_tree_desc(&trees[1], tree->buffer, tree->size);
424
425 ret = unpack_trees(2, trees, &topts);
426 if (ret == -1) {
427 /*
428 * Unpack couldn't do a trivial merge; either
429 * give up or do a real merge, depending on
430 * whether the merge flag was used.
431 */
432 struct tree *result;
433 struct tree *work;
434 struct merge_options o;
435 if (!opts->merge)
436 return 1;
437
438 /*
439 * Without old->commit, the below is the same as
440 * the two-tree unpack we already tried and failed.
441 */
442 if (!old->commit)
443 return 1;
444
445 /* Do more real merge */
446
447 /*
448 * We update the index fully, then write the
449 * tree from the index, then merge the new
450 * branch with the current tree, with the old
451 * branch as the base. Then we reset the index
452 * (but not the working tree) to the new
453 * branch, leaving the working tree as the
454 * merged version, but skipping unmerged
455 * entries in the index.
456 */
457
458 add_files_to_cache(NULL, NULL, 0);
459 /*
460 * NEEDSWORK: carrying over local changes
461 * when branches have different end-of-line
462 * normalization (or clean+smudge rules) is
463 * a pain; plumb in an option to set
464 * o.renormalize?
465 */
466 init_merge_options(&o);
467 o.verbosity = 0;
468 work = write_tree_from_memory(&o);
469
470 ret = reset_tree(new->commit->tree, opts, 1);
471 if (ret)
472 return ret;
473 o.ancestor = old->name;
474 o.branch1 = new->name;
475 o.branch2 = "local";
476 merge_trees(&o, new->commit->tree, work,
477 old->commit->tree, &result);
478 ret = reset_tree(new->commit->tree, opts, 0);
479 if (ret)
480 return ret;
481 }
482 }
483
484 if (write_cache(newfd, active_cache, active_nr) ||
485 commit_locked_index(lock_file))
486 die(_("unable to write new index file"));
487
488 if (!opts->force && !opts->quiet)
489 show_local_changes(&new->commit->object, &opts->diff_options);
490
491 return 0;
492}
493
494static void report_tracking(struct branch_info *new)
495{
496 struct strbuf sb = STRBUF_INIT;
497 struct branch *branch = branch_get(new->name);
498
499 if (!format_tracking_info(branch, &sb))
500 return;
501 fputs(sb.buf, stdout);
502 strbuf_release(&sb);
503}
504
505static void detach_advice(const char *old_path, const char *new_name)
506{
507 const char fmt[] =
508 "Note: checking out '%s'.\n\n"
509 "You are in 'detached HEAD' state. You can look around, make experimental\n"
510 "changes and commit them, and you can discard any commits you make in this\n"
511 "state without impacting any branches by performing another checkout.\n\n"
512 "If you want to create a new branch to retain commits you create, you may\n"
513 "do so (now or later) by using -b with the checkout command again. Example:\n\n"
514 " git checkout -b new_branch_name\n\n";
515
516 fprintf(stderr, fmt, new_name);
517}
518
519static void update_refs_for_switch(struct checkout_opts *opts,
520 struct branch_info *old,
521 struct branch_info *new)
522{
523 struct strbuf msg = STRBUF_INIT;
524 const char *old_desc;
525 if (opts->new_branch) {
526 if (opts->new_orphan_branch) {
527 if (opts->new_branch_log && !log_all_ref_updates) {
528 int temp;
529 char log_file[PATH_MAX];
530 char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);
531
532 temp = log_all_ref_updates;
533 log_all_ref_updates = 1;
534 if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
535 fprintf(stderr, _("Can not do reflog for '%s'\n"),
536 opts->new_orphan_branch);
537 log_all_ref_updates = temp;
538 return;
539 }
540 log_all_ref_updates = temp;
541 }
542 }
543 else
544 create_branch(old->name, opts->new_branch, new->name,
545 opts->new_branch_force ? 1 : 0,
546 opts->new_branch_log, opts->track);
547 new->name = opts->new_branch;
548 setup_branch_path(new);
549 }
550
551 old_desc = old->name;
552 if (!old_desc && old->commit)
553 old_desc = sha1_to_hex(old->commit->object.sha1);
554 strbuf_addf(&msg, "checkout: moving from %s to %s",
555 old_desc ? old_desc : "(invalid)", new->name);
556
557 if (!strcmp(new->name, "HEAD") && !new->path && !opts->force_detach) {
558 /* Nothing to do. */
559 } else if (opts->force_detach || !new->path) { /* No longer on any branch. */
560 update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL,
561 REF_NODEREF, DIE_ON_ERR);
562 if (!opts->quiet) {
563 if (old->path && advice_detached_head)
564 detach_advice(old->path, new->name);
565 describe_detached_head(_("HEAD is now at"), new->commit);
566 }
567 } else if (new->path) { /* Switch branches. */
568 create_symref("HEAD", new->path, msg.buf);
569 if (!opts->quiet) {
570 if (old->path && !strcmp(new->path, old->path)) {
571 fprintf(stderr, _("Already on '%s'\n"),
572 new->name);
573 } else if (opts->new_branch) {
574 if (opts->branch_exists)
575 fprintf(stderr, _("Switched to and reset branch '%s'\n"), new->name);
576 else
577 fprintf(stderr, _("Switched to a new branch '%s'\n"), new->name);
578 } else {
579 fprintf(stderr, _("Switched to branch '%s'\n"),
580 new->name);
581 }
582 }
583 if (old->path && old->name) {
584 char log_file[PATH_MAX], ref_file[PATH_MAX];
585
586 git_snpath(log_file, sizeof(log_file), "logs/%s", old->path);
587 git_snpath(ref_file, sizeof(ref_file), "%s", old->path);
588 if (!file_exists(ref_file) && file_exists(log_file))
589 remove_path(log_file);
590 }
591 }
592 remove_branch_state();
593 strbuf_release(&msg);
594 if (!opts->quiet &&
595 (new->path || (!opts->force_detach && !strcmp(new->name, "HEAD"))))
596 report_tracking(new);
597}
598
599static int add_pending_uninteresting_ref(const char *refname,
600 const unsigned char *sha1,
601 int flags, void *cb_data)
602{
603 add_pending_sha1(cb_data, refname, sha1, flags | UNINTERESTING);
604 return 0;
605}
606
607static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
608{
609 parse_commit(commit);
610 strbuf_addstr(sb, " ");
611 strbuf_addstr(sb,
612 find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
613 strbuf_addch(sb, ' ');
614 pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
615 strbuf_addch(sb, '\n');
616}
617
618#define ORPHAN_CUTOFF 4
619static void suggest_reattach(struct commit *commit, struct rev_info *revs)
620{
621 struct commit *c, *last = NULL;
622 struct strbuf sb = STRBUF_INIT;
623 int lost = 0;
624 while ((c = get_revision(revs)) != NULL) {
625 if (lost < ORPHAN_CUTOFF)
626 describe_one_orphan(&sb, c);
627 last = c;
628 lost++;
629 }
630 if (ORPHAN_CUTOFF < lost) {
631 int more = lost - ORPHAN_CUTOFF;
632 if (more == 1)
633 describe_one_orphan(&sb, last);
634 else
635 strbuf_addf(&sb, _(" ... and %d more.\n"), more);
636 }
637
638 fprintf(stderr,
639 Q_(
640 /* The singular version */
641 "Warning: you are leaving %d commit behind, "
642 "not connected to\n"
643 "any of your branches:\n\n"
644 "%s\n",
645 /* The plural version */
646 "Warning: you are leaving %d commits behind, "
647 "not connected to\n"
648 "any of your branches:\n\n"
649 "%s\n",
650 /* Give ngettext() the count */
651 lost),
652 lost,
653 sb.buf);
654 strbuf_release(&sb);
655
656 if (advice_detached_head)
657 fprintf(stderr,
658 _(
659 "If you want to keep them by creating a new branch, "
660 "this may be a good time\nto do so with:\n\n"
661 " git branch new_branch_name %s\n\n"),
662 sha1_to_hex(commit->object.sha1));
663}
664
665/*
666 * We are about to leave commit that was at the tip of a detached
667 * HEAD. If it is not reachable from any ref, this is the last chance
668 * for the user to do so without resorting to reflog.
669 */
670static void orphaned_commit_warning(struct commit *commit)
671{
672 struct rev_info revs;
673 struct object *object = &commit->object;
674 struct object_array refs;
675
676 init_revisions(&revs, NULL);
677 setup_revisions(0, NULL, &revs, NULL);
678
679 object->flags &= ~UNINTERESTING;
680 add_pending_object(&revs, object, sha1_to_hex(object->sha1));
681
682 for_each_ref(add_pending_uninteresting_ref, &revs);
683
684 refs = revs.pending;
685 revs.leak_pending = 1;
686
687 if (prepare_revision_walk(&revs))
688 die(_("internal error in revision walk"));
689 if (!(commit->object.flags & UNINTERESTING))
690 suggest_reattach(commit, &revs);
691 else
692 describe_detached_head(_("Previous HEAD position was"), commit);
693
694 clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS);
695 free(refs.objects);
696}
697
698static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
699{
700 int ret = 0;
701 struct branch_info old;
702 unsigned char rev[20];
703 int flag;
704 memset(&old, 0, sizeof(old));
705 old.path = xstrdup(resolve_ref("HEAD", rev, 0, &flag));
706 old.commit = lookup_commit_reference_gently(rev, 1);
707 if (!(flag & REF_ISSYMREF)) {
708 free((char *)old.path);
709 old.path = NULL;
710 }
711
712 if (old.path && !prefixcmp(old.path, "refs/heads/"))
713 old.name = old.path + strlen("refs/heads/");
714
715 if (!new->name) {
716 new->name = "HEAD";
717 new->commit = old.commit;
718 if (!new->commit)
719 die(_("You are on a branch yet to be born"));
720 parse_commit(new->commit);
721 }
722
723 ret = merge_working_tree(opts, &old, new);
724 if (ret)
725 return ret;
726
727 if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
728 orphaned_commit_warning(old.commit);
729
730 update_refs_for_switch(opts, &old, new);
731
732 ret = post_checkout_hook(old.commit, new->commit, 1);
733 free((char *)old.path);
734 return ret || opts->writeout_error;
735}
736
737static int git_checkout_config(const char *var, const char *value, void *cb)
738{
739 if (!strcmp(var, "diff.ignoresubmodules")) {
740 struct checkout_opts *opts = cb;
741 handle_ignore_submodules_arg(&opts->diff_options, value);
742 return 0;
743 }
744
745 if (!prefixcmp(var, "submodule."))
746 return parse_submodule_config_option(var, value);
747
748 return git_xmerge_config(var, value, NULL);
749}
750
751static int interactive_checkout(const char *revision, const char **pathspec,
752 struct checkout_opts *opts)
753{
754 return run_add_interactive(revision, "--patch=checkout", pathspec);
755}
756
757struct tracking_name_data {
758 const char *name;
759 char *remote;
760 int unique;
761};
762
763static int check_tracking_name(const char *refname, const unsigned char *sha1,
764 int flags, void *cb_data)
765{
766 struct tracking_name_data *cb = cb_data;
767 const char *slash;
768
769 if (prefixcmp(refname, "refs/remotes/"))
770 return 0;
771 slash = strchr(refname + 13, '/');
772 if (!slash || strcmp(slash + 1, cb->name))
773 return 0;
774 if (cb->remote) {
775 cb->unique = 0;
776 return 0;
777 }
778 cb->remote = xstrdup(refname);
779 return 0;
780}
781
782static const char *unique_tracking_name(const char *name)
783{
784 struct tracking_name_data cb_data = { NULL, NULL, 1 };
785 cb_data.name = name;
786 for_each_ref(check_tracking_name, &cb_data);
787 if (cb_data.unique)
788 return cb_data.remote;
789 free(cb_data.remote);
790 return NULL;
791}
792
793static int parse_branchname_arg(int argc, const char **argv,
794 int dwim_new_local_branch_ok,
795 struct branch_info *new,
796 struct tree **source_tree,
797 unsigned char rev[20],
798 const char **new_branch)
799{
800 int argcount = 0;
801 unsigned char branch_rev[20];
802 const char *arg;
803 int has_dash_dash;
804
805 /*
806 * case 1: git checkout <ref> -- [<paths>]
807 *
808 * <ref> must be a valid tree, everything after the '--' must be
809 * a path.
810 *
811 * case 2: git checkout -- [<paths>]
812 *
813 * everything after the '--' must be paths.
814 *
815 * case 3: git checkout <something> [<paths>]
816 *
817 * With no paths, if <something> is a commit, that is to
818 * switch to the branch or detach HEAD at it. As a special case,
819 * if <something> is A...B (missing A or B means HEAD but you can
820 * omit at most one side), and if there is a unique merge base
821 * between A and B, A...B names that merge base.
822 *
823 * With no paths, if <something> is _not_ a commit, no -t nor -b
824 * was given, and there is a tracking branch whose name is
825 * <something> in one and only one remote, then this is a short-hand
826 * to fork local <something> from that remote-tracking branch.
827 *
828 * Otherwise <something> shall not be ambiguous.
829 * - If it's *only* a reference, treat it like case (1).
830 * - If it's only a path, treat it like case (2).
831 * - else: fail.
832 *
833 */
834 if (!argc)
835 return 0;
836
837 if (!strcmp(argv[0], "--")) /* case (2) */
838 return 1;
839
840 arg = argv[0];
841 has_dash_dash = (argc > 1) && !strcmp(argv[1], "--");
842
843 if (!strcmp(arg, "-"))
844 arg = "@{-1}";
845
846 if (get_sha1_mb(arg, rev)) {
847 if (has_dash_dash) /* case (1) */
848 die(_("invalid reference: %s"), arg);
849 if (dwim_new_local_branch_ok &&
850 !check_filename(NULL, arg) &&
851 argc == 1) {
852 const char *remote = unique_tracking_name(arg);
853 if (!remote || get_sha1(remote, rev))
854 return argcount;
855 *new_branch = arg;
856 arg = remote;
857 /* DWIMmed to create local branch */
858 } else {
859 return argcount;
860 }
861 }
862
863 /* we can't end up being in (2) anymore, eat the argument */
864 argcount++;
865 argv++;
866 argc--;
867
868 new->name = arg;
869 setup_branch_path(new);
870
871 if (!check_refname_format(new->path, 0) &&
872 resolve_ref(new->path, branch_rev, 1, NULL))
873 hashcpy(rev, branch_rev);
874 else
875 new->path = NULL; /* not an existing branch */
876
877 new->commit = lookup_commit_reference_gently(rev, 1);
878 if (!new->commit) {
879 /* not a commit */
880 *source_tree = parse_tree_indirect(rev);
881 } else {
882 parse_commit(new->commit);
883 *source_tree = new->commit->tree;
884 }
885
886 if (!*source_tree) /* case (1): want a tree */
887 die(_("reference is not a tree: %s"), arg);
888 if (!has_dash_dash) {/* case (3 -> 1) */
889 /*
890 * Do not complain the most common case
891 * git checkout branch
892 * even if there happen to be a file called 'branch';
893 * it would be extremely annoying.
894 */
895 if (argc)
896 verify_non_filename(NULL, arg);
897 } else {
898 argcount++;
899 argv++;
900 argc--;
901 }
902
903 return argcount;
904}
905
906int cmd_checkout(int argc, const char **argv, const char *prefix)
907{
908 struct checkout_opts opts;
909 unsigned char rev[20];
910 struct branch_info new;
911 struct tree *source_tree = NULL;
912 char *conflict_style = NULL;
913 int patch_mode = 0;
914 int dwim_new_local_branch = 1;
915 struct option options[] = {
916 OPT__QUIET(&opts.quiet, "suppress progress reporting"),
917 OPT_STRING('b', NULL, &opts.new_branch, "branch",
918 "create and checkout a new branch"),
919 OPT_STRING('B', NULL, &opts.new_branch_force, "branch",
920 "create/reset and checkout a branch"),
921 OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "create reflog for new branch"),
922 OPT_BOOLEAN(0, "detach", &opts.force_detach, "detach the HEAD at named commit"),
923 OPT_SET_INT('t', "track", &opts.track, "set upstream info for new branch",
924 BRANCH_TRACK_EXPLICIT),
925 OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"),
926 OPT_SET_INT('2', "ours", &opts.writeout_stage, "checkout our version for unmerged files",
927 2),
928 OPT_SET_INT('3', "theirs", &opts.writeout_stage, "checkout their version for unmerged files",
929 3),
930 OPT__FORCE(&opts.force, "force checkout (throw away local modifications)"),
931 OPT_BOOLEAN('m', "merge", &opts.merge, "perform a 3-way merge with the new branch"),
932 OPT_BOOLEAN(0, "overwrite-ignore", &opts.overwrite_ignore, "update ignored files (default)"),
933 OPT_STRING(0, "conflict", &conflict_style, "style",
934 "conflict style (merge or diff3)"),
935 OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
936 { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
937 "second guess 'git checkout no-such-branch'",
938 PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
939 OPT_END(),
940 };
941
942 memset(&opts, 0, sizeof(opts));
943 memset(&new, 0, sizeof(new));
944 opts.overwrite_ignore = 1;
945
946 gitmodules_config();
947 git_config(git_checkout_config, &opts);
948
949 opts.track = BRANCH_TRACK_UNSPECIFIED;
950
951 argc = parse_options(argc, argv, prefix, options, checkout_usage,
952 PARSE_OPT_KEEP_DASHDASH);
953
954 /* we can assume from now on new_branch = !new_branch_force */
955 if (opts.new_branch && opts.new_branch_force)
956 die(_("-B cannot be used with -b"));
957
958 /* copy -B over to -b, so that we can just check the latter */
959 if (opts.new_branch_force)
960 opts.new_branch = opts.new_branch_force;
961
962 if (patch_mode && (opts.track > 0 || opts.new_branch
963 || opts.new_branch_log || opts.merge || opts.force
964 || opts.force_detach))
965 die (_("--patch is incompatible with all other options"));
966
967 if (opts.force_detach && (opts.new_branch || opts.new_orphan_branch))
968 die(_("--detach cannot be used with -b/-B/--orphan"));
969 if (opts.force_detach && 0 < opts.track)
970 die(_("--detach cannot be used with -t"));
971
972 /* --track without -b should DWIM */
973 if (0 < opts.track && !opts.new_branch) {
974 const char *argv0 = argv[0];
975 if (!argc || !strcmp(argv0, "--"))
976 die (_("--track needs a branch name"));
977 if (!prefixcmp(argv0, "refs/"))
978 argv0 += 5;
979 if (!prefixcmp(argv0, "remotes/"))
980 argv0 += 8;
981 argv0 = strchr(argv0, '/');
982 if (!argv0 || !argv0[1])
983 die (_("Missing branch name; try -b"));
984 opts.new_branch = argv0 + 1;
985 }
986
987 if (opts.new_orphan_branch) {
988 if (opts.new_branch)
989 die(_("--orphan and -b|-B are mutually exclusive"));
990 if (opts.track > 0)
991 die(_("--orphan cannot be used with -t"));
992 opts.new_branch = opts.new_orphan_branch;
993 }
994
995 if (conflict_style) {
996 opts.merge = 1; /* implied */
997 git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
998 }
999
1000 if (opts.force && opts.merge)
1001 die(_("git checkout: -f and -m are incompatible"));
1002
1003 /*
1004 * Extract branch name from command line arguments, so
1005 * all that is left is pathspecs.
1006 *
1007 * Handle
1008 *
1009 * 1) git checkout <tree> -- [<paths>]
1010 * 2) git checkout -- [<paths>]
1011 * 3) git checkout <something> [<paths>]
1012 *
1013 * including "last branch" syntax and DWIM-ery for names of
1014 * remote branches, erroring out for invalid or ambiguous cases.
1015 */
1016 if (argc) {
1017 int dwim_ok =
1018 !patch_mode &&
1019 dwim_new_local_branch &&
1020 opts.track == BRANCH_TRACK_UNSPECIFIED &&
1021 !opts.new_branch;
1022 int n = parse_branchname_arg(argc, argv, dwim_ok,
1023 &new, &source_tree, rev, &opts.new_branch);
1024 argv += n;
1025 argc -= n;
1026 }
1027
1028 if (opts.track == BRANCH_TRACK_UNSPECIFIED)
1029 opts.track = git_branch_track;
1030
1031 if (argc) {
1032 const char **pathspec = get_pathspec(prefix, argv);
1033
1034 if (!pathspec)
1035 die(_("invalid path specification"));
1036
1037 if (patch_mode)
1038 return interactive_checkout(new.name, pathspec, &opts);
1039
1040 /* Checkout paths */
1041 if (opts.new_branch) {
1042 if (argc == 1) {
1043 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]);
1044 } else {
1045 die(_("git checkout: updating paths is incompatible with switching branches."));
1046 }
1047 }
1048
1049 if (opts.force_detach)
1050 die(_("git checkout: --detach does not take a path argument"));
1051
1052 if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge)
1053 die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index."));
1054
1055 return checkout_paths(source_tree, pathspec, prefix, &opts);
1056 }
1057
1058 if (patch_mode)
1059 return interactive_checkout(new.name, NULL, &opts);
1060
1061 if (opts.new_branch) {
1062 struct strbuf buf = STRBUF_INIT;
1063
1064 opts.branch_exists = validate_new_branchname(opts.new_branch, &buf,
1065 !!opts.new_branch_force, 0);
1066
1067 strbuf_release(&buf);
1068 }
1069
1070 if (new.name && !new.commit) {
1071 die(_("Cannot switch branch to a non-commit."));
1072 }
1073 if (opts.writeout_stage)
1074 die(_("--ours/--theirs is incompatible with switching branches."));
1075
1076 return switch_branches(&opts, &new);
1077}