From: "Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
To: git@vger.kernel.org
Cc: "Junio C Hamano" <gitster@pobox.com>,
phiggins@google.com, snoksrud@gmail.com,
"Nguyễn Thái Ngọc Duy" <pclouds@gmail.com>
Subject: [PATCH 5/8] checkout(-index): do not checkout i-t-a entries
Date: Sat, 22 Aug 2015 08:08:08 +0700 [thread overview]
Message-ID: <1440205700-19749-6-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1440205700-19749-1-git-send-email-pclouds@gmail.com>
The cached blob of i-t-a entries are empty blob. By checkout, we delete
the content we have. Don't do it.
This is done higher up instead of inside checkout_entry() because we
would have limited options in there: silently ignore, loudly ignore,
die. At higher level we can do better reporting. For example, "git
checkout -- foo" will complain that "foo" does not match pathspec, just
like when "foo" is not registered with "git add -N"
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
builtin/checkout-index.c | 5 ++++-
builtin/checkout.c | 2 ++
t/t2203-add-intent.sh | 34 ++++++++++++++++++++++++++++++++++
3 files changed, 40 insertions(+), 1 deletion(-)
diff --git a/builtin/checkout-index.c b/builtin/checkout-index.c
index 8028c37..eca975d 100644
--- a/builtin/checkout-index.c
+++ b/builtin/checkout-index.c
@@ -56,7 +56,8 @@ static int checkout_file(const char *name, const char *prefix)
while (pos < active_nr) {
struct cache_entry *ce = active_cache[pos];
if (ce_namelen(ce) != namelen ||
- memcmp(ce->name, name, namelen))
+ memcmp(ce->name, name, namelen) ||
+ ce_intent_to_add(ce))
break;
has_same_name = 1;
pos++;
@@ -99,6 +100,8 @@ static void checkout_all(const char *prefix, int prefix_length)
if (ce_stage(ce) != checkout_stage
&& (CHECKOUT_ALL != checkout_stage || !ce_stage(ce)))
continue;
+ if (ce_intent_to_add(ce))
+ continue;
if (prefix && *prefix &&
(ce_namelen(ce) <= prefix_length ||
memcmp(prefix, ce->name, prefix_length)))
diff --git a/builtin/checkout.c b/builtin/checkout.c
index e1403be..02889d4 100644
--- a/builtin/checkout.c
+++ b/builtin/checkout.c
@@ -300,6 +300,8 @@ static int checkout_paths(const struct checkout_opts *opts,
* anything to this entry at all.
*/
continue;
+ if (ce_intent_to_add(ce))
+ continue;
/*
* Either this entry came from the tree-ish we are
* checking the paths out of, or we are checking out
diff --git a/t/t2203-add-intent.sh b/t/t2203-add-intent.sh
index 96c8755..d0f36a4 100755
--- a/t/t2203-add-intent.sh
+++ b/t/t2203-add-intent.sh
@@ -111,5 +111,39 @@ test_expect_success 'apply:check_preimage() not creating empty file' '
)
'
+test_expect_success 'checkout ignores i-t-a' '
+ git init checkout &&
+ (
+ cd checkout &&
+ echo data >file &&
+ git add -N file &&
+ test_must_fail git checkout -- file &&
+ echo data >expected &&
+ test_cmp expected file
+ )
+'
+
+test_expect_success 'checkout-index ignores i-t-a' '
+ (
+ cd checkout &&
+ git checkout-index file &&
+ echo data >expected &&
+ test_cmp expected file
+ )
+'
+
+test_expect_success 'checkout-index --all ignores i-t-a' '
+ (
+ cd checkout &&
+ echo data >anotherfile &&
+ git add anotherfile &&
+ rm anotherfile &&
+ git checkout-index --all &&
+ echo data >expected &&
+ test_cmp expected file &&
+ test_cmp expected anotherfile
+ )
+'
+
test_done
--
2.3.0.rc1.137.g477eb31
next prev parent reply other threads:[~2015-08-22 1:09 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-22 14:29 apply --cached --whitespace=fix now failing on items added with "add -N" Patrick Higgins
2015-06-22 14:45 ` Duy Nguyen
2015-06-22 17:06 ` Junio C Hamano
2015-06-23 12:34 ` [PATCH] apply: fix adding new files on i-t-a entries Nguyễn Thái Ngọc Duy
2015-06-23 16:50 ` Junio C Hamano
2015-06-23 17:37 ` Junio C Hamano
2015-06-24 4:48 ` Junio C Hamano
2015-06-24 10:11 ` Duy Nguyen
2015-06-24 17:05 ` Junio C Hamano
2015-06-25 12:26 ` Duy Nguyen
2015-06-25 13:07 ` Junio C Hamano
2015-08-22 1:08 ` [PATCH 0/8] Resurrect "diff-lib.c: adjust position of i-t-a entries in diff" Nguyễn Thái Ngọc Duy
2015-08-22 1:08 ` [PATCH 1/8] blame: remove obsolete comment Nguyễn Thái Ngọc Duy
2015-08-22 1:08 ` [PATCH 2/8] Add and use convenient macro ce_intent_to_add() Nguyễn Thái Ngọc Duy
2015-08-22 1:08 ` [PATCH 3/8] apply: fix adding new files on i-t-a entries Nguyễn Thái Ngọc Duy
2015-08-25 17:01 ` Junio C Hamano
2015-08-22 1:08 ` [PATCH 4/8] apply: make sure check_preimage() does not leave empty file on error Nguyễn Thái Ngọc Duy
2015-08-25 17:16 ` Junio C Hamano
2015-08-22 1:08 ` Nguyễn Thái Ngọc Duy [this message]
2015-08-25 17:36 ` [PATCH 5/8] checkout(-index): do not checkout i-t-a entries Junio C Hamano
2015-11-29 15:31 ` Duy Nguyen
2015-11-30 19:17 ` Junio C Hamano
2015-08-22 1:08 ` [PATCH 6/8] grep: make it clear i-t-a entries are ignored Nguyễn Thái Ngọc Duy
2015-08-22 1:11 ` [PATCH 7/8] diff.h: extend "flags" field to 64 bits because we're out of bits Nguyễn Thái Ngọc Duy
2015-08-25 17:39 ` Junio C Hamano
2015-08-31 10:22 ` Duy Nguyen
2015-08-25 17:37 ` [PATCH 6/8] grep: make it clear i-t-a entries are ignored Junio C Hamano
2015-08-25 17:37 ` Junio C Hamano
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=1440205700-19749-6-git-send-email-pclouds@gmail.com \
--to=pclouds@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=phiggins@google.com \
--cc=snoksrud@gmail.com \
/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).