git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 4/4] attr.c: respect core.ignorecase when matching attribute patterns

From
Junio C Hamano <gitster@pobox.com>
Date
Sep 15, 2011, 04:06 UTC
Message-ID
<7vobymqwjf.fsf@alter.siamese.dyndns.org>
In-Reply-To
<7vsjnyqws3.fsf@alter.siamese.dyndns.org>
Junio C Hamano <gitster@pobox.com> writes:
Show 17 quoted lines
> Brandon Casey <drafnel@gmail.com> writes:
>
>> It's easy to work around this issue.  I could just parse core.ignorecase
>> in git_attr_config() and set ignore_case myself like:
>>
>>    if (!strcmp(var, "core.ignorecase")) {
>>            ignore_case = git_config_bool(var, value);
>>            return 0;
>>    }
>
> I think it is immensely preferrable to do this than cascading to
> default_config like this patch does and then piling band-aid on top to fix
> the breakage caused by calling default_config.
>
> An alternative approach may be to move reading of core.attributesfile to
> default_config, and drop git_config() call from bootstrap_attr_stack(),
> getting rid of git_attr_config callback altogether.
That is, something like this on top of your patch.
 attr.c               |   15 ++-------------
 builtin/check-attr.c |    2 ++
 cache.h              |    1 +
 config.c             |    3 +++
 environment.c        |    1 +
 5 files changed, 9 insertions(+), 13 deletions(-)
diff --git a/attr.c b/attr.c
index 79fb11e..76b079f 100644
--- a/attr.c
+++ b/attr.c
@@ -21,8 +21,6 @@ static const char git_attr__unknown[] = "(builtin)unknown";
 #define ATTR__UNSET NULL
 #define ATTR__UNKNOWN git_attr__unknown
 
-static const char *attributes_file;
-
 /* This is a randomly chosen prime. */
 #define HASHSIZE 257
 
@@ -495,14 +493,6 @@ static int git_attr_system(void)
 	return !git_env_bool("GIT_ATTR_NOSYSTEM", 0);
 }
 
-static int git_attr_config(const char *var, const char *value, void *dummy)
-{
-	if (!strcmp(var, "core.attributesfile"))
-		return git_config_pathname(&attributes_file, var, value);
-
-	return git_default_config(var, value, dummy);
-}
-
 static void bootstrap_attr_stack(void)
 {
 	if (!attr_stack) {
@@ -522,9 +512,8 @@ static void bootstrap_attr_stack(void)
 			}
 		}
 
-		git_config(git_attr_config, NULL);
-		if (attributes_file) {
-			elem = read_attr_from_file(attributes_file, 1);
+		if (git_attributes_file) {
+			elem = read_attr_from_file(git_attributes_file, 1);
 			if (elem) {
 				elem->origin = NULL;
 				elem->prev = attr_stack;
diff --git a/builtin/check-attr.c b/builtin/check-attr.c
index 708988a..abb1165 100644
--- a/builtin/check-attr.c
+++ b/builtin/check-attr.c
@@ -92,6 +92,8 @@ int cmd_check_attr(int argc, const char **argv, const char *prefix)
 	struct git_attr_check *check;
 	int cnt, i, doubledash, filei;
 
+	git_config(git_default_config, NULL);
+
 	argc = parse_options(argc, argv, prefix, check_attr_options,
 			     check_attr_usage, PARSE_OPT_KEEP_DASHDASH);
 
diff --git a/cache.h b/cache.h
index 607c2ea..8d95fb2 100644
--- a/cache.h
+++ b/cache.h
@@ -589,6 +589,7 @@ extern int warn_ambiguous_refs;
 extern int shared_repository;
 extern const char *apply_default_whitespace;
 extern const char *apply_default_ignorewhitespace;
+extern const char *git_attributes_file;
 extern int zlib_compression_level;
 extern int core_compression_level;
 extern int core_compression_seen;
diff --git a/config.c b/config.c
index 4183f80..d3bcaa0 100644
--- a/config.c
+++ b/config.c
@@ -491,6 +491,9 @@ static int git_default_core_config(const char *var, const char *value)
 		return 0;
 	}
 
+	if (!strcmp(var, "core.attributesfile"))
+		return git_config_pathname(&git_attributes_file, var, value);
+
 	if (!strcmp(var, "core.bare")) {
 		is_bare_repository_cfg = git_config_bool(var, value);
 		return 0;
diff --git a/environment.c b/environment.c
index e96edcf..d60b73f 100644
--- a/environment.c
+++ b/environment.c
@@ -29,6 +29,7 @@ const char *git_log_output_encoding;
 int shared_repository = PERM_UMASK;
 const char *apply_default_whitespace;
 const char *apply_default_ignorewhitespace;
+const char *git_attributes_file;
 int zlib_compression_level = Z_BEST_SPEED;
 int core_compression_level;
 int core_compression_seen;
Previous: Junio C HamanoNext: Brandon Casey
Message 9 of 19 in “Honor core.ignorecase for attribute patterns”
  1. 0/4 Honor core.ignorecase for attribute patternsBrandon Casey, Sep 15, 2011
  2. 1/4 attr.c: avoid inappropriate access to strbuf "buf" memberBrandon Casey, Sep 15, 2011
  3. 2/4 cleanup: use internal memory allocation wrapper functions everywhereBrandon Casey, Sep 15, 2011
  4. Johannes SixtSep 15, 2011
  5. Brandon CaseySep 15, 2011
  6. 3/4 builtin/mv.c: plug miniscule memory leakBrandon Casey, Sep 15, 2011
  7. 4/4 attr.c: respect core.ignorecase when matching attribute patternsBrandon Casey, Sep 15, 2011
  8. Junio C HamanoSep 15, 2011
  9. Junio C HamanoSep 15, 2011
  10. Brandon CaseySep 15, 2011
  11. Jeff KingSep 15, 2011
  12. Brandon CaseySep 15, 2011
  13. Brandon CaseyOct 6, 2011
  14. Johannes SixtOct 6, 2011
  15. Alexey ShumkinOct 6, 2011
  16. Brandon CaseyOct 6, 2011
  17. Erik Faye-LundOct 6, 2011
  18. Erik Faye-LundOct 6, 2011
  19. Brandon CaseyOct 6, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.