summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--Completion/Unix/Command/_git11
2 files changed, 13 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index f894cc2fe..a21b405c8 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2021-04-10 dana <dana@dana.is>
+
+ * 48338: Completion/Unix/Command/_git: Support case-insensitive
+ path matching
+
2021-04-09 Peter Stephenson <p.w.stephenson@ntlworld.com>
* 48432 (plus test change): Src/Modules/zutil.c,
diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git
index ced89b501..0267acfa8 100644
--- a/Completion/Unix/Command/_git
+++ b/Completion/Unix/Command/_git
@@ -7155,11 +7155,16 @@ __git_files () {
local pref=${(Q)${~PREFIX}}
[[ $pref[1] == '/' ]] || pref=$gittoplevel$gitprefix$pref
- # First allow ls-files to pattern-match in case of remote repository
- files=(${(0)"$(_call_program files git ls-files -z --exclude-standard ${(q)opts} -- ${(q)${pref:+$pref\*}:-.} 2>/dev/null)"})
+ # First allow ls-files to pattern-match in case of remote repository. Use the
+ # icase pathspec magic word to ensure that we support case-insensitive path
+ # completion for users with the appropriate matcher configuration
+ files=(${(0)"$(_call_program files git ls-files -z --exclude-standard ${(q)opts} -- ${(q)${pref:+:\(icase\)$pref\*}:-.} 2>/dev/null)"})
__git_command_successful $pipestatus || return
- # If ls-files succeeded but returned nothing, try again with no pattern
+ # If ls-files succeeded but returned nothing, try again with no pattern. Note
+ # that ls-files defaults to the CWD if not given a path, so if the file we
+ # were trying to add is in an *adjacent* directory, this won't return anything
+ # helpful either
if [[ -z "$files" && -n "$pref" ]]; then
files=(${(0)"$(_call_program files git ls-files -z --exclude-standard ${(q)opts} -- 2>/dev/null)"})
__git_command_successful $pipestatus || return