Merge branch 'nd/checkout-keep-sparse'
authorJunio C Hamano <gitster@pobox.com>
Mon, 22 Apr 2013 18:11:40 +0000 (11:11 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 22 Apr 2013 18:11:40 +0000 (11:11 -0700)
Make the initial "sparse" selection of the paths more sticky across
"git checkout".

* nd/checkout-keep-sparse:
checkout: add --ignore-skip-worktree-bits in sparse checkout mode

1  2 
Documentation/gitrepository-layout.txt
builtin/checkout.c
index 2ad09f4baf2bef3fc0b44de510d17c1f912c60cd,817337f575f6cb728ddf49560ee93a3ec993cb67..d6f3393c5f5e4e8b564e702a06c632262847ee9d
@@@ -106,7 -106,7 +106,7 @@@ refs/remotes/`name`:
        from a remote repository.
  
  refs/replace/`<obj-sha1>`::
 -      records the SHA1 of the object that replaces `<obj-sha1>`.
 +      records the SHA-1 of the object that replaces `<obj-sha1>`.
        This is similar to info/grafts and is internally used and
        maintained by linkgit:git-replace[1]. Such refs can be exchanged
        between repositories while grafts are not.
@@@ -184,6 -184,10 +184,10 @@@ info/exclude:
        'git clean' look at it but the core Git commands do not look
        at it.  See also: linkgit:gitignore[5].
  
+ info/sparse-checkout::
+       This file stores sparse checkout patterns.
+       See also: linkgit:git-read-tree[1].
  remotes::
        Stores shorthands for URL and default refnames for use
        when interacting with remote repositories via 'git fetch',
diff --combined builtin/checkout.c
index eb51872347d9b7d3e81c37d9ddb4272a99f2b75f,4ed1ee7e25930aece59b7986fda9523a58c74dd6..81b4419da51f3211129833a472048d897385bca4
@@@ -35,6 -35,7 +35,7 @@@ struct checkout_opts 
        int force_detach;
        int writeout_stage;
        int overwrite_ignore;
+       int ignore_skipworktree;
  
        const char *new_branch;
        const char *new_branch_force;
@@@ -278,6 -279,8 +279,8 @@@ static int checkout_paths(const struct 
        for (pos = 0; pos < active_nr; pos++) {
                struct cache_entry *ce = active_cache[pos];
                ce->ce_flags &= ~CE_MATCHED;
+               if (!opts->ignore_skipworktree && ce_skip_worktree(ce))
+                       continue;
                if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
                        /*
                         * "git checkout tree-ish -- path", but this entry
@@@ -729,7 -732,7 +732,7 @@@ static void suggest_reattach(struct com
                        "If you want to keep them by creating a new branch, "
                        "this may be a good time\nto do so with:\n\n"
                        " git branch new_branch_name %s\n\n"),
 -                      sha1_to_hex(commit->object.sha1));
 +                      find_unique_abbrev(commit->object.sha1, DEFAULT_ABBREV));
  }
  
  /*
@@@ -1058,6 -1061,8 +1061,8 @@@ int cmd_checkout(int argc, const char *
                OPT_STRING(0, "conflict", &conflict_style, N_("style"),
                           N_("conflict style (merge or diff3)")),
                OPT_BOOLEAN('p', "patch", &opts.patch_mode, N_("select hunks interactively")),
+               OPT_BOOL(0, "ignore-skip-worktree-bits", &opts.ignore_skipworktree,
+                        N_("do not limit pathspecs to sparse entries only")),
                { OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
                  N_("second guess 'git checkout no-such-branch'"),
                  PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },