From: Jayesh Daga via GitGitGadget Date: Fri, 27 Mar 2026 10:08:06 GMT Subject: [PATCH] read-cache: use index state repository for trace2 logging Message-ID: From: jayesh0104 Replace uses of the_repository in trace2_data_intmax() with istate->repo, which represents the repository associated with the index state. This avoids relying on global repository state and aligns with other parts of the codebase (e.g., sparse-index.c) that pass the repository instance explicitly. No functional change intended. Signed-off-by: jayesh0104 --- [GSoC] read-cache: use index state repository for trace2 logging HIGH LEVEL ========== The current implementation of trace2_data_intmax() in read-cache.c relies on the global the_repository instance. As part of the ongoing effort to "lib-ify" the Git codebase and reduce dependence on global state, this patch transitions those calls to use the repository instance associated with the index_state. Low-level (Implementation & Justification) ========================================== In read-cache.c, the index_state (istate) typically carries a pointer to its associated repository. However, because istate->repo is not guaranteed to be initialized in all code paths (e.g., certain low-level utility or testing contexts), this patch implements a defensive fallback pattern. Changes: Introduced a local repository pointer r that prefers istate->repo but falls back to the_repository if the former is NULL. Updated trace2_data_intmax() calls to use this context-aware pointer. + struct repository *r = istate->repo ? istate->repo : the_repository; - trace2_data_intmax("index", the_repository, "read/version", istate->version); + trace2_data_intmax("index", r, "read/version", istate->version); Benefits: Thread Safety & Modernization: Aligns with the project's goal of moving away from the_repository. Robustness: The ternary fallback ensures we avoid potential NULL pointer dereferences while maintaining existing logging behavior in edge cases. Consistency: Follows patterns seen in other modernized areas of the codebase. Summary ======= Transitioned trace2 logging in read-cache.c from global to local repository context. Implemented a safety fallback to the_repository to handle uninitialized istate->repo pointers. No functional changes to telemetry output are intended. cc :Karthik Nayak karthik.188@gmail.com Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2253%2Fjayesh0104%2Ftrace2-istate-repo-v1 Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2253/jayesh0104/trace2-istate-repo-v1 Pull-Request: https://github.com/git/git/pull/2253 read-cache.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/read-cache.c b/read-cache.c index 5049f9baca..2c5c5165e0 100644 --- a/read-cache.c +++ b/read-cache.c @@ -2206,6 +2206,7 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist) size_t extension_offset = 0; int nr_threads, cpus; struct index_entry_offset_table *ieot = NULL; + struct repository *r; if (istate->initialized) return istate->cache_nr; @@ -2313,9 +2314,10 @@ int do_read_index(struct index_state *istate, const char *path, int must_exist) * TODO trace2: replace "the_repository" with the actual repo instance * that is associated with the given "istate". */ - trace2_data_intmax("index", the_repository, "read/version", + r = istate->repo ? istate->repo : the_repository; + trace2_data_intmax("index", r, "read/version", istate->version); - trace2_data_intmax("index", the_repository, "read/cache_nr", + trace2_data_intmax("index", r, "read/cache_nr", istate->cache_nr); /* base-commit: ca1db8a0f7dc0dbea892e99f5b37c5fe5861be71 -- gitgitgadget