Re: [PATCH 1/3] wt-status: replace uses of the_repository with local repository instances
- From
Shreyansh Paliwal <shreyanshpaliwalcmsmn@gmail.com>
- Date
- Feb 2, 2026, 18:57 UTC
- Message-ID
- <20260202190155.79896-1-shreyanshpaliwalcmsmn@gmail.com>
- In-Reply-To
- <CAOLa=ZRv4xsy0adY_BcXQkypsgYkLNM6x5LhJGX+B+=aKCwmgg@mail.gmail.com>
Show 8 quoted lines
> > Many instances of the_repository are used in wt-status.c even when a > > local repository is already available via struct wt_status or struct > > worktree. > > > > One missing information is why is it safe to make this change? If is a > repository field, is it holding the same information, is it always > defined?
Yes I should have included explanation as well. I have explained below, let me know if this thought process is valid or not.
The replacement of all the_repository with s->repo in this patch are mostly to cases where a repository instance is already available via struct wt_status.
In the current flow, all functions operating on struct wt_status *s are called via commit.c. There, status_init_config() calls wt_status_prepare(), which initializes the struct wt_status and assigns s->repo from the repository instance passed in by the caller. As a result, s->repo is guaranteed to be initialized whenever these functions are invoked.
And commit.c itself still relies on the_repository, within wt-status.c, the local repository pointer refers to the same underlying repository object that the_repository would have pointed to, indirectly until we make commit.c also free of the_repository.
Show 13 quoted lines
> > diff --git a/wt-status.c b/wt-status.c > > index e12adb26b9..9f4d8fda7f 100644 > > --- a/wt-status.c > > +++ b/wt-status.c > > @@ -150,11 +150,11 @@ void wt_status_prepare(struct repository *r, struct wt_status *s) > > s->show_untracked_files = SHOW_NORMAL_UNTRACKED_FILES; > > s->use_color = GIT_COLOR_UNKNOWN; > > s->relative_paths = 1; > > - s->branch = refs_resolve_refdup(get_main_ref_store(the_repository), > > + s->branch = refs_resolve_refdup(get_main_ref_store(s->repo), > > "HEAD", 0, NULL, NULL); > > Wouldn't it make more sense to use the function argument 'r' here?
In wt_status_prepare(), s->repo is initialized to r at the top of the function, so both refer to the same repository instance. However, using r directly is more explicit and avoids indirect use. will change this in V2.
Show 11 quoted lines
> > @@ -1723,18 +1723,18 @@ int wt_status_check_rebase(const struct worktree *wt,
> > {
> > struct stat st;
> >
> > - if (!stat(worktree_git_path(the_repository, wt, "rebase-apply"), &st)) {
> > - if (!stat(worktree_git_path(the_repository, wt, "rebase-apply/applying"), &st)) {
> > + if (!stat(worktree_git_path(wt->repo, wt, "rebase-apply"), &st)) {
> > + if (!stat(worktree_git_path(wt->repo, wt, "rebase-apply/applying"), &st)) {
>
> In the same file we make a call 'wt_status_check_rebase(NULL, state)',
> so wouldn't this break?Yes my bad, it would throw a segfault error. I think the best way to handle this is to explicitly check for the wt to be valid like this,
if (wt==NULL)
return 0;Falling back to the_repository in this case, would probably defeat the purpose.