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