Re: [PATCH/RFC v3 6/8] Add case insensitivity support when using git ls-files
From: Robin Rosenberg <hidden>
Date: 2016-06-15 22:49:41
söndagen den 3 oktober 2010 11.56.44 skrev Ævar Arnfjörð Bjarmason:
quoted hunk ↗ jump to hunk
From: Joshua Jensen <redacted> When mydir/filea.txt is added, mydir/ is renamed to MyDir/, and MyDir/fileb.txt is added, running git ls-files mydir only shows mydir/filea.txt. Running git ls-files MyDir shows MyDir/fileb.txt. Running git ls-files mYdIR shows nothing. With this patch running git ls-files for mydir, MyDir, and mYdIR shows mydir/filea.txt and MyDir/fileb.txt. Wildcards are not handled case insensitively in this patch. Example: MyDir/aBc/file.txt is added. git ls-files MyDir/a* works fine, but git ls-files mydir/a* does not. Signed-off-by: Joshua Jensen <redacted> Signed-off-by: Johannes Sixt <redacted> Signed-off-by: Junio C Hamano <redacted> --- dir.c | 38 ++++++++++++++++++++++++++------------ 1 files changed, 26 insertions(+), 12 deletions(-)diff --git a/dir.c b/dir.c index cf8f65c..53aa4f3 100644 --- a/dir.c +++ b/dir.c@@ -107,16 +107,30 @@ static int match_one(const char *match, const char*name, int namelen) if (!*match) return MATCHED_RECURSIVELY; - for (;;) { - unsigned char c1 = *match; - unsigned char c2 = *name; - if (c1 == '\0' || is_glob_special(c1)) - break; - if (c1 != c2) - return 0; - match++; - name++; - namelen--; + if (ignore_case) { + for (;;) { + unsigned char c1 = tolower(*match); + unsigned char c2 = tolower(*name);
Is anyone thinking "unicode" around here? -- robin