From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: kirill.mueller@ivt.baug.ethz.ch,
"Junio C Hamano" <gitster@pobox.com>,
"Jonathan Niedier" <jrnieder@gmail.com>,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH v2] checkout: add --no-widen for restoring files in sparse checkout mode
Date: Sat, 30 Mar 2013 17:02:33 +0700 [thread overview]
Message-ID: <1364637753-18785-1-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1364101583-6035-1-git-send-email-pclouds@gmail.com>
"git checkout -- <paths>" is usually used to restore all modified
files in <paths>. In sparse checkout mode, this command is overloaded
with another meaning: to add back all files in <paths> that are
excluded by sparse patterns.
Add "--no-widen" option to do what normal mode does: restore all
modified files and nothing else. The user can make it "default" by
putting it to an alias (e.g. "co = checkout --no-widen") and get back
to the original behavior with "git co --widen".
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
--sparse -> --no-widen and git-checkout does not error out when the
option is specified but has no effects. Let's see how it works out.
We could change the default from --widen to --no-widen later.
Documentation/git-checkout.txt | 11 +++++++++++
builtin/checkout.c | 7 +++++++
t/t1011-read-tree-sparse-checkout.sh | 12 ++++++++++++
3 files changed, 30 insertions(+)
diff --git a/Documentation/git-checkout.txt b/Documentation/git-checkout.txt
index 8edcdca..538b8b8 100644
--- a/Documentation/git-checkout.txt
+++ b/Documentation/git-checkout.txt
@@ -180,6 +180,17 @@ branch by running "git rm -rf ." from the top level of the working tree.
Afterwards you will be ready to prepare your new files, repopulating the
working tree, by copying them from elsewhere, extracting a tarball, etc.
+--no-widen::
+ In sparse checkout mode, `git checkout -- <paths>` would
+ update all entries matched by <paths> regardless of sparse
+ patterns. This option only updates entries matched by <paths>
+ and sparse patterns.
+
+--widen::
+ Revert the effect of `--no-widen` if specified and make
+ `git checkout -- <paths>` update all entries matched by
+ <paths> regardless of sparse patterns.
+
-m::
--merge::
When switching branches,
diff --git a/builtin/checkout.c b/builtin/checkout.c
index a9c1b5a..246de33 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -35,6 +35,7 @@ struct checkout_opts {
int force_detach;
int writeout_stage;
int overwrite_ignore;
+ int widen_sparse;
const char *new_branch;
const char *new_branch_force;
@@ -275,6 +276,8 @@ static int checkout_paths(const struct checkout_opts *opts,
struct cache_entry *ce = active_cache[pos];
if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
continue;
+ if (!opts->widen_sparse && ce_skip_worktree(ce))
+ continue;
match_pathspec(opts->pathspec, ce->name, ce_namelen(ce), 0, ps_matched);
}
@@ -315,6 +318,8 @@ static int checkout_paths(const struct checkout_opts *opts,
struct cache_entry *ce = active_cache[pos];
if (opts->source_tree && !(ce->ce_flags & CE_UPDATE))
continue;
+ if (!opts->widen_sparse && ce_skip_worktree(ce))
+ continue;
if (match_pathspec(opts->pathspec, ce->name, ce_namelen(ce), 0, NULL)) {
if (!ce_stage(ce)) {
errs |= checkout_entry(ce, &state, NULL);
@@ -1029,6 +1034,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
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, "widen", &opts.widen_sparse, N_("do not limit pathspecs to sparse entries only (default)")),
{ OPTION_BOOLEAN, 0, "guess", &dwim_new_local_branch, NULL,
N_("second guess 'git checkout no-such-branch'"),
PARSE_OPT_NOARG | PARSE_OPT_HIDDEN },
@@ -1039,6 +1045,7 @@ int cmd_checkout(int argc, const char **argv, const char *prefix)
memset(&new, 0, sizeof(new));
opts.overwrite_ignore = 1;
opts.prefix = prefix;
+ opts.widen_sparse = 1;
gitmodules_config();
git_config(git_checkout_config, &opts);
diff --git a/t/t1011-read-tree-sparse-checkout.sh b/t/t1011-read-tree-sparse-checkout.sh
index 5c0053a..4a45714 100755
--- a/t/t1011-read-tree-sparse-checkout.sh
+++ b/t/t1011-read-tree-sparse-checkout.sh
@@ -250,4 +250,16 @@ EOF
test_cmp expected actual
'
+test_expect_success 'checkout --no-widen' '
+ echo "*" >.git/info/sparse-checkout &&
+ git checkout -f top &&
+ test -f init.t &&
+ echo sub >.git/info/sparse-checkout &&
+ git checkout &&
+ echo modified >> sub/added &&
+ git checkout --no-widen . &&
+ ! test -f init.t &&
+ git diff --exit-code HEAD
+'
+
test_done
--
1.8.2.83.gc99314b
next prev parent reply other threads:[~2013-03-30 10:03 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-22 10:28 Hard reset of a subdirectory in a sparse checkout setting Kirill Müller
2013-03-23 9:59 ` Duy Nguyen
2013-03-23 13:02 ` Kirill Müller
2013-03-24 5:06 ` [PATCH] checkout: add --sparse for restoring files in sparse checkout mode Nguyễn Thái Ngọc Duy
2013-03-24 6:12 ` Eric Sunshine
2013-03-24 18:17 ` Jonathan Nieder
2013-03-24 19:50 ` Kirill Müller
2013-03-25 1:34 ` Duy Nguyen
2013-03-25 1:57 ` Jonathan Nieder
2013-03-30 10:02 ` Nguyễn Thái Ngọc Duy [this message]
2013-04-01 4:48 ` [PATCH v2] checkout: add --no-widen " Jonathan Nieder
2013-04-01 5:12 ` Junio C Hamano
2013-04-01 5:13 ` Duy Nguyen
2013-04-01 6:18 ` Jonathan Nieder
2013-04-12 23:12 ` [PATCH v3] checkout: add --ignore-skip-worktree-bits " Nguyễn Thái Ngọc Duy
2013-05-14 9:27 ` Müller Kirill
2013-05-14 10:21 ` Duy Nguyen
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1364637753-18785-1-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=jrnieder@gmail.com \
--cc=kirill.mueller@ivt.baug.ethz.ch \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).