From: Karthik Nayak Date: Fri, 02 Jan 2026 08:48:25 GMT Subject: Re: [Outreachy PATCH] environment: move "core.attributesFile" into repo-setting Message-ID: In-Reply-To: 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. > + */ > +const char *repo_settings_get_attributesfile_path(struct repository *repo); > + > #endif /* REPO_SETTINGS_H */ > -- > 2.34.1