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