From: "Jayesh Daga via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Jayesh Daga <jayeshdaga99@gmail.com>
Subject: [PATCH v3 0/2] [GSoC] read-cache: use index state repository for trace2 logging
Date: Mon, 30 Mar 2026 17:27:45 +0000 [thread overview]
Message-ID: <pull.2253.v3.git.git.1774891667.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.2253.v2.git.git.1774682046750.gitgitgadget@gmail.com>
trace2 calls in read-cache.c use the global 'the_repository', even though
the relevant index_state provides an explicit repository pointer via
'istate->repo'.
Using the global repository can result in incorrect trace2 output when
multiple repository instances are in use, as events may be attributed to the
wrong repository.
Use 'istate->repo' instead in these call sites to ensure correct repository
attribution.
Changes since v2:
* Apply the change consistently across read-cache.c
* Drop unnecessary intermediate variable
* Remove obsolete TODO comments
* Update commit message
Jayesh Daga (1):
read-cache: use istate->repo for trace2 logging
jayesh0104 (1):
repo: add paths.git_dir repo info key
Documentation/git-repo.adoc | 5 +++++
builtin/repo.c | 7 +++++++
read-cache.c | 32 ++++++++------------------------
t/t1900-repo-info.sh | 10 ++++++++++
4 files changed, 30 insertions(+), 24 deletions(-)
base-commit: ca1db8a0f7dc0dbea892e99f5b37c5fe5861be71
Published-As: https://github.com/gitgitgadget/git/releases/tag/pr-git-2253%2Fjayesh0104%2Ftrace2-istate-repo-v3
Fetch-It-Via: git fetch https://github.com/gitgitgadget/git pr-git-2253/jayesh0104/trace2-istate-repo-v3
Pull-Request: https://github.com/git/git/pull/2253
Range-diff vs v2:
-: ---------- > 1: 5a8165b05d repo: add paths.git_dir repo info key
1: 7fdfaaef9b ! 2: 9bb6d0fa01 read-cache: use istate->repo for trace2 logging
@@ Metadata
## Commit message ##
read-cache: use istate->repo for trace2 logging
- trace2_data_intmax() calls in do_read_index() currently use the
- global 'the_repository' instance, even though the index_state
- already carries an explicit repository pointer (istate->repo).
+ trace2 calls in read-cache.c use the global 'the_repository',
+ even though the relevant index_state provides an explicit
+ repository pointer via 'istate->repo'.
- index_state instances are initialized via INDEX_STATE_INIT(r),
- which sets istate->repo. Using the_repository here is therefore
- redundant and obscures the actual repository context associated
- with the index being read.
+ Using the global repository can result in incorrect trace2
+ output when multiple repository instances are in use, as
+ events may be attributed to the wrong repository.
- In particular, using the global repository can lead to misleading
- trace2 output in scenarios where multiple repository instances are
- in use (such as tests or future refactoring toward better library
- boundaries), as events may be attributed to the wrong repository.
-
- Switch these calls to use istate->repo directly, making the
- association between the index and its repository explicit.
-
- Since istate->repo is expected to be non-NULL, enforce this
- assumption with a BUG() check so that any violation of this
- invariant is caught early.
-
- Also remove the now-obsolete TODO comment.
+ Use 'istate->repo' instead to ensure correct repository
+ attribution.
Signed-off-by: Jayesh Daga <jayeshdaga99@gmail.com>
## read-cache.c ##
-@@ read-cache.c: 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;
@@ read-cache.c: int do_read_index(struct index_state *istate, const char *path, int must_exist)
}
munmap((void *)mmap, mmap_size);
@@ read-cache.c: int do_read_index(struct index_state *istate, const char *path, in
- * that is associated with the given "istate".
- */
- trace2_data_intmax("index", the_repository, "read/version",
-+ r=istate->repo;
-+ if (!r)
-+ BUG("istate->repo is NULL in do_read_index");
-+ trace2_data_intmax("index", r, "read/version",
++ trace2_data_intmax("index", istate->repo, "read/version",
istate->version);
- trace2_data_intmax("index", the_repository, "read/cache_nr",
-+ trace2_data_intmax("index", r, "read/cache_nr",
++ trace2_data_intmax("index", istate->repo, "read/cache_nr",
istate->cache_nr);
/*
+@@ read-cache.c: int read_index_from(struct index_state *istate, const char *path,
+ if (istate->initialized)
+ return istate->cache_nr;
+
+- /*
+- * TODO trace2: replace "the_repository" with the actual repo instance
+- * that is associated with the given "istate".
+- */
+- trace2_region_enter_printf("index", "do_read_index", the_repository,
++ trace2_region_enter_printf("index", "do_read_index", istate->repo,
+ "%s", path);
+ trace_performance_enter();
+ ret = do_read_index(istate, path, 0);
+ trace_performance_leave("read cache %s", path);
+- trace2_region_leave_printf("index", "do_read_index", the_repository,
++ trace2_region_leave_printf("index", "do_read_index", istate->repo,
+ "%s", path);
+
+ split_index = istate->split_index;
+@@ read-cache.c: static int do_write_index(struct index_state *istate, struct tempfile *tempfile,
+ istate->timestamp.nsec = ST_MTIME_NSEC(st);
+ trace_performance_since(start, "write index, changed mask = %x", istate->cache_changed);
+
+- /*
+- * TODO trace2: replace "the_repository" with the actual repo instance
+- * that is associated with the given "istate".
+- */
+- trace2_data_intmax("index", the_repository, "write/version",
++ trace2_data_intmax("index", istate->repo, "write/version",
+ istate->version);
+- trace2_data_intmax("index", the_repository, "write/cache_nr",
++ trace2_data_intmax("index", istate->repo, "write/cache_nr",
+ istate->cache_nr);
+
+ ret = 0;
+@@ read-cache.c: static int do_write_locked_index(struct index_state *istate,
+ return ret;
+ }
+
+- /*
+- * TODO trace2: replace "the_repository" with the actual repo instance
+- * that is associated with the given "istate".
+- */
+- trace2_region_enter_printf("index", "do_write_index", the_repository,
++ trace2_region_enter_printf("index", "do_write_index", istate->repo,
+ "%s", get_lock_file_path(lock));
+ ret = do_write_index(istate, lock->tempfile, write_extensions, flags);
+- trace2_region_leave_printf("index", "do_write_index", the_repository,
++ trace2_region_leave_printf("index", "do_write_index", istate->repo,
+ "%s", get_lock_file_path(lock));
+
+ if (was_full)
--
gitgitgadget
next prev parent reply other threads:[~2026-03-30 17:27 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-27 10:08 [PATCH] read-cache: use index state repository for trace2 logging Jayesh Daga via GitGitGadget
2026-03-27 13:48 ` Derrick Stolee
2026-03-27 16:28 ` Junio C Hamano
2026-03-28 5:25 ` jayesh0104
2026-03-28 7:14 ` [PATCH v2] read-cache: use istate->repo " Jayesh Daga via GitGitGadget
2026-03-28 18:36 ` Junio C Hamano
2026-03-29 14:57 ` Derrick Stolee
2026-03-30 17:27 ` Jayesh Daga via GitGitGadget [this message]
2026-03-30 17:27 ` [PATCH v3 1/2] repo: add paths.git_dir repo info key jayesh0104 via GitGitGadget
2026-03-30 17:27 ` [PATCH v3 2/2] read-cache: use istate->repo for trace2 logging Jayesh Daga via GitGitGadget
2026-03-30 18:38 ` [PATCH v4] " Jayesh Daga via GitGitGadget
2026-03-30 20:04 ` Junio C Hamano
2026-04-02 14:26 ` Derrick Stolee
2026-04-02 15:25 ` [PATCH] " Jayesh Daga
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=pull.2253.v3.git.git.1774891667.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=git@vger.kernel.org \
--cc=jayeshdaga99@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.