From: Bello Olamide Date: Fri, 02 Jan 2026 11:26:04 GMT Subject: Re: [Outreachy PATCH] environment: move "core.attributesFile" into repo-setting Message-ID: In-Reply-To: On Fri, 2 Jan 2026 at 09:48, Karthik Nayak wrote: > > Olamide Caleb Bello writes: > > > When handling multiple repositories within the same process, relying on > > global state for accessing the "core.attributesFile" configuration can > > lead to incorrect values being used. It also makes it harder to isolate > > repositories and hinders the libification of git. > > The functions `bootstrap_attr_stack()` and `git_attr_val_system()` > > retrieve "core.attributesFile" via `git_attr_global_file()` > > which reads from global state `git_attributes_file`. > > > > Move the "core.attributesFile" configuration into the > > `struct repo_settings` instead of relying on the global state. > > A new function `repo_settings_get_attributesfile_path()` is added > > and used to retrieve this setting in a repository-scoped manner. > > The functions to retrieve "core.attributesFile" are replaced with > > the new accessor function `repo_settings_get_attributesfile_path()` > > This improves multi-repository behaviour and aligns with the goal of > > libifying of Git. > > > > Note that in `bootstrap_attr_stack()`, the `index_state` is used only > > if it exists, else we default to `the_repository`. > > > > Based-on-patch-by: Ayush Chandekar > > Mentored-by: Christian Couder > > Mentored-by: Usman Akinyemi > > Signed-off-by: Olamide Caleb Bello > > --- > > The link to the GitHub CI is provided below > > https://github.com/cloobTech/git/actions/runs/20284228144 > > > > attr.c | 20 +++++++++----------- > > attr.h | 3 --- > > builtin/var.c | 2 +- > > environment.c | 6 ------ > > environment.h | 1 - > > repo-settings.c | 10 ++++++++++ > > repo-settings.h | 8 ++++++++ > > 7 files changed, 28 insertions(+), 22 deletions(-) > > The change is very welcome. Apart from some small comments below, the > patch looks good. > > [snip] > > > diff --git a/repo-settings.h b/repo-settings.h > > index d477885561..362f355267 100644 > > --- a/repo-settings.h > > +++ b/repo-settings.h > > @@ -68,6 +68,7 @@ struct repo_settings { > > unsigned long big_file_threshold; > > > > char *hooks_path; > > + char *git_attributes_file; > > }; > > #define REPO_SETTINGS_INIT { \ > > .shared_repository = -1, \ > > It would make more sense to rename this variable to > `attributes_file_path`, that would better denote what is actually stored > here and syncs better with `repo_settings_get_attributesfile_path`. > > > @@ -99,4 +100,11 @@ int repo_settings_get_shared_repository(struct repository *repo); > > void repo_settings_set_shared_repository(struct repository *repo, int value); > > void repo_settings_reset_shared_repository(struct repository *repo); > > > > +/* > > + * Read the value for "core.attributesfile". > > + * Defaults to xdg_config_home("attributes") if the core.attributesfile > > + * isn't available. > > While it is obvious, it would be nice to point out that > `core.attributesfile` is set via config. > Thank you for the review Karthik. I will send an updated version with the changes. Bello.