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

Re: [PATCH V2 2/3] wt-status: pass struct repository and wt_status through function parameters

From
PWPhillip Wood <phillip.wood123@gmail.com>
Date
Feb 6, 2026, 14:54 UTC
Message-ID
<997a4a47-2d00-418f-b0a6-3e4dc2f45bbb@gmail.com>
In-Reply-To
<20260206131017.1199921-1-shreyanshpaliwalcmsmn@gmail.com>
On 06/02/2026 12:57, Shreyansh Paliwal wrote:
> I tried this out below, and it showed no fails in tests.
> After this we can just directly replace all the_repository with 'r' or 's->repo'
> without the hassle of checking the worktree is defined or not.

As we're trying to remove uses of "the_repository" I think you should use "wt->repo" where we know always "wt != NULL". There are not many callers of these functions so is easy to do necessary analysis (see below).

Show 10 quoted lines
> diff --git a/branch.c b/branch.c
> index 243db7d0fc..0a0097dd85 100644
> --- a/branch.c
> +++ b/branch.c
> @@ -412,7 +412,7 @@ static void prepare_checked_out_branches(void)
>   			free(old);
>   		}
>   
> -		if (wt_status_check_rebase(wt, &state) &&
> +		if (wt_status_check_rebase(the_repository, wt, &state) &&

As I said yesterday we know "wt != NULL" here so it is fine to use "wt->repo" rather than introduce a new use of "the_repository", you just need to explain that in the commit message.

Show 9 quoted lines
>   		    (state.rebase_in_progress || state.rebase_interactive_in_progress) &&
>   		    state.branch) {
>   			struct strbuf ref = STRBUF_INIT;
> @@ -425,7 +425,7 @@ static void prepare_checked_out_branches(void)
>   		}
>   		wt_status_state_free_buffers(&state);
>   
> -		if (wt_status_check_bisect(wt, &state) &&
> +		if (wt_status_check_bisect(the_repository, wt, &state) &&
The same is true here.
Show 13 quoted lines
>   		    state.bisecting_from) {
>   			struct strbuf ref = STRBUF_INIT;
>   			strbuf_addf(&ref, "refs/heads/%s", state.bisecting_from);
> diff --git a/worktree.c b/worktree.c
> index 9308389cb6..86eff384ae 100644
> --- a/worktree.c
> +++ b/worktree.c
> @@ -443,7 +443,7 @@ int is_worktree_being_rebased(const struct worktree *wt,
>   	int found_rebase;
>   
>   	memset(&state, 0, sizeof(state));
> -	found_rebase = wt_status_check_rebase(wt, &state) &&
> +	found_rebase = wt_status_check_rebase(the_repository, wt, &state) &&

This function is called from builtin/branch.c:reject_rebase_or_bisect_branch() with "wt != NULL". It is also called from worktree.c:is_shared_symref() which dereferences wt before calling this function so we can assume "wt != NULL" there as well. That means we can use "wt->repo" here.

Show 9 quoted lines
>   		       (state.rebase_in_progress ||
>   			state.rebase_interactive_in_progress) &&
>   		       state.branch &&
> @@ -460,7 +460,7 @@ int is_worktree_being_bisected(const struct worktree *wt,
>   	int found_bisect;
>   
>   	memset(&state, 0, sizeof(state));
> -	found_bisect = wt_status_check_bisect(wt, &state) &&
> +	found_bisect = wt_status_check_bisect(the_repository, wt, &state) &&
The same analysis for is_worktree_being_rebased() applies here.
The changes to get_branch() below look sensible
Thanks
Phillip
Show 188 quoted lines
>   		       state.bisecting_from &&
>   		       skip_prefix(target, "refs/heads/", &target) &&
>   		       !strcmp(state.bisecting_from, target);
> diff --git a/wt-status.c b/wt-status.c
> index e12adb26b9..ea81418bdd 100644
> --- a/wt-status.c
> +++ b/wt-status.c
> @@ -984,7 +984,7 @@ static int stash_count_refs(const char *refname UNUSED,
>   	return 0;
>   }
>   
> -static int count_stash_entries(void)
> +static int count_stash_entries(struct repository *r)
>   {
>   	int n = 0;
>   	refs_for_each_reflog_ent(get_main_ref_store(the_repository),
> @@ -994,7 +994,7 @@ static int count_stash_entries(void)
>   
>   static void wt_longstatus_print_stash_summary(struct wt_status *s)
>   {
> -	int stash_count = count_stash_entries();
> +	int stash_count = count_stash_entries(s->repo);
>   
>   	if (stash_count > 0)
>   		status_printf_ln(s, GIT_COLOR_NORMAL,
> @@ -1287,7 +1287,7 @@ static void show_am_in_progress(struct wt_status *s,
>   	wt_longstatus_print_trailer(s);
>   }
>   
> -static char *read_line_from_git_path(const char *filename)
> +static char *read_line_from_git_path(struct repository *r, char *filename)
>   {
>   	struct strbuf buf = STRBUF_INIT;
>   	FILE *fp = fopen_or_warn(repo_git_path_append(the_repository, &buf,
> @@ -1325,8 +1325,8 @@ static int split_commit_in_progress(struct wt_status *s)
>   	if (head_flags & REF_ISSYMREF || orig_head_flags & REF_ISSYMREF)
>   		return 0;
>   
> -	rebase_amend = read_line_from_git_path("rebase-merge/amend");
> -	rebase_orig_head = read_line_from_git_path("rebase-merge/orig-head");
> +	rebase_amend = read_line_from_git_path(s->repo, "rebase-merge/amend");
> +	rebase_orig_head = read_line_from_git_path(s->repo, "rebase-merge/orig-head");
>   
>   	if (!rebase_amend || !rebase_orig_head)
>   		; /* fall through, no split in progress */
> @@ -1350,7 +1350,7 @@ static int split_commit_in_progress(struct wt_status *s)
>    * The function assumes that the line does not contain useless spaces
>    * before or after the command.
>    */
> -static void abbrev_oid_in_line(struct strbuf *line)
> +static void abbrev_oid_in_line(struct repository *r, struct strbuf *line)
>   {
>   	struct string_list split = STRING_LIST_INIT_DUP;
>   	struct object_id oid;
> @@ -1372,7 +1372,7 @@ static void abbrev_oid_in_line(struct strbuf *line)
>   	string_list_clear(&split, 0);
>   }
>   
> -static int read_rebase_todolist(const char *fname, struct string_list *lines)
> +static int read_rebase_todolist(struct repository *r, char *fname, struct string_list *lines)
>   {
>   	struct strbuf buf = STRBUF_INIT;
>   	FILE *f = fopen(repo_git_path_append(the_repository, &buf, "%s", fname), "r");
> @@ -1392,7 +1392,7 @@ static int read_rebase_todolist(const char *fname, struct string_list *lines)
>   		strbuf_trim(&buf);
>   		if (!buf.len)
>   			continue;
> -		abbrev_oid_in_line(&buf);
> +		abbrev_oid_in_line(r, &buf);
>   		string_list_append(lines, buf.buf);
>   	}
>   	fclose(f);
> @@ -1413,8 +1413,8 @@ static void show_rebase_information(struct wt_status *s,
>   		struct string_list have_done = STRING_LIST_INIT_DUP;
>   		struct string_list yet_to_do = STRING_LIST_INIT_DUP;
>   
> -		read_rebase_todolist("rebase-merge/done", &have_done);
> -		if (read_rebase_todolist("rebase-merge/git-rebase-todo",
> +		read_rebase_todolist(s->repo, "rebase-merge/done", &have_done);
> +		if (read_rebase_todolist(s->repo, "rebase-merge/git-rebase-todo",
>   					 &yet_to_do))
>   			status_printf_ln(s, color,
>   				_("git-rebase-todo is missing."));
> @@ -1618,7 +1618,7 @@ static void show_sparse_checkout_in_use(struct wt_status *s,
>   /*
>    * Extract branch information from rebase/bisect
>    */
> -static char *get_branch(const struct worktree *wt, const char *path)
> +static char *get_branch(struct repository *r, struct worktree *wt, const char *path)
>   {
>   	struct strbuf sb = STRBUF_INIT;
>   	struct object_id oid;
> @@ -1718,8 +1718,9 @@ static void wt_status_get_detached_from(struct repository *r,
>   	strbuf_release(&cb.buf);
>   }
>   
> -int wt_status_check_rebase(const struct worktree *wt,
> -			   struct wt_status_state *state)
> +int wt_status_check_rebase(struct repository *r,
> +	 			const struct worktree *wt,
> +			    struct wt_status_state *state)
>   {
>   	struct stat st;
>   
> @@ -1730,29 +1731,30 @@ int wt_status_check_rebase(const struct worktree *wt,
>   				state->am_empty_patch = 1;
>   		} else {
>   			state->rebase_in_progress = 1;
> -			state->branch = get_branch(wt, "rebase-apply/head-name");
> -			state->onto = get_branch(wt, "rebase-apply/onto");
> +			state->branch = get_branch(r, wt, "rebase-apply/head-name");
> +			state->onto = get_branch(r, wt, "rebase-apply/onto");
>   		}
>   	} else if (!stat(worktree_git_path(the_repository, wt, "rebase-merge"), &st)) {
>   		if (!stat(worktree_git_path(the_repository, wt, "rebase-merge/interactive"), &st))
>   			state->rebase_interactive_in_progress = 1;
>   		else
>   			state->rebase_in_progress = 1;
> -		state->branch = get_branch(wt, "rebase-merge/head-name");
> -		state->onto = get_branch(wt, "rebase-merge/onto");
> +		state->branch = get_branch(r, wt, "rebase-merge/head-name");
> +		state->onto = get_branch(r, wt, "rebase-merge/onto");
>   	} else
>   		return 0;
>   	return 1;
>   }
>   
> -int wt_status_check_bisect(const struct worktree *wt,
> +int wt_status_check_bisect(struct repository *r,
> +			   struct worktree *wt,
>   			   struct wt_status_state *state)
>   {
>   	struct stat st;
>   
>   	if (!stat(worktree_git_path(the_repository, wt, "BISECT_LOG"), &st)) {
>   		state->bisect_in_progress = 1;
> -		state->bisecting_from = get_branch(wt, "BISECT_START");
> +		state->bisecting_from = get_branch(r, wt, "BISECT_START");
>   		return 1;
>   	}
>   	return 0;
> @@ -1797,16 +1799,16 @@ void wt_status_get_state(struct repository *r,
>   	enum replay_action action;
>   
>   	if (!stat(git_path_merge_head(r), &st)) {
> -		wt_status_check_rebase(NULL, state);
> +		wt_status_check_rebase(r, NULL, state);
>   		state->merge_in_progress = 1;
> -	} else if (wt_status_check_rebase(NULL, state)) {
> +	} else if (wt_status_check_rebase(r, NULL, state)) {
>   		;		/* all set */
>   	} else if (refs_ref_exists(get_main_ref_store(r), "CHERRY_PICK_HEAD") &&
>   		   !repo_get_oid(r, "CHERRY_PICK_HEAD", &oid)) {
>   		state->cherry_pick_in_progress = 1;
>   		oidcpy(&state->cherry_pick_head_oid, &oid);
>   	}
> -	wt_status_check_bisect(NULL, state);
> +	wt_status_check_bisect(r, NULL, state);
>   	if (refs_ref_exists(get_main_ref_store(r), "REVERT_HEAD") &&
>   	    !repo_get_oid(r, "REVERT_HEAD", &oid)) {
>   		state->revert_in_progress = 1;
> @@ -2259,7 +2261,7 @@ static void wt_porcelain_v2_print_tracking(struct wt_status *s)
>    */
>   static void wt_porcelain_v2_print_stash(struct wt_status *s)
>   {
> -	int stash_count = count_stash_entries();
> +	int stash_count = count_stash_entries(s->repo);
>   	char eol = s->null_termination ? '\0' : '\n';
>   
>   	if (stash_count > 0)
> diff --git a/wt-status.h b/wt-status.h
> index e40a27214a..5ac3d96210 100644
> --- a/wt-status.h
> +++ b/wt-status.h
> @@ -164,9 +164,11 @@ void wt_status_state_free_buffers(struct wt_status_state *s);
>   void wt_status_get_state(struct repository *repo,
>   			 struct wt_status_state *state,
>   			 int get_detached_from);
> -int wt_status_check_rebase(const struct worktree *wt,
> +int wt_status_check_rebase(struct repository *r,
> +			   struct worktree *wt,
>   			   struct wt_status_state *state);
> -int wt_status_check_bisect(const struct worktree *wt,
> +int wt_status_check_bisect(struct repository *r,
> +			   struct worktree *wt,
>   			   struct wt_status_state *state);
>   
>   __attribute__((format (printf, 3, 4)))
Previous: Shreyansh PaliwalNext: Shreyansh Paliwal
Message 32 of 69 in “wt-status: reduce reliance on global state”
  1. 0/3 wt-status: reduce reliance on global stateShreyansh Paliwal, Jan 31, 2026
  2. 1/3 wt-status: replace uses of the_repository with local repository instancesShreyansh Paliwal, Jan 31, 2026
  3. Karthik NayakFeb 2, 2026
  4. Junio C HamanoFeb 2, 2026
  5. Shreyansh PaliwalFeb 2, 2026
  6. Junio C HamanoFeb 2, 2026
  7. Junio C HamanoFeb 2, 2026
  8. Shreyansh PaliwalFeb 3, 2026
  9. Phillip WoodFeb 3, 2026
  10. Shreyansh PaliwalFeb 3, 2026
  11. Phillip WoodFeb 3, 2026
  12. Shreyansh PaliwalFeb 3, 2026
  13. 2/3 wt-status: pass struct repository and wt_status through function parametersShreyansh Paliwal, Jan 31, 2026
  14. 3/3 wt-status: use hash_algo from local repository instead of global the_hash_algoShreyansh Paliwal, Jan 31, 2026
  15. Karthik NayakFeb 2, 2026
  16. Shreyansh PaliwalFeb 2, 2026
  17. Karthik NayakFeb 4, 2026
  18. Shreyansh PaliwalFeb 4, 2026
  19. 0/3 wt-status: reduce reliance on global stateShreyansh Paliwal, Feb 5, 2026
  20. 1/3 wt-status: replace uses of the_repository with local repository instancesShreyansh Paliwal, Feb 5, 2026
  21. Karthik NayakFeb 5, 2026
  22. Karthik NayakFeb 5, 2026
  23. Shreyansh PaliwalFeb 5, 2026
  24. Phillip WoodFeb 5, 2026
  25. Shreyansh PaliwalFeb 5, 2026
  26. 2/3 wt-status: pass struct repository and wt_status through function parametersShreyansh Paliwal, Feb 5, 2026
  27. Karthik NayakFeb 5, 2026
  28. Shreyansh PaliwalFeb 5, 2026
  29. Karthik NayakFeb 6, 2026
  30. Shreyansh PaliwalFeb 6, 2026
  31. Shreyansh PaliwalFeb 6, 2026
  32. Phillip WoodFeb 6, 2026
  33. Shreyansh PaliwalFeb 6, 2026
  34. Phillip WoodFeb 5, 2026
  35. 3/3 wt-status: use hash_algo from local repository instead of global the_hash_algoShreyansh Paliwal, Feb 5, 2026
  36. Shreyansh PaliwalFeb 5, 2026
  37. Phillip WoodFeb 5, 2026
  38. Shreyansh PaliwalFeb 5, 2026
  39. Kristoffer HaugsbakkFeb 5, 2026
  40. Shreyansh PaliwalFeb 5, 2026
  41. 0/3 wt-status: reduce reliance on global stateShreyansh Paliwal, Feb 7, 2026
  42. 1/3 wt-status: pass struct repository through function parametersShreyansh Paliwal, Feb 7, 2026
  43. Junio C HamanoFeb 8, 2026
  44. Shreyansh PaliwalFeb 8, 2026
  45. Karthik NayakFeb 9, 2026
  46. Junio C HamanoFeb 8, 2026
  47. Shreyansh PaliwalFeb 8, 2026
  48. Junio C HamanoFeb 8, 2026
  49. Shreyansh PaliwalFeb 8, 2026
  50. Karthik NayakFeb 9, 2026
  51. Shreyansh PaliwalFeb 9, 2026
  52. Junio C HamanoFeb 9, 2026
  53. Karthik NayakFeb 10, 2026
  54. 2/3 wt-status: replace uses of the_repository with local repository instancesShreyansh Paliwal, Feb 7, 2026
  55. 3/3 wt-status: use hash_algo from local repository instead of global the_hash_algoShreyansh Paliwal, Feb 7, 2026
  56. 0/3 wt-status: reduce reliance on global stateShreyansh Paliwal, Feb 17, 2026
  57. 1/3 wt-status: pass struct repository through function parametersShreyansh Paliwal, Feb 17, 2026
  58. 2/3 wt-status: replace uses of the_repository with local repository instancesShreyansh Paliwal, Feb 17, 2026
  59. 3/3 wt-status: use hash_algo from local repository instead of global the_hash_algoShreyansh Paliwal, Feb 17, 2026
  60. Phillip WoodFeb 18, 2026
  61. Shreyansh PaliwalFeb 18, 2026
  62. 0/3 wt-status: reduce reliance on global stateShreyansh Paliwal, Feb 18, 2026
  63. 1/3 wt-status: pass struct repository through function parametersShreyansh Paliwal, Feb 18, 2026
  64. 2/3 wt-status: replace uses of the_repository with local repository instancesShreyansh Paliwal, Feb 18, 2026
  65. 3/3 wt-status: use hash_algo from local repository instead of global the_hash_algoShreyansh Paliwal, Feb 18, 2026
  66. Junio C HamanoMar 6, 2026
  67. Karthik NayakMar 9, 2026
  68. Junio C HamanoMar 9, 2026
  69. Phillip WoodMar 9, 2026

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.