builtin / checkout.con commit checkout: suppress tracking message with "-q" (f9a482e)
   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        if (diff_setup_done(&rev.diffopt) < 0)
 319                die(_("diff_setup_done failed"));
 320        add_pending_object(&rev, head, NULL);
 321        run_diff_index(&rev, 0);
 322}
 323
 324static void describe_detached_head(const char *msg, struct commit *commit)
 325{
 326        struct strbuf sb = STRBUF_INIT;
 327        parse_commit(commit);
 328        pp_commit_easy(CMIT_FMT_ONELINE, commit, &sb);
 329        fprintf(stderr, "%s %s... %s\n", msg,
 330                find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV), sb.buf);
 331        strbuf_release(&sb);
 332}
 333
 334static int reset_tree(struct tree *tree, struct checkout_opts *o, int worktree)
 335{
 336        struct unpack_trees_options opts;
 337        struct tree_desc tree_desc;
 338
 339        memset(&opts, 0, sizeof(opts));
 340        opts.head_idx = -1;
 341        opts.update = worktree;
 342        opts.skip_unmerged = !worktree;
 343        opts.reset = 1;
 344        opts.merge = 1;
 345        opts.fn = oneway_merge;
 346        opts.verbose_update = !o->quiet;
 347        opts.src_index = &the_index;
 348        opts.dst_index = &the_index;
 349        parse_tree(tree);
 350        init_tree_desc(&tree_desc, tree->buffer, tree->size);
 351        switch (unpack_trees(1, &tree_desc, &opts)) {
 352        case -2:
 353                o->writeout_error = 1;
 354                /*
 355                 * We return 0 nevertheless, as the index is all right
 356                 * and more importantly we have made best efforts to
 357                 * update paths in the work tree, and we cannot revert
 358                 * them.
 359                 */
 360        case 0:
 361                return 0;
 362        default:
 363                return 128;
 364        }
 365}
 366
 367struct branch_info {
 368        const char *name; /* The short name used */
 369        const char *path; /* The full name of a real branch */
 370        struct commit *commit; /* The named commit */
 371};
 372
 373static void setup_branch_path(struct branch_info *branch)
 374{
 375        struct strbuf buf = STRBUF_INIT;
 376
 377        strbuf_branchname(&buf, branch->name);
 378        if (strcmp(buf.buf, branch->name))
 379                branch->name = xstrdup(buf.buf);
 380        strbuf_splice(&buf, 0, 0, "refs/heads/", 11);
 381        branch->path = strbuf_detach(&buf, NULL);
 382}
 383
 384static int merge_working_tree(struct checkout_opts *opts,
 385                              struct branch_info *old, struct branch_info *new)
 386{
 387        int ret;
 388        struct lock_file *lock_file = xcalloc(1, sizeof(struct lock_file));
 389        int newfd = hold_locked_index(lock_file, 1);
 390
 391        if (read_cache_preload(NULL) < 0)
 392                return error(_("corrupt index file"));
 393
 394        resolve_undo_clear();
 395        if (opts->force) {
 396                ret = reset_tree(new->commit->tree, opts, 1);
 397                if (ret)
 398                        return ret;
 399        } else {
 400                struct tree_desc trees[2];
 401                struct tree *tree;
 402                struct unpack_trees_options topts;
 403
 404                memset(&topts, 0, sizeof(topts));
 405                topts.head_idx = -1;
 406                topts.src_index = &the_index;
 407                topts.dst_index = &the_index;
 408
 409                setup_unpack_trees_porcelain(&topts, "checkout");
 410
 411                refresh_cache(REFRESH_QUIET);
 412
 413                if (unmerged_cache()) {
 414                        error(_("you need to resolve your current index first"));
 415                        return 1;
 416                }
 417
 418                /* 2-way merge to the new branch */
 419                topts.initial_checkout = is_cache_unborn();
 420                topts.update = 1;
 421                topts.merge = 1;
 422                topts.gently = opts->merge && old->commit;
 423                topts.verbose_update = !opts->quiet;
 424                topts.fn = twoway_merge;
 425                if (opts->overwrite_ignore) {
 426                        topts.dir = xcalloc(1, sizeof(*topts.dir));
 427                        topts.dir->flags |= DIR_SHOW_IGNORED;
 428                        setup_standard_excludes(topts.dir);
 429                }
 430                tree = parse_tree_indirect(old->commit ?
 431                                           old->commit->object.sha1 :
 432                                           EMPTY_TREE_SHA1_BIN);
 433                init_tree_desc(&trees[0], tree->buffer, tree->size);
 434                tree = parse_tree_indirect(new->commit->object.sha1);
 435                init_tree_desc(&trees[1], tree->buffer, tree->size);
 436
 437                ret = unpack_trees(2, trees, &topts);
 438                if (ret == -1) {
 439                        /*
 440                         * Unpack couldn't do a trivial merge; either
 441                         * give up or do a real merge, depending on
 442                         * whether the merge flag was used.
 443                         */
 444                        struct tree *result;
 445                        struct tree *work;
 446                        struct merge_options o;
 447                        if (!opts->merge)
 448                                return 1;
 449
 450                        /*
 451                         * Without old->commit, the below is the same as
 452                         * the two-tree unpack we already tried and failed.
 453                         */
 454                        if (!old->commit)
 455                                return 1;
 456
 457                        /* Do more real merge */
 458
 459                        /*
 460                         * We update the index fully, then write the
 461                         * tree from the index, then merge the new
 462                         * branch with the current tree, with the old
 463                         * branch as the base. Then we reset the index
 464                         * (but not the working tree) to the new
 465                         * branch, leaving the working tree as the
 466                         * merged version, but skipping unmerged
 467                         * entries in the index.
 468                         */
 469
 470                        add_files_to_cache(NULL, NULL, 0);
 471                        /*
 472                         * NEEDSWORK: carrying over local changes
 473                         * when branches have different end-of-line
 474                         * normalization (or clean+smudge rules) is
 475                         * a pain; plumb in an option to set
 476                         * o.renormalize?
 477                         */
 478                        init_merge_options(&o);
 479                        o.verbosity = 0;
 480                        work = write_tree_from_memory(&o);
 481
 482                        ret = reset_tree(new->commit->tree, opts, 1);
 483                        if (ret)
 484                                return ret;
 485                        o.ancestor = old->name;
 486                        o.branch1 = new->name;
 487                        o.branch2 = "local";
 488                        merge_trees(&o, new->commit->tree, work,
 489                                old->commit->tree, &result);
 490                        ret = reset_tree(new->commit->tree, opts, 0);
 491                        if (ret)
 492                                return ret;
 493                }
 494        }
 495
 496        if (write_cache(newfd, active_cache, active_nr) ||
 497            commit_locked_index(lock_file))
 498                die(_("unable to write new index file"));
 499
 500        if (!opts->force && !opts->quiet)
 501                show_local_changes(&new->commit->object, &opts->diff_options);
 502
 503        return 0;
 504}
 505
 506static void report_tracking(struct branch_info *new)
 507{
 508        struct strbuf sb = STRBUF_INIT;
 509        struct branch *branch = branch_get(new->name);
 510
 511        if (!format_tracking_info(branch, &sb))
 512                return;
 513        fputs(sb.buf, stdout);
 514        strbuf_release(&sb);
 515}
 516
 517static void detach_advice(const char *old_path, const char *new_name)
 518{
 519        const char fmt[] =
 520        "Note: checking out '%s'.\n\n"
 521        "You are in 'detached HEAD' state. You can look around, make experimental\n"
 522        "changes and commit them, and you can discard any commits you make in this\n"
 523        "state without impacting any branches by performing another checkout.\n\n"
 524        "If you want to create a new branch to retain commits you create, you may\n"
 525        "do so (now or later) by using -b with the checkout command again. Example:\n\n"
 526        "  git checkout -b new_branch_name\n\n";
 527
 528        fprintf(stderr, fmt, new_name);
 529}
 530
 531static void update_refs_for_switch(struct checkout_opts *opts,
 532                                   struct branch_info *old,
 533                                   struct branch_info *new)
 534{
 535        struct strbuf msg = STRBUF_INIT;
 536        const char *old_desc;
 537        if (opts->new_branch) {
 538                if (opts->new_orphan_branch) {
 539                        if (opts->new_branch_log && !log_all_ref_updates) {
 540                                int temp;
 541                                char log_file[PATH_MAX];
 542                                char *ref_name = mkpath("refs/heads/%s", opts->new_orphan_branch);
 543
 544                                temp = log_all_ref_updates;
 545                                log_all_ref_updates = 1;
 546                                if (log_ref_setup(ref_name, log_file, sizeof(log_file))) {
 547                                        fprintf(stderr, _("Can not do reflog for '%s'\n"),
 548                                            opts->new_orphan_branch);
 549                                        log_all_ref_updates = temp;
 550                                        return;
 551                                }
 552                                log_all_ref_updates = temp;
 553                        }
 554                }
 555                else
 556                        create_branch(old->name, opts->new_branch, new->name,
 557                                      opts->new_branch_force ? 1 : 0,
 558                                      opts->new_branch_log,
 559                                      opts->new_branch_force ? 1 : 0,
 560                                      opts->quiet,
 561                                      opts->track);
 562                new->name = opts->new_branch;
 563                setup_branch_path(new);
 564        }
 565
 566        old_desc = old->name;
 567        if (!old_desc && old->commit)
 568                old_desc = sha1_to_hex(old->commit->object.sha1);
 569        strbuf_addf(&msg, "checkout: moving from %s to %s",
 570                    old_desc ? old_desc : "(invalid)", new->name);
 571
 572        if (!strcmp(new->name, "HEAD") && !new->path && !opts->force_detach) {
 573                /* Nothing to do. */
 574        } else if (opts->force_detach || !new->path) {  /* No longer on any branch. */
 575                update_ref(msg.buf, "HEAD", new->commit->object.sha1, NULL,
 576                           REF_NODEREF, DIE_ON_ERR);
 577                if (!opts->quiet) {
 578                        if (old->path && advice_detached_head)
 579                                detach_advice(old->path, new->name);
 580                        describe_detached_head(_("HEAD is now at"), new->commit);
 581                }
 582        } else if (new->path) { /* Switch branches. */
 583                create_symref("HEAD", new->path, msg.buf);
 584                if (!opts->quiet) {
 585                        if (old->path && !strcmp(new->path, old->path)) {
 586                                if (opts->new_branch_force)
 587                                        fprintf(stderr, _("Reset branch '%s'\n"),
 588                                                new->name);
 589                                else
 590                                        fprintf(stderr, _("Already on '%s'\n"),
 591                                                new->name);
 592                        } else if (opts->new_branch) {
 593                                if (opts->branch_exists)
 594                                        fprintf(stderr, _("Switched to and reset branch '%s'\n"), new->name);
 595                                else
 596                                        fprintf(stderr, _("Switched to a new branch '%s'\n"), new->name);
 597                        } else {
 598                                fprintf(stderr, _("Switched to branch '%s'\n"),
 599                                        new->name);
 600                        }
 601                }
 602                if (old->path && old->name) {
 603                        char log_file[PATH_MAX], ref_file[PATH_MAX];
 604
 605                        git_snpath(log_file, sizeof(log_file), "logs/%s", old->path);
 606                        git_snpath(ref_file, sizeof(ref_file), "%s", old->path);
 607                        if (!file_exists(ref_file) && file_exists(log_file))
 608                                remove_path(log_file);
 609                }
 610        }
 611        remove_branch_state();
 612        strbuf_release(&msg);
 613        if (!opts->quiet &&
 614            (new->path || (!opts->force_detach && !strcmp(new->name, "HEAD"))))
 615                report_tracking(new);
 616}
 617
 618static int add_pending_uninteresting_ref(const char *refname,
 619                                         const unsigned char *sha1,
 620                                         int flags, void *cb_data)
 621{
 622        add_pending_sha1(cb_data, refname, sha1, flags | UNINTERESTING);
 623        return 0;
 624}
 625
 626static void describe_one_orphan(struct strbuf *sb, struct commit *commit)
 627{
 628        parse_commit(commit);
 629        strbuf_addstr(sb, "  ");
 630        strbuf_addstr(sb,
 631                find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
 632        strbuf_addch(sb, ' ');
 633        pp_commit_easy(CMIT_FMT_ONELINE, commit, sb);
 634        strbuf_addch(sb, '\n');
 635}
 636
 637#define ORPHAN_CUTOFF 4
 638static void suggest_reattach(struct commit *commit, struct rev_info *revs)
 639{
 640        struct commit *c, *last = NULL;
 641        struct strbuf sb = STRBUF_INIT;
 642        int lost = 0;
 643        while ((c = get_revision(revs)) != NULL) {
 644                if (lost < ORPHAN_CUTOFF)
 645                        describe_one_orphan(&sb, c);
 646                last = c;
 647                lost++;
 648        }
 649        if (ORPHAN_CUTOFF < lost) {
 650                int more = lost - ORPHAN_CUTOFF;
 651                if (more == 1)
 652                        describe_one_orphan(&sb, last);
 653                else
 654                        strbuf_addf(&sb, _(" ... and %d more.\n"), more);
 655        }
 656
 657        fprintf(stderr,
 658                Q_(
 659                /* The singular version */
 660                "Warning: you are leaving %d commit behind, "
 661                "not connected to\n"
 662                "any of your branches:\n\n"
 663                "%s\n",
 664                /* The plural version */
 665                "Warning: you are leaving %d commits behind, "
 666                "not connected to\n"
 667                "any of your branches:\n\n"
 668                "%s\n",
 669                /* Give ngettext() the count */
 670                lost),
 671                lost,
 672                sb.buf);
 673        strbuf_release(&sb);
 674
 675        if (advice_detached_head)
 676                fprintf(stderr,
 677                        _(
 678                        "If you want to keep them by creating a new branch, "
 679                        "this may be a good time\nto do so with:\n\n"
 680                        " git branch new_branch_name %s\n\n"),
 681                        sha1_to_hex(commit->object.sha1));
 682}
 683
 684/*
 685 * We are about to leave commit that was at the tip of a detached
 686 * HEAD.  If it is not reachable from any ref, this is the last chance
 687 * for the user to do so without resorting to reflog.
 688 */
 689static void orphaned_commit_warning(struct commit *commit)
 690{
 691        struct rev_info revs;
 692        struct object *object = &commit->object;
 693        struct object_array refs;
 694
 695        init_revisions(&revs, NULL);
 696        setup_revisions(0, NULL, &revs, NULL);
 697
 698        object->flags &= ~UNINTERESTING;
 699        add_pending_object(&revs, object, sha1_to_hex(object->sha1));
 700
 701        for_each_ref(add_pending_uninteresting_ref, &revs);
 702
 703        refs = revs.pending;
 704        revs.leak_pending = 1;
 705
 706        if (prepare_revision_walk(&revs))
 707                die(_("internal error in revision walk"));
 708        if (!(commit->object.flags & UNINTERESTING))
 709                suggest_reattach(commit, &revs);
 710        else
 711                describe_detached_head(_("Previous HEAD position was"), commit);
 712
 713        clear_commit_marks_for_object_array(&refs, ALL_REV_FLAGS);
 714        free(refs.objects);
 715}
 716
 717static int switch_branches(struct checkout_opts *opts, struct branch_info *new)
 718{
 719        int ret = 0;
 720        struct branch_info old;
 721        void *path_to_free;
 722        unsigned char rev[20];
 723        int flag;
 724        memset(&old, 0, sizeof(old));
 725        old.path = path_to_free = resolve_refdup("HEAD", rev, 0, &flag);
 726        old.commit = lookup_commit_reference_gently(rev, 1);
 727        if (!(flag & REF_ISSYMREF))
 728                old.path = NULL;
 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                free(path_to_free);
 744                return ret;
 745        }
 746
 747        if (!opts->quiet && !old.path && old.commit && new->commit != old.commit)
 748                orphaned_commit_warning(old.commit);
 749
 750        update_refs_for_switch(opts, &old, new);
 751
 752        ret = post_checkout_hook(old.commit, new->commit, 1);
 753        free(path_to_free);
 754        return ret || opts->writeout_error;
 755}
 756
 757static int git_checkout_config(const char *var, const char *value, void *cb)
 758{
 759        if (!strcmp(var, "diff.ignoresubmodules")) {
 760                struct checkout_opts *opts = cb;
 761                handle_ignore_submodules_arg(&opts->diff_options, value);
 762                return 0;
 763        }
 764
 765        if (!prefixcmp(var, "submodule."))
 766                return parse_submodule_config_option(var, value);
 767
 768        return git_xmerge_config(var, value, NULL);
 769}
 770
 771static int interactive_checkout(const char *revision, const char **pathspec,
 772                                struct checkout_opts *opts)
 773{
 774        return run_add_interactive(revision, "--patch=checkout", pathspec);
 775}
 776
 777struct tracking_name_data {
 778        const char *name;
 779        char *remote;
 780        int unique;
 781};
 782
 783static int check_tracking_name(const char *refname, const unsigned char *sha1,
 784                               int flags, void *cb_data)
 785{
 786        struct tracking_name_data *cb = cb_data;
 787        const char *slash;
 788
 789        if (prefixcmp(refname, "refs/remotes/"))
 790                return 0;
 791        slash = strchr(refname + 13, '/');
 792        if (!slash || strcmp(slash + 1, cb->name))
 793                return 0;
 794        if (cb->remote) {
 795                cb->unique = 0;
 796                return 0;
 797        }
 798        cb->remote = xstrdup(refname);
 799        return 0;
 800}
 801
 802static const char *unique_tracking_name(const char *name)
 803{
 804        struct tracking_name_data cb_data = { NULL, NULL, 1 };
 805        cb_data.name = name;
 806        for_each_ref(check_tracking_name, &cb_data);
 807        if (cb_data.unique)
 808                return cb_data.remote;
 809        free(cb_data.remote);
 810        return NULL;
 811}
 812
 813static int parse_branchname_arg(int argc, const char **argv,
 814                                int dwim_new_local_branch_ok,
 815                                struct branch_info *new,
 816                                struct tree **source_tree,
 817                                unsigned char rev[20],
 818                                const char **new_branch)
 819{
 820        int argcount = 0;
 821        unsigned char branch_rev[20];
 822        const char *arg;
 823        int has_dash_dash;
 824
 825        /*
 826         * case 1: git checkout <ref> -- [<paths>]
 827         *
 828         *   <ref> must be a valid tree, everything after the '--' must be
 829         *   a path.
 830         *
 831         * case 2: git checkout -- [<paths>]
 832         *
 833         *   everything after the '--' must be paths.
 834         *
 835         * case 3: git checkout <something> [<paths>]
 836         *
 837         *   With no paths, if <something> is a commit, that is to
 838         *   switch to the branch or detach HEAD at it.  As a special case,
 839         *   if <something> is A...B (missing A or B means HEAD but you can
 840         *   omit at most one side), and if there is a unique merge base
 841         *   between A and B, A...B names that merge base.
 842         *
 843         *   With no paths, if <something> is _not_ a commit, no -t nor -b
 844         *   was given, and there is a tracking branch whose name is
 845         *   <something> in one and only one remote, then this is a short-hand
 846         *   to fork local <something> from that remote-tracking branch.
 847         *
 848         *   Otherwise <something> shall not be ambiguous.
 849         *   - If it's *only* a reference, treat it like case (1).
 850         *   - If it's only a path, treat it like case (2).
 851         *   - else: fail.
 852         *
 853         */
 854        if (!argc)
 855                return 0;
 856
 857        if (!strcmp(argv[0], "--"))     /* case (2) */
 858                return 1;
 859
 860        arg = argv[0];
 861        has_dash_dash = (argc > 1) && !strcmp(argv[1], "--");
 862
 863        if (!strcmp(arg, "-"))
 864                arg = "@{-1}";
 865
 866        if (get_sha1_mb(arg, rev)) {
 867                if (has_dash_dash)          /* case (1) */
 868                        die(_("invalid reference: %s"), arg);
 869                if (dwim_new_local_branch_ok &&
 870                    !check_filename(NULL, arg) &&
 871                    argc == 1) {
 872                        const char *remote = unique_tracking_name(arg);
 873                        if (!remote || get_sha1(remote, rev))
 874                                return argcount;
 875                        *new_branch = arg;
 876                        arg = remote;
 877                        /* DWIMmed to create local branch */
 878                } else {
 879                        return argcount;
 880                }
 881        }
 882
 883        /* we can't end up being in (2) anymore, eat the argument */
 884        argcount++;
 885        argv++;
 886        argc--;
 887
 888        new->name = arg;
 889        setup_branch_path(new);
 890
 891        if (!check_refname_format(new->path, 0) &&
 892            !read_ref(new->path, branch_rev))
 893                hashcpy(rev, branch_rev);
 894        else
 895                new->path = NULL; /* not an existing branch */
 896
 897        new->commit = lookup_commit_reference_gently(rev, 1);
 898        if (!new->commit) {
 899                /* not a commit */
 900                *source_tree = parse_tree_indirect(rev);
 901        } else {
 902                parse_commit(new->commit);
 903                *source_tree = new->commit->tree;
 904        }
 905
 906        if (!*source_tree)                   /* case (1): want a tree */
 907                die(_("reference is not a tree: %s"), arg);
 908        if (!has_dash_dash) {/* case (3 -> 1) */
 909                /*
 910                 * Do not complain the most common case
 911                 *      git checkout branch
 912                 * even if there happen to be a file called 'branch';
 913                 * it would be extremely annoying.
 914                 */
 915                if (argc)
 916                        verify_non_filename(NULL, arg);
 917        } else {
 918                argcount++;
 919                argv++;
 920                argc--;
 921        }
 922
 923        return argcount;
 924}
 925
 926static int switch_unborn_to_new_branch(struct checkout_opts *opts)
 927{
 928        int status;
 929        struct strbuf branch_ref = STRBUF_INIT;
 930
 931        strbuf_addf(&branch_ref, "refs/heads/%s", opts->new_branch);
 932        status = create_symref("HEAD", branch_ref.buf, "checkout -b");
 933        strbuf_release(&branch_ref);
 934        return status;
 935}
 936
 937int cmd_checkout(int argc, const char **argv, const char *prefix)
 938{
 939        struct checkout_opts opts;
 940        unsigned char rev[20];
 941        struct branch_info new;
 942        struct tree *source_tree = NULL;
 943        char *conflict_style = NULL;
 944        int patch_mode = 0;
 945        int dwim_new_local_branch = 1;
 946        struct option options[] = {
 947                OPT__QUIET(&opts.quiet, "suppress progress reporting"),
 948                OPT_STRING('b', NULL, &opts.new_branch, "branch",
 949                           "create and checkout a new branch"),
 950                OPT_STRING('B', NULL, &opts.new_branch_force, "branch",
 951                           "create/reset and checkout a branch"),
 952                OPT_BOOLEAN('l', NULL, &opts.new_branch_log, "create reflog for new branch"),
 953                OPT_BOOLEAN(0, "detach", &opts.force_detach, "detach the HEAD at named commit"),
 954                OPT_SET_INT('t', "track",  &opts.track, "set upstream info for new branch",
 955                        BRANCH_TRACK_EXPLICIT),
 956                OPT_STRING(0, "orphan", &opts.new_orphan_branch, "new branch", "new unparented branch"),
 957                OPT_SET_INT('2', "ours", &opts.writeout_stage, "checkout our version for unmerged files",
 958                            2),
 959                OPT_SET_INT('3', "theirs", &opts.writeout_stage, "checkout their version for unmerged files",
 960                            3),
 961                OPT__FORCE(&opts.force, "force checkout (throw away local modifications)"),
 962                OPT_BOOLEAN('m', "merge", &opts.merge, "perform a 3-way merge with the new branch"),
 963                OPT_BOOLEAN(0, "overwrite-ignore", &opts.overwrite_ignore, "update ignored files (default)"),
 964                OPT_STRING(0, "conflict", &conflict_style, "style",
 965                           "conflict style (merge or diff3)"),
 966                OPT_BOOLEAN('p', "patch", &patch_mode, "select hunks interactively"),
 967                { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
 968                  "second guess 'git checkout no-such-branch'",
 969                  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
 970                OPT_END(),
 971        };
 972
 973        memset(&opts, 0, sizeof(opts));
 974        memset(&new, 0, sizeof(new));
 975        opts.overwrite_ignore = 1;
 976
 977        gitmodules_config();
 978        git_config(git_checkout_config, &opts);
 979
 980        opts.track = BRANCH_TRACK_UNSPECIFIED;
 981
 982        argc = parse_options(argc, argv, prefix, options, checkout_usage,
 983                             PARSE_OPT_KEEP_DASHDASH);
 984
 985        /* we can assume from now on new_branch = !new_branch_force */
 986        if (opts.new_branch && opts.new_branch_force)
 987                die(_("-B cannot be used with -b"));
 988
 989        /* copy -B over to -b, so that we can just check the latter */
 990        if (opts.new_branch_force)
 991                opts.new_branch = opts.new_branch_force;
 992
 993        if (patch_mode && (opts.track > 0 || opts.new_branch
 994                           || opts.new_branch_log || opts.merge || opts.force
 995                           || opts.force_detach))
 996                die (_("--patch is incompatible with all other options"));
 997
 998        if (opts.force_detach && (opts.new_branch || opts.new_orphan_branch))
 999                die(_("--detach cannot be used with -b/-B/--orphan"));
1000        if (opts.force_detach && 0 < opts.track)
1001                die(_("--detach cannot be used with -t"));
1002
1003        /* --track without -b should DWIM */
1004        if (0 < opts.track && !opts.new_branch) {
1005                const char *argv0 = argv[0];
1006                if (!argc || !strcmp(argv0, "--"))
1007                        die (_("--track needs a branch name"));
1008                if (!prefixcmp(argv0, "refs/"))
1009                        argv0 += 5;
1010                if (!prefixcmp(argv0, "remotes/"))
1011                        argv0 += 8;
1012                argv0 = strchr(argv0, '/');
1013                if (!argv0 || !argv0[1])
1014                        die (_("Missing branch name; try -b"));
1015                opts.new_branch = argv0 + 1;
1016        }
1017
1018        if (opts.new_orphan_branch) {
1019                if (opts.new_branch)
1020                        die(_("--orphan and -b|-B are mutually exclusive"));
1021                if (opts.track > 0)
1022                        die(_("--orphan cannot be used with -t"));
1023                opts.new_branch = opts.new_orphan_branch;
1024        }
1025
1026        if (conflict_style) {
1027                opts.merge = 1; /* implied */
1028                git_xmerge_config("merge.conflictstyle", conflict_style, NULL);
1029        }
1030
1031        if (opts.force && opts.merge)
1032                die(_("git checkout: -f and -m are incompatible"));
1033
1034        /*
1035         * Extract branch name from command line arguments, so
1036         * all that is left is pathspecs.
1037         *
1038         * Handle
1039         *
1040         *  1) git checkout <tree> -- [<paths>]
1041         *  2) git checkout -- [<paths>]
1042         *  3) git checkout <something> [<paths>]
1043         *
1044         * including "last branch" syntax and DWIM-ery for names of
1045         * remote branches, erroring out for invalid or ambiguous cases.
1046         */
1047        if (argc) {
1048                int dwim_ok =
1049                        !patch_mode &&
1050                        dwim_new_local_branch &&
1051                        opts.track == BRANCH_TRACK_UNSPECIFIED &&
1052                        !opts.new_branch;
1053                int n = parse_branchname_arg(argc, argv, dwim_ok,
1054                                &new, &source_tree, rev, &opts.new_branch);
1055                argv += n;
1056                argc -= n;
1057        }
1058
1059        if (opts.track == BRANCH_TRACK_UNSPECIFIED)
1060                opts.track = git_branch_track;
1061
1062        if (argc) {
1063                const char **pathspec = get_pathspec(prefix, argv);
1064
1065                if (!pathspec)
1066                        die(_("invalid path specification"));
1067
1068                if (patch_mode)
1069                        return interactive_checkout(new.name, pathspec, &opts);
1070
1071                /* Checkout paths */
1072                if (opts.new_branch) {
1073                        if (argc == 1) {
1074                                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]);
1075                        } else {
1076                                die(_("git checkout: updating paths is incompatible with switching branches."));
1077                        }
1078                }
1079
1080                if (opts.force_detach)
1081                        die(_("git checkout: --detach does not take a path argument"));
1082
1083                if (1 < !!opts.writeout_stage + !!opts.force + !!opts.merge)
1084                        die(_("git checkout: --ours/--theirs, --force and --merge are incompatible when\nchecking out of the index."));
1085
1086                return checkout_paths(source_tree, pathspec, prefix, &opts);
1087        }
1088
1089        if (patch_mode)
1090                return interactive_checkout(new.name, NULL, &opts);
1091
1092        if (opts.new_branch) {
1093                struct strbuf buf = STRBUF_INIT;
1094
1095                opts.branch_exists = validate_new_branchname(opts.new_branch, &buf,
1096                                                             !!opts.new_branch_force,
1097                                                             !!opts.new_branch_force);
1098
1099                strbuf_release(&buf);
1100        }
1101
1102        if (new.name && !new.commit) {
1103                die(_("Cannot switch branch to a non-commit."));
1104        }
1105        if (opts.writeout_stage)
1106                die(_("--ours/--theirs is incompatible with switching branches."));
1107
1108        if (!new.commit) {
1109                unsigned char rev[20];
1110                int flag;
1111
1112                if (!read_ref_full("HEAD", rev, 0, &flag) &&
1113                    (flag & REF_ISSYMREF) && is_null_sha1(rev))
1114                        return switch_unborn_to_new_branch(&opts);
1115        }
1116        return switch_branches(&opts, &new);
1117}