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