From: Patrick Steinhardt Date: Mon, 28 Sep 2026 09:52:06 GMT Subject: Re: [PATCH 6/7] repository: adapt `repo_clear()` to fully reset the repository Message-ID: In-Reply-To: On Mon, Sep 28, 2026 at 09:18:52AM +0000, Karthik Nayak wrote: > Patrick Steinhardt writes: > > diff --git a/repository.c b/repository.c > > index b857e1c580..e67ff00550 100644 > > --- a/repository.c > > +++ b/repository.c > > @@ -439,6 +436,8 @@ void repo_clear(struct repository *repo) > > strmap_clear(&repo->worktree_ref_stores, 1); > > > > repo_clear_path_cache(&repo->cached_paths); > > + > > + memset(repo, 0, sizeof(*repo)); > > The reason we swap `FREE_AND_NULL()` with `free()` is because we anyways > set everything to 0. Okay. > > Or was this referring to the 'already blank' repository? Since > FREE_AND_NULL() can already handle NULL values. Yeah, the only reason I swap to plain free(3p) calls is because it's redundant now with the final call to memset(3p). I think the part about already-blank repositories is not accurate anymore, but it used to be at one point. Let me reword it. > > diff --git a/repository.h b/repository.h > > index 11f5c2ed10..2a348012e8 100644 > > --- a/repository.h > > +++ b/repository.h > > @@ -258,6 +258,7 @@ void repo_set_ref_storage_format(struct repository *repo, > > void initialize_repository(struct repository *repo); > > RESULT_MUST_BE_USED > > int repo_init(struct repository *r, const char *gitdir, const char *worktree); > > +void repo_clear(struct repository *repo); > > > > /* > > * Initialize the repository 'subrepo' as the submodule at the given path. If > > @@ -273,7 +274,6 @@ int repo_submodule_init(struct repository *subrepo, > > struct repository *superproject, > > const char *path, > > const struct object_id *treeish_name); > > -void repo_clear(struct repository *repo); > > > > This is a purely cosmetic move to bring it closer to `repo_init()`, > right? I think it makes sense. Yes, it is. Patrick