git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH v2 1/4] apply: read in the index in --intent-to-add mode

From
Raymond E. Pasco <ray@ameretat.dev>
Date
Jul 2, 2025, 21:26 UTC
Message-ID
<20250702212814.1923253-2-ray@ameretat.dev>
In-Reply-To
<20250702212814.1923253-1-ray@ameretat.dev>

There are three main modes of operation for apply: applying only to the worktree, applying to the worktree and index (--index), and applying only to the index (--cached).

The --intent-to-add flag modifies the first of these modes, applying only to the worktree, in a way which touches the index, because intents to add are special index entries. However, it has not ever worked correctly in any but the most trivial (empty repository) cases, because the index was never read in (in apply, this is done in read_apply_cache()) before writing to it.

This causes the operation to clobber the old, correct index with a new empty-tree index before writing intent-to-add entries to this empty index; the final result is that the index now records every existing file in the repository as deleted, which is incorrect.

This error can be corrected by first reading the index. The update_index flag is correctly set if ita_only is true, because this mode updates the index. However, if we merely gate the call to read_apply_cache() behind update_index, then it will not be read when state->apply is false, even if it must be checked. Therefore, we instead read the index if it will be either checked or updated, because reading the index is a prerequisite to either.

Reported-by: Ryan Hodges <rhodges@cisco.com>
Original-patch-by: Johannes Altmanninger <aclopte@gmail.com>
Signed-off-by: Raymond E. Pasco <ray@ameretat.dev>
---
 apply.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apply.c b/apply.c
index 8bbe6ed224..c8d4517c0a 100644
--- a/apply.c
+++ b/apply.c
@@ -4833,7 +4833,7 @@ static int apply_patch(struct apply_state *state,
 					       LOCK_DIE_ON_ERROR);
 	}
 
-	if (state->check_index && read_apply_cache(state) < 0) {
+	if ((state->check_index || state->update_index) && read_apply_cache(state) < 0) {
 		error(_("unable to read index file"));
 		res = -128;
 		goto end;
-- 
2.50.0.201.gfeb04032fb
Previous: Raymond E. PascoNext: Raymond E. Pasco
Message 16 of 25 in “fix apply --intent-to-add”
  1. 0/5 fix apply --intent-to-addRaymond E. Pasco, Jun 28, 2025
  2. 1/5 apply: error on --intent-to-add outside gitdirRaymond E. Pasco, Jun 28, 2025
  3. Junio C HamanoJun 30, 2025
  4. Raymond E. PascoJul 1, 2025
  5. 2/5 apply: read in the index in --intent-to-add modeRaymond E. Pasco, Jun 28, 2025
  6. Junio C HamanoJun 30, 2025
  7. Raymond E. PascoJul 1, 2025
  8. 3/5 apply: only write intents to add for new filesRaymond E. Pasco, Jun 28, 2025
  9. Junio C HamanoJun 30, 2025
  10. Raymond E. PascoJul 1, 2025
  11. 4/5 t4140: test apply --intent-to-add interactionsRaymond E. Pasco, Jun 28, 2025
  12. 5/5 apply docs: clarify wording for --intent-to-addRaymond E. Pasco, Jun 28, 2025
  13. Lidong YanJun 29, 2025
  14. Raymond E. PascoJun 30, 2025
  15. 0/4 fix apply --intent-to-addRaymond E. Pasco, Jul 2, 2025
  16. 1/4 apply: read in the index in --intent-to-add modeRaymond E. Pasco, Jul 2, 2025
  17. 2/4 apply: only write intents to add for new filesRaymond E. Pasco, Jul 2, 2025
  18. 3/4 t4140: test apply --intent-to-add interactionsRaymond E. Pasco, Jul 2, 2025
  19. 4/4 apply docs: clarify wording for --intent-to-addRaymond E. Pasco, Jul 2, 2025
  20. 0/4 fix apply --intent-to-addRaymond E. Pasco, Jul 7, 2025
  21. 1/4 apply: read in the index in --intent-to-add modeRaymond E. Pasco, Jul 7, 2025
  22. 2/4 apply: only write intents to add for new filesRaymond E. Pasco, Jul 7, 2025
  23. 3/4 t4140: test apply --intent-to-add interactionsRaymond E. Pasco, Jul 7, 2025
  24. 4/4 apply docs: clarify wording for --intent-to-addRaymond E. Pasco, Jul 7, 2025
  25. Junio C HamanoJul 7, 2025

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.