Code

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