зеркало из https://github.com/microsoft/git.git
Add case insensitivity support when using git ls-files
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 <jjensen@workspacewhiz.com> Signed-off-by: Johannes Sixt <j6t@kdbg.org> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
5102c6173c
Коммит
21444f1805
18
dir.c
18
dir.c
|
@ -107,6 +107,19 @@ static int match_one(const char *match, const char *name, int namelen)
|
|||
if (!*match)
|
||||
return MATCHED_RECURSIVELY;
|
||||
|
||||
if (ignore_case) {
|
||||
for (;;) {
|
||||
unsigned char c1 = tolower(*match);
|
||||
unsigned char c2 = tolower(*name);
|
||||
if (c1 == '\0' || is_glob_special(c1))
|
||||
break;
|
||||
if (c1 != c2)
|
||||
return 0;
|
||||
match++;
|
||||
name++;
|
||||
namelen--;
|
||||
}
|
||||
} else {
|
||||
for (;;) {
|
||||
unsigned char c1 = *match;
|
||||
unsigned char c2 = *name;
|
||||
|
@ -118,6 +131,7 @@ static int match_one(const char *match, const char *name, int namelen)
|
|||
name++;
|
||||
namelen--;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
|
@ -125,8 +139,8 @@ static int match_one(const char *match, const char *name, int namelen)
|
|||
* we need to match by fnmatch
|
||||
*/
|
||||
matchlen = strlen(match);
|
||||
if (strncmp(match, name, matchlen))
|
||||
return !fnmatch(match, name, 0) ? MATCHED_FNMATCH : 0;
|
||||
if (strncmp_icase(match, name, matchlen))
|
||||
return !fnmatch_icase(match, name, 0) ? MATCHED_FNMATCH : 0;
|
||||
|
||||
if (namelen == matchlen)
|
||||
return MATCHED_EXACTLY;
|
||||
|
|
Загрузка…
Ссылка в новой задаче