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

[PATCH 1/3] do_read_index(): always mark index as initialized unless erroring out

From
Johannes Schindelin via GitGitGadget <gitgitgadget@gmail.com>
Date
Jun 29, 2023, 13:23 UTC
Message-ID
<7ecfae7d6f63d235e6efe85b1b1d7c8f3fc08c29.1688044991.git.gitgitgadget@gmail.com>
In-Reply-To
<pull.1554.git.1688044991.gitgitgadget@gmail.com>
From: Johannes Schindelin <johannes.schindelin@gmx.de>

In 913e0e99b6a (unpack_trees(): protect the handcrafted in-core index from read_cache(), 2008-08-23) a flag was introduced into the `index_state` structure to indicate whether it had been initialized (or more correctly: read and parsed).

There was one code path that was not handled, though: when the index file does not yet exist (but the `must_exist` parameter is set to 0 to indicate that that's okay). In this instance, Git wants to go forward with a new, pristine Git index, almost as if the file had existed and contained no index entries or extensions.

Since Git wants to handle this situation the same as if an "empty" Git index file existed, let's set the `initialized` flag also in that case.

This is necessary to prepare for fixing the bug where the condition `cache_nr == 0` is incorrectly used as an indicator that the index was already read, and the condition `initialized != 0` needs to be used instead.

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
---
 read-cache.c | 1 +
 1 file changed, 1 insertion(+)
diff --git a/read-cache.c b/read-cache.c
index f4c31a68c85..b10caa9831c 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -2285,6 +2285,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist)
 	if (fd < 0) {
 		if (!must_exist && errno == ENOENT) {
 			set_new_index_sparsity(istate);
+			istate->initialized = 1;
 			return 0;
 		}
 		die_errno(_("%s: index file open failed"), path);
-- 
gitgitgadget
Previous: Johannes Schindelin via GitGitGadgetNext: Johannes Schindelin via GitGitGadget
Message 2 of 6 in “commit -a -m: allow the top-level tree to become empty again”
  1. 0/3 commit -a -m: allow the top-level tree to become empty againJohannes Schindelin via GitGitGadget, Jun 29, 2023
  2. 1/3 do_read_index(): always mark index as initialized unless erroring outJohannes Schindelin via GitGitGadget, Jun 29, 2023
  3. 2/3 split-index: accept that a base index can be emptyJohannes Schindelin via GitGitGadget, Jun 29, 2023
  4. Junio C HamanoJun 29, 2023
  5. 3/3 commit -a -m: allow the top-level tree to become empty againJohannes Schindelin via GitGitGadget, Jun 29, 2023
  6. Junio C HamanoJun 29, 2023

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.