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