public inbox for git@vger.kernel.org
 help / color / mirror / Atom feed
* [Outreachy PATCH RFC 0/3] store git_default_config() parsed values in new config struct
@ 2026-01-12 12:59 Olamide Caleb Bello
  2026-01-12 12:59 ` [Outreachy PATCH RFC 1/3] environment: stop storing `core.attributesFile` globally Olamide Caleb Bello
                   ` (3 more replies)
  0 siblings, 4 replies; 79+ messages in thread
From: Olamide Caleb Bello @ 2026-01-12 12:59 UTC (permalink / raw)
  To: git
  Cc: gitster, christian.couder, usmanakinyemi202, kaartic.sivaraam, me,
	karthik.188, Olamide Caleb Bello

Hi Git Community,
Over the course of my ongoing internship, which focused on moving global
variables in environment.h into local scope, I have attempted to move some
variables into the struct repo-settings.
However there have been some design concerns as regards the use of
`prepare_repo_settings()` with respect to when and where to call the
function, and also the change in behaviours when the variable is lazily
loaded as discussed in [1] and [2].

After different deliberations, Phillip Wood proposed creating a new config
struct [3], adding it to the repository struct and passing the repo struct to
`git_default_config()` to store the parsed config values per repo.
This would mean we would not need to remove code from
`git_default_config()`, and hence the current behaviours will be retained.

I have experimented with this approach for some values and I would
appreciate feedbacks about this approach before we can move forward
and use it for more variables related to `git_default_config()`.

For now, the parsed value is stored in `the_repository` in
`git_default_*_config()` and further efforts to pass the repository
parameter to `git_default_config()` as the callback parameter will
be looked into later on.

1. https://lore.kernel.org/git/43aaec10-2696-44c9-8728-2045b83dc5d3@gmail.com/
2. https://lore.kernel.org/git/a881499d-e236-4f8e-a217-b6bce69e3e3c@gmail.com/
3. https://lore.kernel.org/git/8899016f-eeef-404b-8da6-ff3a90e81cea@gmail.com/

Olamide Caleb Bello (3):
  environment: stop storing `core.attributesFile` globally
  environment: stop using core.sparseCheckout globally
  environment: move "branch.autoSetupMerge" into `struct config_values`

 attr.c                      |  8 +++++---
 builtin/backfill.c          |  3 +--
 builtin/branch.c            |  2 +-
 builtin/checkout.c          |  2 +-
 builtin/clone.c             |  2 +-
 builtin/mv.c                |  2 +-
 builtin/push.c              |  2 +-
 builtin/sparse-checkout.c   | 22 +++++++++++-----------
 builtin/submodule--helper.c |  2 +-
 builtin/worktree.c          |  2 +-
 config.c                    | 10 ++++++++++
 config.h                    | 13 +++++++++++++
 dir.c                       |  2 +-
 environment.c               | 20 ++++++++++----------
 environment.h               |  2 --
 repository.c                |  7 +++++++
 repository.h                |  4 ++++
 sparse-index.c              |  4 ++--
 unpack-trees.c              |  2 +-
 wt-status.c                 |  3 ++-
 20 files changed, 74 insertions(+), 40 deletions(-)

-- 
2.34.1


^ permalink raw reply	[flat|nested] 79+ messages in thread
* Re: [Outreachy PATCH v6 1/3] environment: stop storing `core.attributesFile` globally
@ 2026-02-10 10:17 Bello Caleb Olamide
  2026-02-10 15:07 ` Phillip Wood
  2026-02-11  9:31 ` Phillip Wood
  0 siblings, 2 replies; 79+ messages in thread
From: Bello Caleb Olamide @ 2026-02-10 10:17 UTC (permalink / raw)
  To: Bello Olamide
  Cc: Junio C Hamano, git, toon, christian.couder, usmanakinyemi202,
	kaartic.sivaraam, me, karthik.188, phillip.wood

This is how I implemented the suggestion

diff --git a/oss-fuzz/fuzz-commit-graph.c b/oss-fuzz/fuzz-commit-graph.c
index fb8b8787a4..59bbb849d1 100644
--- a/oss-fuzz/fuzz-commit-graph.c
+++ b/oss-fuzz/fuzz-commit-graph.c
@@ -10,6 +10,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
 {
 	struct commit_graph *g;
 
+	memset(the_repository, 0, sizeof(*the_repository));
 	initialize_repository(the_repository);
 
 	/*
diff --git a/repository.c b/repository.c
index c7e75215ac..0af40b016e 100644
--- a/repository.c
+++ b/repository.c
@@ -50,13 +50,27 @@ 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 != the_repository)
+		BUG("trying to read config from wrong repository instance");
+	if(!repo->initialized)
+		BUG("config values from uninitialized repository");
+	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

Some of the tests that fail are related to the submodule and a
couple output is shown below

./t7412-submodule-absorbgitdirs.sh  -i -v
...
Initialized empty Git repository in /home/ubuntu/Code/open_source/git/t/trash directory.t7412-submodule-absorbgitdirs/sub1/.git/
[master (root-commit) 50e526b] first
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 first.t
BUG: repository.c:56: trying to read config from wrong repository instance
Aborted (core dumped)
not ok 1 - setup a real submodule
#
# cwd="$(pwd)" &&
# git init sub1 &&
# test_commit -C sub1 first &&
# git submodule add ./sub1 &&
# test_tick &&
# git commit -m superproject
#
1..1

./t4027-diff-submodule.sh  -i -v
...
Initialized empty Git repository in /home/ubuntu/Code/open_source/git/t/trash directory.t4027-diff-submodule/sub/.git/
[master (root-commit) 4431e0b] submodule
 Author: A U Thor <author@example.com>
 1 file changed, 1 insertion(+)
 create mode 100644 world
BUG: repository.c:56: trying to read config from wrong repository instance
Aborted (core dumped)
not ok 1 - setup
#
# test_tick &&
# test_create_repo sub &&
# (
# cd sub &&
# echo hello >world &&
# git add world &&
# git commit -m submodule
# ) &&
#
# test_tick &&
# echo frotz >nitfol &&
# git add nitfol sub &&
# git commit -m superproject &&
#
# (
# cd sub &&
# echo goodbye >world &&
# git add world &&
# git commit -m "submodule #2"
# ) &&
#
# git -C sub rev-list HEAD >revs &&
# set x $(cat revs) &&
# echo ":160000 160000 $3 $ZERO_OID M sub" >expect &&
# subtip=$3 subprev=$2
#
1..1

Thanks

^ permalink raw reply related	[flat|nested] 79+ messages in thread

end of thread, other threads:[~2026-02-26 16:24 UTC | newest]

Thread overview: 79+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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
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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox