From: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail•com>
To: git@vger•kernel.org
Cc: phillip.wood123@gmail•com, gitster@pobox•com,
karthik.188@gmail•com,
Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail•com>
Subject: [PATCH v5 0/3] wt-status: reduce reliance on global state
Date: Wed, 18 Feb 2026 23:23:39 +0530 [thread overview]
Message-ID: <20260218175654.66004-1-shreyanshpaliwalcmsmn@gmail.com> (raw)
In-Reply-To: <20260131190106.389289-1-shreyanshpaliwalcmsmn@gmail.com>
In wt-status.c code still relies on some global variables, including
the_repository and the_hash_algo, even in cases where a repository instance
is already available via struct wt_status or struct repository.
In patch 1/3, update function parameters and callers to pass and use struct
repository instead of the_repository where no local repository access was
available.
In patch 2/3, replace direct uses of the_repository with repository
instances already available in local structs.
In patch 3/3, replace remaining uses of the global the_hash_algo with the
hash algorithm stored in the respective repository instance.
These changes remove uses of the_repository and the_hash_algo from
wt-status.c and reduce its dependence on global state.
The 'USE_THE_REPOSITORY_VARIABLE' macro cannot yet be removed, since these
patches only eliminate some uses of the_repository and the_hash_algo, while
some global variables are still referenced.
In particular wt-status.c still relies on the following globals,
* the_repository, this is still used in functions like worktree_git_path()
and wt_status_check_bisect/rebase() which are dependant on the worktree
API and they are being handled in a seperate patch series[1].
* core_apply_sparse_checkout, this is already being addressed in an ongoing
patch series [2].
* comment_line_str and DEFAULT_ABBREV, these both still are used in
wt-status.c but they dont have any equivalent local instances.
[1]- https://lore.kernel.org/git/20260213120529.15475-1-shreyanshpaliwalcmsmn@gmail.com/T/#mf664ad751faaf2eaca138302b1cc9d3856c9fec3
[2]- https://lore.kernel.org/git/5e56e1cc4172cfff9e917a068184e102aa70bf1d.1769256839.git.belkid98@gmail.com/t/#u
Shreyansh Paliwal (3):
wt-status: pass struct repository through function parameters
wt-status: replace uses of the_repository with local repository
instances
wt-status: use hash_algo from local repository instead of global
the_hash_algo
wt-status.c | 62 ++++++++++++++++++++++++++---------------------------
1 file changed, 31 insertions(+), 31 deletions(-)
---
Changes in v5:
- Added the usage of struct repository *r in addition to adding it as a parameter to the functions,
in patch 1/3 instead of doing that in 2/3.
Range-diff against v4:
1: a3683a5e17 ! 1: 620cf8832b wt-status: pass struct repository through function parameters
@@ Commit message
wt-status: pass struct repository through function parameters
Some functions in wt-status.c (count_stash_entries(),
- read_line_from_git_path(), abbrev_oid_in_line(), read_rebase_todolist())
- do not have access to a local repository instance and rely on the_repository.
+ read_line_from_git_path(), abbrev_oid_in_line(), and
+ read_rebase_todolist()) rely on the_repository as they do not have access
+ to a local repository instance.
- Add a struct repository *r parameter to these functions, and pass the local
- repository through the callers where already they can access a local repository
- instance either directly by struct repository *r or
- by struct wt_state *s (s->repo).
+ Add a struct repository *r parameter to these functions and pass the local
+ repository instance through the callers, which already have access to it
+ either directly by struct repository *r or indirectly by struct wt_state
+ *s (s->repo).
+
+ Replace uses of the_repository in these functions with the passed parameter.
Signed-off-by: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail•com>
@@ wt-status.c: static int stash_count_refs(const char *refname UNUSED,
+static int count_stash_entries(struct repository *r)
{
int n = 0;
- refs_for_each_reflog_ent(get_main_ref_store(the_repository),
-@@ wt-status.c: static int count_stash_entries(void)
+- refs_for_each_reflog_ent(get_main_ref_store(the_repository),
++ refs_for_each_reflog_ent(get_main_ref_store(r),
+ "refs/stash", stash_count_refs, &n);
+ return n;
+ }
static void wt_longstatus_print_stash_summary(struct wt_status *s)
{
@@ wt-status.c: static void show_am_in_progress(struct wt_status *s,
+static char *read_line_from_git_path(struct repository *r, const char *filename)
{
struct strbuf buf = STRBUF_INIT;
- FILE *fp = fopen_or_warn(repo_git_path_append(the_repository, &buf,
+- FILE *fp = fopen_or_warn(repo_git_path_append(the_repository, &buf,
++ FILE *fp = fopen_or_warn(repo_git_path_append(r, &buf,
+ "%s", filename), "r");
+
+ if (!fp) {
@@ wt-status.c: static int split_commit_in_progress(struct wt_status *s)
if (head_flags & REF_ISSYMREF || orig_head_flags & REF_ISSYMREF)
return 0;
@@ wt-status.c: static int split_commit_in_progress(struct wt_status *s)
{
struct string_list split = STRING_LIST_INIT_DUP;
struct object_id oid;
+@@ wt-status.c: static void abbrev_oid_in_line(struct strbuf *line)
+ return;
+
+ if ((2 <= string_list_split(&split, line->buf, " ", 2)) &&
+- !repo_get_oid(the_repository, split.items[1].string, &oid)) {
++ !repo_get_oid(r, split.items[1].string, &oid)) {
+ strbuf_reset(line);
+ strbuf_addf(line, "%s ", split.items[0].string);
+ strbuf_add_unique_abbrev(line, &oid, DEFAULT_ABBREV);
@@ wt-status.c: static void abbrev_oid_in_line(struct strbuf *line)
string_list_clear(&split, 0);
}
@@ wt-status.c: static void abbrev_oid_in_line(struct strbuf *line)
+static int read_rebase_todolist(struct repository *r, const char *fname, struct string_list *lines)
{
struct strbuf buf = STRBUF_INIT;
- FILE *f = fopen(repo_git_path_append(the_repository, &buf, "%s", fname), "r");
+- FILE *f = fopen(repo_git_path_append(the_repository, &buf, "%s", fname), "r");
++ FILE *f = fopen(repo_git_path_append(r, &buf, "%s", fname), "r");
+ int ret;
+
+ if (!f) {
+@@ wt-status.c: static int read_rebase_todolist(const char *fname, struct string_list *lines)
+ goto out;
+ }
+ die_errno("Could not open file %s for reading",
+- repo_git_path_replace(the_repository, &buf, "%s", fname));
++ repo_git_path_replace(r, &buf, "%s", fname));
+ }
+ while (!strbuf_getline_lf(&buf, f)) {
+ if (starts_with(buf.buf, comment_line_str))
@@ wt-status.c: static int read_rebase_todolist(const char *fname, struct string_list *lines)
strbuf_trim(&buf);
if (!buf.len)
2: f3b4c3e972 ! 2: 13e0c5bcd7 wt-status: replace uses of the_repository with local repository instances
@@ Metadata
## Commit message ##
wt-status: replace uses of the_repository with local repository instances
- wt-status.c uses the global the_repository in several places even when
- a repository instance is already available via struct wt_status *s or
- struct repository *r.
+ wt-status.c uses the global the_repository in several places even when a
+ repository instance is already available via struct wt_status *s or struct
+ repository *r.
- Replace these uses of the_repository with the repository available
- in the local context (i.e. s->repo or r).
+ Replace these uses of the_repository with the repository available in the
+ local context (i.e. s->repo or r).
- The replacements of all the_repository with s->repo are mostly
- to cases where a repository instance is already available via
- struct wt_status *s and struct repository *r, all functions operating on
- struct wt_status *s are only used after s is initialized by wt_status_prepare(),
- which sets s->repo from the repository provided by the caller.
- As a result, s->repo is guaranteed to be available and consistent whenever
- these functions are invoked.
+ The replacements of all the_repository with s->repo are mostly to cases
+ where a repository instance is already available via struct wt_status *s
+ and struct repository *r, all functions operating on struct wt_status *s
+ are only used after s is initialized by wt_status_prepare(), which sets
+ s->repo from the repository provided by the caller. As a result, s->repo is
+ guaranteed to be available and consistent whenever these functions are
+ invoked.
This reduces reliance on global state and keeps wt-status consistent,
- though many functions operating on struct wt_status *s
- are called via commit.c and it still relies on the_repository,
- but within wt-status.c the local repository pointer
- refers to the same underlying repository object.
+ though many functions operating on struct wt_status *s are called via
+ commit.c and it still relies on the_repository, but within wt-status.c the
+ local repository pointer refers to the same underlying repository object.
Signed-off-by: Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail•com>
@@ wt-status.c: static void wt_status_collect_changes_index(struct wt_status *s)
setup_revisions(0, NULL, &rev, &opt);
rev.diffopt.flags.override_submodule_config = 1;
-@@ wt-status.c: static int stash_count_refs(const char *refname UNUSED,
- static int count_stash_entries(struct repository *r)
- {
- int n = 0;
-- refs_for_each_reflog_ent(get_main_ref_store(the_repository),
-+ refs_for_each_reflog_ent(get_main_ref_store(r),
- "refs/stash", stash_count_refs, &n);
- return n;
- }
@@ wt-status.c: static void wt_longstatus_print_verbose(struct wt_status *s)
rev.diffopt.ita_invisible_in_index = 1;
@@ wt-status.c: static void wt_longstatus_print_verbose(struct wt_status *s)
setup_revisions(0, NULL, &rev, &opt);
rev.diffopt.output_format |= DIFF_FORMAT_PATCH;
-@@ wt-status.c: static void show_am_in_progress(struct wt_status *s,
- static char *read_line_from_git_path(struct repository *r, const char *filename)
- {
- struct strbuf buf = STRBUF_INIT;
-- FILE *fp = fopen_or_warn(repo_git_path_append(the_repository, &buf,
-+ FILE *fp = fopen_or_warn(repo_git_path_append(r, &buf,
- "%s", filename), "r");
-
- if (!fp) {
@@ wt-status.c: static int split_commit_in_progress(struct wt_status *s)
!s->branch || strcmp(s->branch, "HEAD"))
return 0;
@@ wt-status.c: static int split_commit_in_progress(struct wt_status *s)
&orig_head_oid, &orig_head_flags))
return 0;
if (head_flags & REF_ISSYMREF || orig_head_flags & REF_ISSYMREF)
-@@ wt-status.c: static void abbrev_oid_in_line(struct repository *r, struct strbuf *line)
- return;
-
- if ((2 <= string_list_split(&split, line->buf, " ", 2)) &&
-- !repo_get_oid(the_repository, split.items[1].string, &oid)) {
-+ !repo_get_oid(r, split.items[1].string, &oid)) {
- strbuf_reset(line);
- strbuf_addf(line, "%s ", split.items[0].string);
- strbuf_add_unique_abbrev(line, &oid, DEFAULT_ABBREV);
-@@ wt-status.c: static void abbrev_oid_in_line(struct repository *r, struct strbuf *line)
- static int read_rebase_todolist(struct repository *r, const char *fname, struct string_list *lines)
- {
- struct strbuf buf = STRBUF_INIT;
-- FILE *f = fopen(repo_git_path_append(the_repository, &buf, "%s", fname), "r");
-+ FILE *f = fopen(repo_git_path_append(r, &buf, "%s", fname), "r");
- int ret;
-
- if (!f) {
-@@ wt-status.c: static int read_rebase_todolist(struct repository *r, const char *fname, struct
- goto out;
- }
- die_errno("Could not open file %s for reading",
-- repo_git_path_replace(the_repository, &buf, "%s", fname));
-+ repo_git_path_replace(r, &buf, "%s", fname));
- }
- while (!strbuf_getline_lf(&buf, f)) {
- if (starts_with(buf.buf, comment_line_str))
@@ wt-status.c: static void show_rebase_information(struct wt_status *s,
i++)
status_printf_ln(s, color, " %s", have_done.items[i].string);
3: 7efaf6b3fb = 3: 2bf22dd925 wt-status: use hash_algo from local repository instead of global the_hash_algo
--
2.53.0
next prev parent reply other threads:[~2026-02-18 17:57 UTC|newest]
Thread overview: 69+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-31 18:57 [PATCH 0/3] wt-status: reduce reliance on global state Shreyansh Paliwal
2026-01-31 18:57 ` [PATCH 1/3] wt-status: replace uses of the_repository with local repository instances Shreyansh Paliwal
2026-02-02 10:02 ` Karthik Nayak
2026-02-02 18:42 ` Junio C Hamano
2026-02-02 18:57 ` Shreyansh Paliwal
2026-02-02 22:41 ` Junio C Hamano
2026-02-02 23:03 ` Junio C Hamano
2026-02-03 9:53 ` Shreyansh Paliwal
2026-02-03 11:06 ` Phillip Wood
2026-02-03 15:20 ` Shreyansh Paliwal
2026-02-03 10:58 ` Phillip Wood
2026-02-03 15:15 ` Shreyansh Paliwal
2026-01-31 18:57 ` [PATCH 2/3] wt-status: pass struct repository and wt_status through function parameters Shreyansh Paliwal
2026-01-31 18:57 ` [PATCH 3/3] wt-status: use hash_algo from local repository instead of global the_hash_algo Shreyansh Paliwal
2026-02-02 10:03 ` Karthik Nayak
2026-02-02 19:03 ` Shreyansh Paliwal
2026-02-04 10:18 ` Karthik Nayak
2026-02-04 11:22 ` Shreyansh Paliwal
2026-02-05 10:13 ` [PATCH V2 0/3] wt-status: reduce reliance on global state Shreyansh Paliwal
2026-02-05 10:13 ` [PATCH V2 1/3] wt-status: replace uses of the_repository with local repository instances Shreyansh Paliwal
2026-02-05 10:59 ` Karthik Nayak
2026-02-05 11:11 ` Karthik Nayak
2026-02-05 12:18 ` Shreyansh Paliwal
2026-02-05 16:08 ` Phillip Wood
2026-02-05 17:41 ` Shreyansh Paliwal
2026-02-05 10:13 ` [PATCH V2 2/3] wt-status: pass struct repository and wt_status through function parameters Shreyansh Paliwal
2026-02-05 11:09 ` Karthik Nayak
2026-02-05 12:04 ` Shreyansh Paliwal
2026-02-06 9:24 ` Karthik Nayak
2026-02-06 9:32 ` Shreyansh Paliwal
2026-02-06 12:57 ` Shreyansh Paliwal
2026-02-06 14:54 ` Phillip Wood
2026-02-06 17:06 ` Shreyansh Paliwal
2026-02-05 15:58 ` Phillip Wood
2026-02-05 10:13 ` [PATCH V2 3/3] wt-status: use hash_algo from local repository instead of global the_hash_algo Shreyansh Paliwal
2026-02-05 10:27 ` [PATCH V2 0/3] wt-status: reduce reliance on global state Shreyansh Paliwal
2026-02-05 15:53 ` Phillip Wood
2026-02-05 17:39 ` Shreyansh Paliwal
2026-02-05 18:02 ` Kristoffer Haugsbakk
2026-02-05 18:18 ` Shreyansh Paliwal
2026-02-07 10:00 ` [PATCH v3 " Shreyansh Paliwal
2026-02-07 10:00 ` [PATCH v3 1/3] wt-status: pass struct repository through function parameters Shreyansh Paliwal
2026-02-08 1:14 ` Junio C Hamano
2026-02-08 4:55 ` [PATCH V2 2/3] wt-status: pass struct repository and wt_status " Shreyansh Paliwal
2026-02-09 8:36 ` [PATCH v3 1/3] wt-status: pass struct repository " Karthik Nayak
2026-02-08 1:21 ` Junio C Hamano
2026-02-08 4:44 ` [PATCH V2 2/3] wt-status: pass struct repository and wt_status " Shreyansh Paliwal
2026-02-08 6:08 ` Junio C Hamano
2026-02-08 15:25 ` Shreyansh Paliwal
2026-02-09 9:02 ` Karthik Nayak
2026-02-09 13:43 ` Shreyansh Paliwal
2026-02-09 16:13 ` Junio C Hamano
2026-02-10 9:50 ` Karthik Nayak
2026-02-07 10:00 ` [PATCH v3 2/3] wt-status: replace uses of the_repository with local repository instances Shreyansh Paliwal
2026-02-07 10:00 ` [PATCH v3 3/3] wt-status: use hash_algo from local repository instead of global the_hash_algo Shreyansh Paliwal
2026-02-17 17:29 ` [PATCH v4 0/3] wt-status: reduce reliance on global state Shreyansh Paliwal
2026-02-17 17:29 ` [PATCH v4 1/3] wt-status: pass struct repository through function parameters Shreyansh Paliwal
2026-02-17 17:29 ` [PATCH v4 2/3] wt-status: replace uses of the_repository with local repository instances Shreyansh Paliwal
2026-02-17 17:29 ` [PATCH v4 3/3] wt-status: use hash_algo from local repository instead of global the_hash_algo Shreyansh Paliwal
2026-02-18 16:13 ` [PATCH v4 0/3] wt-status: reduce reliance on global state Phillip Wood
2026-02-18 16:48 ` Shreyansh Paliwal
2026-02-18 17:53 ` Shreyansh Paliwal [this message]
2026-02-18 17:53 ` [PATCH v5 1/3] wt-status: pass struct repository through function parameters Shreyansh Paliwal
2026-02-18 17:53 ` [PATCH v5 2/3] wt-status: replace uses of the_repository with local repository instances Shreyansh Paliwal
2026-02-18 17:53 ` [PATCH v5 3/3] wt-status: use hash_algo from local repository instead of global the_hash_algo Shreyansh Paliwal
2026-03-06 22:31 ` [PATCH v5 0/3] wt-status: reduce reliance on global state Junio C Hamano
2026-03-09 10:32 ` Karthik Nayak
2026-03-09 18:30 ` Junio C Hamano
2026-03-09 10:35 ` Phillip Wood
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=20260218175654.66004-1-shreyanshpaliwalcmsmn@gmail.com \
--to=shreyanshpaliwalcmsmn@gmail$(echo .)com \
--cc=git@vger$(echo .)kernel.org \
--cc=gitster@pobox$(echo .)com \
--cc=karthik.188@gmail$(echo .)com \
--cc=phillip.wood123@gmail$(echo .)com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox