Skip to content

Commit 7cfde3f

Browse files
jupedgitster
authored andcommitted
apply: allow "new file" patches on i-t-a entries
diff-files recently changed to treat changes to paths marked "intent to add" in the index as new file diffs rather than diffs from the empty blob. However, apply refuses to apply new file diffs on top of existing index entries, except in the case of renames. This causes "git add -p", which uses apply, to fail when attempting to stage hunks from a file when intent to add has been recorded. This changes the logic in check_to_create() which checks if an entry already exists in an index in two ways: first, we only search for an index entry at all if ok_if_exists is false; second, we check for the CE_INTENT_TO_ADD flag on any index entries we find and allow the apply to proceed if it is set. Helped-by: Junio C Hamano <gitster@pobox.com> Signed-off-by: Raymond E. Pasco <ray@ameretat.dev> Signed-off-by: Junio C Hamano <gitster@pobox.com>
1 parent feea694 commit 7cfde3f

File tree

1 file changed

+7
-4
lines changed

1 file changed

+7
-4
lines changed

apply.c

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3747,10 +3747,13 @@ static int check_to_create(struct apply_state *state,
37473747
{
37483748
struct stat nst;
37493749

3750-
if (state->check_index &&
3751-
index_name_pos(state->repo->index, new_name, strlen(new_name)) >= 0 &&
3752-
!ok_if_exists)
3753-
return EXISTS_IN_INDEX;
3750+
if (state->check_index && !ok_if_exists) {
3751+
int pos = index_name_pos(state->repo->index, new_name, strlen(new_name));
3752+
if (pos >= 0 &&
3753+
!(state->repo->index->cache[pos]->ce_flags & CE_INTENT_TO_ADD))
3754+
return EXISTS_IN_INDEX;
3755+
}
3756+
37543757
if (state->cached)
37553758
return 0;
37563759

0 commit comments

Comments
 (0)