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