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