From: Ayush Chandekar <ayu.chandekar@gmail.com>
To: ayu.chandekar@gmail.com
Cc: git@vger.kernel.org, ps@pks.im, shejialuo@gmail.com, gitster@pobox.com
Subject: [GSOC PATCH v2 2/2] attr: use `repo_settings_get_attributesfile_path()` and update callers
Date: Mon, 10 Mar 2025 20:40:48 +0530 [thread overview]
Message-ID: <20250310151048.69825-3-ayu.chandekar@gmail.com> (raw)
In-Reply-To: <20250310151048.69825-1-ayu.chandekar@gmail.com>
Update attribute-related functions to retrieve the "core.attributesfile"
configuration via the new repository-scoped accessor
`repo_settings_get_attributesfile_path()`. This improves behaviour in
multi-repository contexts and aligns with the goal of minimizing
reliance on global state.
Signed-off-by: Ayush Chandekar <ayu.chandekar@gmail.com>
---
attr.c | 28 ++++++++++------------------
attr.h | 7 +++----
builtin/check-attr.c | 2 +-
builtin/var.c | 2 +-
4 files changed, 15 insertions(+), 24 deletions(-)
diff --git a/attr.c b/attr.c
index 0bd2750528..8f28463e8c 100644
--- a/attr.c
+++ b/attr.c
@@ -879,14 +879,6 @@ const char *git_attr_system_file(void)
return system_wide;
}
-const char *git_attr_global_file(void)
-{
- if (!git_attributes_file)
- git_attributes_file = xdg_config_home("attributes");
-
- return git_attributes_file;
-}
-
int git_attr_system_is_enabled(void)
{
return !git_env_bool("GIT_ATTR_NOSYSTEM", 0);
@@ -906,7 +898,7 @@ static void push_stack(struct attr_stack **attr_stack_p,
}
}
-static void bootstrap_attr_stack(struct index_state *istate,
+static void bootstrap_attr_stack(struct repository *repo, struct index_state *istate,
const struct object_id *tree_oid,
struct attr_stack **stack)
{
@@ -927,8 +919,8 @@ static void bootstrap_attr_stack(struct index_state *istate,
}
/* home directory */
- if (git_attr_global_file()) {
- e = read_attr_from_file(git_attr_global_file(), flags);
+ if (repo_settings_get_attributesfile_path(repo)) {
+ e = read_attr_from_file(repo_settings_get_attributesfile_path(repo), flags);
push_stack(stack, e, NULL, 0);
}
@@ -946,7 +938,7 @@ static void bootstrap_attr_stack(struct index_state *istate,
push_stack(stack, e, NULL, 0);
}
-static void prepare_attr_stack(struct index_state *istate,
+static void prepare_attr_stack(struct repository *repo, struct index_state *istate,
const struct object_id *tree_oid,
const char *path, int dirlen,
struct attr_stack **stack)
@@ -969,7 +961,7 @@ static void prepare_attr_stack(struct index_state *istate,
* .gitattributes in deeper directories to shallower ones,
* and finally use the built-in set as the default.
*/
- bootstrap_attr_stack(istate, tree_oid, stack);
+ bootstrap_attr_stack(repo, istate, tree_oid, stack);
/*
* Pop the "info" one that is always at the top of the stack.
@@ -1143,7 +1135,7 @@ static void determine_macros(struct all_attrs_item *all_attrs,
* If check->check_nr is non-zero, only attributes in check[] are collected.
* Otherwise all attributes are collected.
*/
-static void collect_some_attrs(struct index_state *istate,
+static void collect_some_attrs(struct repository *repo, struct index_state *istate,
const struct object_id *tree_oid,
const char *path, struct attr_check *check)
{
@@ -1164,7 +1156,7 @@ static void collect_some_attrs(struct index_state *istate,
dirlen = 0;
}
- prepare_attr_stack(istate, tree_oid, path, dirlen, &check->stack);
+ prepare_attr_stack(repo, istate, tree_oid, path, dirlen, &check->stack);
all_attrs_init(&g_attr_hashmap, check);
determine_macros(check->all_attrs, check->stack);
@@ -1310,7 +1302,7 @@ void git_check_attr(struct index_state *istate,
int i;
const struct object_id *tree_oid = default_attr_source();
- collect_some_attrs(istate, tree_oid, path, check);
+ collect_some_attrs(the_repository, istate, tree_oid, path, check);
for (i = 0; i < check->nr; i++) {
unsigned int n = check->items[i].attr->attr_nr;
@@ -1321,14 +1313,14 @@ void git_check_attr(struct index_state *istate,
}
}
-void git_all_attrs(struct index_state *istate,
+void git_all_attrs(struct repository *repo, struct index_state *istate,
const char *path, struct attr_check *check)
{
int i;
const struct object_id *tree_oid = default_attr_source();
attr_check_reset(check);
- collect_some_attrs(istate, tree_oid, path, check);
+ collect_some_attrs(repo, istate, tree_oid, path, check);
for (i = 0; i < check->all_attrs_nr; i++) {
const char *name = check->all_attrs[i].attr->name;
diff --git a/attr.h b/attr.h
index a04a521092..1ff058bef7 100644
--- a/attr.h
+++ b/attr.h
@@ -213,11 +213,13 @@ void git_check_attr(struct index_state *istate,
const char *path,
struct attr_check *check);
+struct repository;
+
/*
* Retrieve all attributes that apply to the specified path.
* check holds the attributes and their values.
*/
-void git_all_attrs(struct index_state *istate,
+void git_all_attrs(struct repository *repo, struct index_state *istate,
const char *path, struct attr_check *check);
enum git_attr_direction {
@@ -232,9 +234,6 @@ void attr_start(void);
/* Return the system gitattributes file. */
const char *git_attr_system_file(void);
-/* Return the global gitattributes file, if any. */
-const char *git_attr_global_file(void);
-
/* Return whether the system gitattributes file is enabled and should be used. */
int git_attr_system_is_enabled(void);
diff --git a/builtin/check-attr.c b/builtin/check-attr.c
index 7cf275b893..1b8a89dfb2 100644
--- a/builtin/check-attr.c
+++ b/builtin/check-attr.c
@@ -70,7 +70,7 @@ static void check_attr(const char *prefix, struct attr_check *check,
prefix_path(prefix, prefix ? strlen(prefix) : 0, file);
if (collect_all) {
- git_all_attrs(the_repository->index, full_path, check);
+ git_all_attrs(the_repository, the_repository->index, full_path, check);
} else {
git_check_attr(the_repository->index, full_path, check);
}
diff --git a/builtin/var.c b/builtin/var.c
index ada642a9fe..8fbf5430a4 100644
--- a/builtin/var.c
+++ b/builtin/var.c
@@ -71,7 +71,7 @@ static char *git_attr_val_system(int ident_flag UNUSED)
static char *git_attr_val_global(int ident_flag UNUSED)
{
- char *file = xstrdup_or_null(git_attr_global_file());
+ char *file = xstrdup_or_null(repo_settings_get_attributesfile_path(the_repository));
if (file) {
normalize_path_copy(file, file);
return file;
--
2.48.GIT
next prev parent reply other threads:[~2025-03-10 15:11 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-03-09 15:33 [PATCH] environment: move access to "core.attributesfile" into repo settings Ayush Chandekar
2025-03-10 7:05 ` Patrick Steinhardt
2025-03-10 9:07 ` Ayush Chandekar
2025-03-10 16:16 ` Junio C Hamano
2025-03-10 17:21 ` Ayush Chandekar
2025-03-10 19:25 ` Junio C Hamano
2025-03-10 15:10 ` [GSOC PATCH v2 0/2] Stop depending on `the_repository` for core.attributesfile Ayush Chandekar
2025-03-10 15:10 ` [GSOC PATCH v2 1/2] environment: move access to "core.attributesfile" into repo settings Ayush Chandekar
2025-03-10 21:11 ` Karthik Nayak
2025-03-10 15:10 ` Ayush Chandekar [this message]
2025-03-10 21:17 ` [GSOC PATCH v2 2/2] attr: use `repo_settings_get_attributesfile_path()` and update callers Karthik Nayak
2025-03-10 23:08 ` Junio C Hamano
2025-03-11 17:41 ` Ayush Chandekar
2025-03-11 14:39 ` shejialuo
2025-03-11 17:03 ` Junio C Hamano
2025-03-11 17:20 ` Ayush Chandekar
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=20250310151048.69825-3-ayu.chandekar@gmail.com \
--to=ayu.chandekar@gmail.com \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=ps@pks.im \
--cc=shejialuo@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;
as well as URLs for NNTP newsgroup(s).