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 3/8] apply: fix adding new files on i-t-a entries
Date: Sat, 22 Aug 2015 08:08:06 +0700 [thread overview]
Message-ID: <1440205700-19749-4-git-send-email-pclouds@gmail.com> (raw)
In-Reply-To: <1440205700-19749-1-git-send-email-pclouds@gmail.com>
Applying a patch that adds a file when that file is registered with "git
add -N" will fail with message "already exists in index" because
git-apply checks, sees those i-t-a entries and aborts. git-apply does
not realize those are for bookkeeping only, they do not really exist in
the index. This patch tightens the "exists in index" check, ignoring
i-t-a entries.
Reported-by: Patrick Higgins <phiggins@google.com>
Reported-by: Bjørnar Snoksrud <snoksrud@gmail.com>
Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
---
builtin/apply.c | 9 +++++----
t/t2203-add-intent.sh | 13 +++++++++++++
2 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/builtin/apply.c b/builtin/apply.c
index 54aba4e..76b58a1 100644
--- a/builtin/apply.c
+++ b/builtin/apply.c
@@ -3553,10 +3553,11 @@ static int check_to_create(const char *new_name, int ok_if_exists)
{
struct stat nst;
- if (check_index &&
- cache_name_pos(new_name, strlen(new_name)) >= 0 &&
- !ok_if_exists)
- return EXISTS_IN_INDEX;
+ if (check_index && !ok_if_exists) {
+ int pos = cache_name_pos(new_name, strlen(new_name));
+ if (pos >= 0 && !ce_intent_to_add(active_cache[pos]))
+ return EXISTS_IN_INDEX;
+ }
if (cached)
return 0;
diff --git a/t/t2203-add-intent.sh b/t/t2203-add-intent.sh
index 2a4a749..bb5ef2b 100755
--- a/t/t2203-add-intent.sh
+++ b/t/t2203-add-intent.sh
@@ -82,5 +82,18 @@ test_expect_success 'cache-tree invalidates i-t-a paths' '
test_cmp expect actual
'
+test_expect_success 'apply adds new file on i-t-a entry' '
+ git init apply &&
+ (
+ cd apply &&
+ echo newcontent >newfile &&
+ git add newfile &&
+ git diff --cached >patch &&
+ rm .git/index &&
+ git add -N newfile &&
+ git apply --cached patch
+ )
+'
+
test_done
--
2.3.0.rc1.137.g477eb31
next prev parent reply other threads:[~2015-08-22 1:08 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 ` Nguyễn Thái Ngọc Duy [this message]
2015-08-25 17:01 ` [PATCH 3/8] apply: fix adding new files on i-t-a entries 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 ` [PATCH 5/8] checkout(-index): do not checkout i-t-a entries Nguyễn Thái Ngọc Duy
2015-08-25 17:36 ` 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-4-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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.