From: Phillip Wood <phillip.wood123@gmail.com>
To: Olamide Caleb Bello <belkid98@gmail.com>, git@vger.kernel.org
Cc: toon@iotcl.com, gitster@pobox.com, christian.couder@gmail.com,
usmanakinyemi202@gmail.com, kaartic.sivaraam@gmail.com,
me@ttaylorr.com, karthik.188@gmail.com
Subject: Re: [Outreachy PATCH v6 1/3] environment: stop storing `core.attributesFile` globally
Date: Wed, 4 Feb 2026 16:39:09 +0000 [thread overview]
Message-ID: <c95a7730-7b14-4be0-a4e4-861b2f5430ea@gmail.com> (raw)
In-Reply-To: <7e3082125df08d3e5fb2195d73698c4c28c6645e.1770127568.git.belkid98@gmail.com>
On 03/02/2026 15:42, Olamide Caleb Bello wrote:
> The `core.attributeFile` config value is parsed in
> git_default_core_config(), loaded eagerly and stored in the global
> variable `git_attributes_file`. Storing this value in a global variable
> can lead to it being overwritten by another repository when more than one
> Git repository run in the same Git process.
>
> Create a new struct `repo_config_values` to hold this value and
> other repository dependent values parsed by `git_default_config()`.
> This will ensure the current behaviour remains the same while also
> enabling the libification of Git.
>
> An accessor function 'repo_config_values()' is created and used to access
> the new struct member of the repository struct.
> This is to ensure that we detect if the struct repository has been
> initialized and also prevent double initialization of the repository.
Sounds sensible. This paragraph could be reflowed.
> It is important to note that `git_default_config()` is a wrapper to other
> `git_default_*_config()` functions such as `git_default_core_config()`.
> Therefore to access and modify this global variable,
> the change has to be made `git_default_core_config()`.
I'm not sure what this paragraph is saying with regard to the changes in
this patch.
> --- a/environment.c
> +++ b/environment.c
> @@ -756,3 +757,8 @@ int git_default_config(const char *var, const char *value,
> /* Add other config variables here and to Documentation/config.adoc. */
> return 0;
> }
> +
> +void repo_config_values_init(struct repo_config_values *cfg)
> +{
> + cfg->attributes_file = NULL;
> +}
Should we be free()ing cfg->attributes_file when the repository instance
is free()d? At the moment we're using "the_repository" which points to a
static instance so it does not make any practical difference but once we
start storing the config per-repository instance we will need to free
the config when the repository instance is free()d.
> diff --git a/repository.c b/repository.c
> index c7e75215ac..a9b727540f 100644
> --- a/repository.c
> +++ b/repository.c
> @@ -50,13 +50,25 @@ static void set_default_hash_algo(struct repository *repo)
> repo_set_hash_algo(repo, algo);
> }
>
> +struct repo_config_values *repo_config_values(struct repository *repo)
> +{
> + if(!repo->initialized)
> + BUG("config values from uninitialized repository");
This check and the one in initialize_repository() below assume that the
repository instance is zeroed out when it is created, that's a
reasonable requirement but we should probably document it as our other
data structures tend not to require that they're zeroed out before they
are initialized. For example
struct strbuf buf;
strbuf_init(&buf, 0);
is perfectly fine as strbuf_init() does not assume the instance passed
to it has been zeroed out.
As we only support retrieving values from "the_repository" at the moment
we should perhaps add
if (repo != the_repository)
BUG("trying to read config from wrong repository instance");
Everything else looks fine to me
Thanks
Phillip
> + return &repo->config_values_private_;
> +}
> +
> void initialize_repository(struct repository *repo)
> {
> + if (repo->initialized)
> + BUG("repository initialized already");
> + repo->initialized = true;
> +
> repo->remote_state = remote_state_new();
> repo->parsed_objects = parsed_object_pool_new(repo);
> ALLOC_ARRAY(repo->index, 1);
> index_state_init(repo->index, repo);
> repo->check_deprecated_config = true;
> + repo_config_values_init(repo_config_values(repo));
>
> /*
> * When a command runs inside a repository, it learns what
> diff --git a/repository.h b/repository.h
> index 6063c4b846..9717e45000 100644
> --- a/repository.h
> +++ b/repository.h
> @@ -3,6 +3,7 @@
>
> #include "strmap.h"
> #include "repo-settings.h"
> +#include "environment.h"
>
> struct config_set;
> struct git_hash_algo;
> @@ -148,6 +149,9 @@ struct repository {
> /* Repository's compatibility hash algorithm. */
> const struct git_hash_algo *compat_hash_algo;
>
> + /* Repository's config values parsed by git_default_config() */
> + struct repo_config_values config_values_private_;
> +
> /* Repository's reference storage format, as serialized on disk. */
> enum ref_storage_format ref_storage_format;
>
> @@ -171,6 +175,9 @@ struct repository {
>
> /* Should repo_config() check for deprecated settings */
> bool check_deprecated_config;
> +
> + /* Has this repository instance been initialized? */
> + bool initialized;
> };
>
> #ifdef USE_THE_REPOSITORY_VARIABLE
next prev parent reply other threads:[~2026-02-04 16:39 UTC|newest]
Thread overview: 79+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-12 12:59 [Outreachy PATCH RFC 0/3] store git_default_config() parsed values in new config struct Olamide Caleb Bello
2026-01-12 12:59 ` [Outreachy PATCH RFC 1/3] environment: stop storing `core.attributesFile` globally Olamide Caleb Bello
2026-01-12 14:29 ` Phillip Wood
2026-01-12 15:05 ` Bello Olamide
2026-01-12 12:59 ` [Outreachy PATCH RFC 2/3] environment: stop using core.sparseCheckout globally Olamide Caleb Bello
2026-01-12 12:59 ` [Outreachy PATCH RFC 3/3] environment: move "branch.autoSetupMerge" into `struct config_values` Olamide Caleb Bello
2026-01-13 16:43 ` [Outreachy PATCH v2 0/3] store git_default_config() parsed values in new config struct Olamide Caleb Bello
2026-01-13 16:44 ` [Outreachy PATCH v2 1/3] environment: stop storing `core.attributesFile` globally Olamide Caleb Bello
2026-01-13 19:26 ` Junio C Hamano
2026-01-14 6:59 ` Bello Olamide
2026-01-13 16:44 ` [Outreachy PATCH v2 2/3] environment: environment: stop using core.sparseCheckout globally Olamide Caleb Bello
2026-01-13 19:38 ` Junio C Hamano
2026-01-14 7:16 ` Bello Olamide
2026-01-13 16:44 ` [Outreachy PATCH v2 3/3] environment: move "branch.autoSetupMerge" into `struct repo_config_values` Olamide Caleb Bello
2026-01-13 19:53 ` Junio C Hamano
2026-01-14 7:40 ` Bello Olamide
2026-01-15 22:17 ` [Outreachy PATCH v2 0/3] store git_default_config() parsed values in new config struct Bello Olamide
2026-01-17 20:59 ` [Outreachy PATCH v3 0/3] store repo specific config values in new `struct repo_config_values` Olamide Caleb Bello
2026-01-17 20:59 ` [Outreachy PATCH v3 1/3] environment: stop storing `core.attributesFile` globally Olamide Caleb Bello
2026-01-22 12:13 ` Toon Claes
2026-01-22 15:08 ` Bello Olamide
2026-01-22 14:40 ` Phillip Wood
2026-01-22 15:11 ` Bello Olamide
2026-01-17 20:59 ` [Outreachy PATCH v3 2/3] environment: environment: stop using core.sparseCheckout globally Olamide Caleb Bello
2026-01-22 12:13 ` Toon Claes
2026-01-22 15:17 ` Bello Olamide
2026-01-22 14:41 ` Phillip Wood
2026-01-22 15:29 ` Bello Olamide
2026-01-23 10:43 ` Phillip Wood
2026-01-23 13:24 ` Bello Olamide
2026-01-17 20:59 ` [Outreachy PATCH v3 3/3] environment: move "branch.autoSetupMerge" into `struct repo_config_values` Olamide Caleb Bello
2026-01-22 14:41 ` Phillip Wood
2026-01-22 15:29 ` Bello Olamide
2026-01-20 15:19 ` [Outreachy PATCH v3 0/3] store repo specific config values in new " Bello Olamide
2026-01-24 11:55 ` [Outreachy PATCH v4 " Olamide Caleb Bello
2026-01-24 11:55 ` [Outreachy PATCH v4 1/3] environment: stop storing `core.attributesFile` globally Olamide Caleb Bello
2026-01-24 11:55 ` [Outreachy PATCH v4 2/3] environment: stop using core.sparseCheckout globally Olamide Caleb Bello
2026-01-24 11:55 ` [Outreachy PATCH v4 3/3] environment: move "branch.autoSetupMerge" into `struct repo_config_values` Olamide Caleb Bello
2026-01-24 12:21 ` [Outreachy PATCH v5 0/3] store repo specific config values in new " Olamide Caleb Bello
2026-01-24 12:21 ` [Outreachy PATCH v5 1/3] environment: stop storing `core.attributesFile` globally Olamide Caleb Bello
2026-01-29 18:01 ` Junio C Hamano
2026-01-24 12:21 ` [Outreachy PATCH v5 2/3] environment: stop using core.sparseCheckout globally Olamide Caleb Bello
2026-01-29 18:12 ` Junio C Hamano
2026-01-24 12:21 ` [Outreachy PATCH v5 3/3] environment: move "branch.autoSetupMerge" into `struct repo_config_values` Olamide Caleb Bello
2026-01-29 18:37 ` Junio C Hamano
2026-01-30 16:20 ` Junio C Hamano
2026-01-30 20:15 ` Junio C Hamano
2026-01-29 8:29 ` [Outreachy PATCH v5 0/3] store repo specific config values in new " Bello Olamide
2026-02-03 15:42 ` [Outreachy PATCH v6 " Olamide Caleb Bello
2026-02-03 15:42 ` [Outreachy PATCH v6 1/3] environment: stop storing `core.attributesFile` globally Olamide Caleb Bello
2026-02-04 16:39 ` Phillip Wood [this message]
2026-02-09 8:47 ` Bello Olamide
2026-02-07 1:14 ` Junio C Hamano
2026-02-08 11:14 ` Phillip Wood
2026-02-09 8:54 ` Bello Olamide
2026-02-10 8:40 ` Bello Olamide
2026-02-03 15:42 ` [Outreachy PATCH v6 2/3] environment: stop using core.sparseCheckout globally Olamide Caleb Bello
2026-02-04 16:55 ` Phillip Wood
2026-02-03 15:42 ` [Outreachy PATCH v6 3/3] environment: move "branch.autoSetupMerge" into `struct repo_config_values` Olamide Caleb Bello
2026-02-04 16:57 ` [Outreachy PATCH v6 0/3] store repo specific config values in new " Phillip Wood
2026-02-16 16:38 ` [Outreachy PATCH v7 " Olamide Caleb Bello
2026-02-16 16:38 ` [Outreachy PATCH v7 1/3] environment: stop storing `core.attributesFile` globally Olamide Caleb Bello
2026-02-16 16:38 ` [Outreachy PATCH v7 2/3] environment: stop using core.sparseCheckout globally Olamide Caleb Bello
2026-02-26 12:57 ` Christian Couder
2026-02-26 15:23 ` Junio C Hamano
2026-02-26 16:24 ` Bello Olamide
2026-02-16 16:38 ` [Outreachy PATCH v7 3/3] environment: move "branch.autoSetupMerge" into `struct repo_config_values` Olamide Caleb Bello
2026-02-17 20:08 ` [Outreachy PATCH v7 0/3] store repo specific config values in new " Junio C Hamano
2026-02-18 11:27 ` Bello Olamide
2026-02-26 13:03 ` Christian Couder
2026-02-26 15:19 ` Junio C Hamano
-- strict thread matches above, loose matches on Subject: below --
2026-02-10 10:17 [Outreachy PATCH v6 1/3] environment: stop storing `core.attributesFile` globally Bello Caleb Olamide
2026-02-10 15:07 ` Phillip Wood
2026-02-11 8:05 ` Bello Olamide
2026-02-11 9:31 ` Phillip Wood
2026-02-11 12:05 ` Bello Olamide
2026-02-11 16:46 ` Junio C Hamano
2026-02-12 10:33 ` Phillip Wood
2026-02-12 17:13 ` Junio C Hamano
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=c95a7730-7b14-4be0-a4e4-861b2f5430ea@gmail.com \
--to=phillip.wood123@gmail.com \
--cc=belkid98@gmail.com \
--cc=christian.couder@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=kaartic.sivaraam@gmail.com \
--cc=karthik.188@gmail.com \
--cc=me@ttaylorr.com \
--cc=phillip.wood@dunelm.org.uk \
--cc=toon@iotcl.com \
--cc=usmanakinyemi202@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox