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

[PATCH 2/6] Case insensitivity support for .gitignore via core.ignorecase

From
Johannes Sixt <j6t@kdbg.org>
Date
Aug 16, 2010, 19:38 UTC
Message-ID
<0207df477b402bacf5792a6c9cb410e924501b27.1281985411.git.j6t@kdbg.org>
In-Reply-To
<cover.1281985411.git.j6t@kdbg.org>
From: Joshua Jensen <jjensen@workspacewhiz.com>

This is especially beneficial when using Windows and Perforce and the git-p4 bridge. Internally, Perforce preserves a given file's full path including its case at the time it was added to the Perforce repository. When syncing a file down via Perforce, missing directories are created, if necessary, using the case as stored with the filename. Unfortunately, two files in the same directory can have differing cases for their respective paths, such as /diRa/file1.c and /DirA/file2.c. Depending on sync order, DirA/ may get created instead of diRa/.

It is possible to handle directory names in a case insensitive manner without this patch, but it is highly inconvenient, requiring each character to be specified like so: [Bb][Uu][Ii][Ll][Dd]. With this patch, the gitignore exclusions honor the core.ignorecase=true configuration setting and make the process less error prone. The above is specified like so: Build

Signed-off-by: Joshua Jensen <jjensen@workspacewhiz.com>
Signed-off-by: Johannes Sixt <j6t@kdbg.org>
---
 dir.c |   12 ++++++------
 1 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/dir.c b/dir.c
index 4d001fd..be21c20 100644
--- a/dir.c
+++ b/dir.c
@@ -390,14 +390,14 @@ int excluded_from_list(const char *pathname,
 			if (x->flags & EXC_FLAG_NODIR) {
 				/* match basename */
 				if (x->flags & EXC_FLAG_NOWILDCARD) {
-					if (!strcmp(exclude, basename))
+					if (!strcmp_icase(exclude, basename))
 						return to_exclude;
 				} else if (x->flags & EXC_FLAG_ENDSWITH) {
 					if (x->patternlen - 1 <= pathlen &&
-					    !strcmp(exclude + 1, pathname + pathlen - x->patternlen + 1))
+					    !strcmp_icase(exclude + 1, pathname + pathlen - x->patternlen + 1))
 						return to_exclude;
 				} else {
-					if (fnmatch(exclude, basename, 0) == 0)
+					if (fnmatch_icase(exclude, basename, 0) == 0)
 						return to_exclude;
 				}
 			}
@@ -412,14 +412,14 @@ int excluded_from_list(const char *pathname,
 
 				if (pathlen < baselen ||
 				    (baselen && pathname[baselen-1] != '/') ||
-				    strncmp(pathname, x->base, baselen))
+				    strncmp_icase(pathname, x->base, baselen))
 				    continue;
 
 				if (x->flags & EXC_FLAG_NOWILDCARD) {
-					if (!strcmp(exclude, pathname + baselen))
+					if (!strcmp_icase(exclude, pathname + baselen))
 						return to_exclude;
 				} else {
-					if (fnmatch(exclude, pathname+baselen,
+					if (fnmatch_icase(exclude, pathname+baselen,
 						    FNM_PATHNAME) == 0)
 					    return to_exclude;
 				}
-- 
1.7.1.402.gf1eeb
Previous: Johannes SixtNext: Johannes Sixt
Message 17 of 26 in “Extensions of core.ignorecase=true support”
  1. 0/6 Extensions of core.ignorecase=true supportJohannes Sixt, Aug 16, 2010
  2. 1/6 Add string comparison functions that respect the ignore_case variable.Johannes Sixt, Aug 16, 2010
  3. Ævar Arnfjörð BjarmasonAug 18, 2010
  4. Ævar Arnfjörð BjarmasonAug 18, 2010
  5. Joshua JensenAug 18, 2010
  6. Ævar Arnfjörð BjarmasonAug 18, 2010
  7. Johannes SixtAug 18, 2010
  8. Ævar Arnfjörð BjarmasonAug 18, 2010
  9. Ævar Arnfjörð BjarmasonAug 29, 2010
  10. Joshua JensenAug 30, 2010
  11. Ævar Arnfjörð BjarmasonAug 30, 2010
  12. Jonathan NiederAug 30, 2010
  13. Jonathan NiederAug 30, 2010
  14. Johannes SixtAug 30, 2010
  15. Ævar Arnfjörð BjarmasonAug 30, 2010
  16. Johannes SixtAug 30, 2010
  17. 2/6 Case insensitivity support for .gitignore via core.ignorecaseJohannes Sixt, Aug 16, 2010
  18. 3/6 Add case insensitivity support for directories when using git statusJohannes Sixt, Aug 16, 2010
  19. 4/6 Add case insensitivity support when using git ls-filesJohannes Sixt, Aug 16, 2010
  20. 5/6 Support case folding for git add when core.ignorecase=trueJohannes Sixt, Aug 16, 2010
  21. 6/6 Support case folding in git fast-import when core.ignorecase=trueJohannes Sixt, Aug 16, 2010
  22. Robert BuckAug 17, 2010
  23. Johannes SixtAug 17, 2010
  24. Robert BuckAug 18, 2010
  25. Johannes SixtAug 18, 2010
  26. Junio C HamanoAug 22, 2010

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.