From: "Alison Winters via GitGitGadget" <gitgitgadget@gmail.com>
To: git@vger.kernel.org
Cc: Alison Winters <alisonatwork@outlook.com>,
Alison Winters <alisonatwork@outlook.com>
Subject: [PATCH 2/2] completion: add case-insensitive match of pseudorefs
Date: Sat, 05 Nov 2022 17:28:35 +0000 [thread overview]
Message-ID: <c455e855395dcc9215ea4ce3181eb3cbaff4000b.1667669315.git.gitgitgadget@gmail.com> (raw)
In-Reply-To: <pull.1374.git.git.1667669315.gitgitgadget@gmail.com>
From: Alison Winters <alisonatwork@outlook.com>
When GIT_COMPLETION_IGNORE_CASE=1, also allow lowercase completion text
like "head" to match HEAD and other pseudorefs.
Signed-off-by: Alison Winters <alisonatwork@outlook.com>
---
contrib/completion/git-completion.bash | 10 +++++++---
t/t9902-completion.sh | 16 ++++++++++++++++
2 files changed, 23 insertions(+), 3 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 8ed96a5b8b6..161327057da 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -745,6 +745,7 @@ __git_refs ()
local format refs
local pfx="${3-}" cur_="${4-$cur}" sfx="${5-}"
local match="${4-}"
+ local umatch="${4-}"
local fer_pfx="${pfx//\%/%%}" # "escape" for-each-ref format specifiers
local ignore_case=""
@@ -772,6 +773,8 @@ __git_refs ()
if test "${GIT_COMPLETION_IGNORE_CASE-}" = "1"
then
ignore_case="--ignore-case"
+ # use tr instead of ${match,^^} to preserve bash 3.2 compatibility
+ umatch=$(echo "$match" | tr a-z A-Z 2> /dev/null || echo "$match")
fi
if [ "$list_refs_from" = path ]; then
@@ -780,6 +783,7 @@ __git_refs ()
fer_pfx="$fer_pfx^"
cur_=${cur_#^}
match=${match#^}
+ umatch=${umatch#^}
fi
case "$cur_" in
refs|refs/*)
@@ -790,7 +794,7 @@ __git_refs ()
*)
for i in HEAD FETCH_HEAD ORIG_HEAD MERGE_HEAD REBASE_HEAD CHERRY_PICK_HEAD; do
case "$i" in
- $match*)
+ $match*|$umatch*)
if [ -e "$dir/$i" ]; then
echo "$pfx$i$sfx"
fi
@@ -824,7 +828,7 @@ __git_refs ()
*)
if [ "$list_refs_from" = remote ]; then
case "HEAD" in
- $match*) echo "${pfx}HEAD$sfx" ;;
+ $match*|$umatch*) echo "${pfx}HEAD$sfx" ;;
esac
__git for-each-ref --format="$fer_pfx%(refname:strip=3)$sfx" \
$ignore_case \
@@ -833,7 +837,7 @@ __git_refs ()
else
local query_symref
case "HEAD" in
- $match*) query_symref="HEAD" ;;
+ $match*|$umatch*) query_symref="HEAD" ;;
esac
__git ls-remote "$remote" $query_symref \
"refs/tags/$match*" "refs/heads/$match*" \
diff --git a/t/t9902-completion.sh b/t/t9902-completion.sh
index f62a395d827..b4c46567fa4 100755
--- a/t/t9902-completion.sh
+++ b/t/t9902-completion.sh
@@ -2271,6 +2271,22 @@ test_expect_success 'checkout matches case insensitively with GIT_COMPLETION_IGN
)
'
+test_expect_success 'checkout completes pseudo refs' '
+ test_completion "git checkout H" <<-\EOF
+ HEAD Z
+ EOF
+'
+
+test_expect_success 'checkout completes pseudo refs case insensitively with GIT_COMPLETION_IGNORE_CASE' '
+ (
+ . "$GIT_BUILD_DIR/contrib/completion/git-completion.bash" &&
+ GIT_COMPLETION_IGNORE_CASE=1 && export GIT_COMPLETION_IGNORE_CASE &&
+ test_completion "git checkout h" <<-\EOF
+ HEAD Z
+ EOF
+ )
+'
+
test_expect_success 'git -C <path> checkout uses the right repo' '
test_completion "git -C subdir -C subsubdir -C .. -C ../otherrepo checkout b" <<-\EOF
branch-in-other Z
--
gitgitgadget
next prev parent reply other threads:[~2022-11-05 17:28 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-11-05 17:28 [PATCH 0/2] add case insensitivity option to bash completion Alison Winters via GitGitGadget
2022-11-05 17:28 ` [PATCH 1/2] completion: add optional ignore-case when matching refs Alison Winters via GitGitGadget
2022-11-20 20:24 ` SZEDER Gábor
2022-11-05 17:28 ` Alison Winters via GitGitGadget [this message]
2022-11-20 20:42 ` [PATCH 2/2] completion: add case-insensitive match of pseudorefs SZEDER Gábor
2022-11-20 20:46 ` SZEDER Gábor
2022-11-08 3:00 ` [PATCH 0/2] add case insensitivity option to bash completion Taylor Blau
2022-11-21 0:26 ` [PATCH v2 " Alison Winters via GitGitGadget
2022-11-21 0:26 ` [PATCH v2 1/2] completion: add optional ignore-case when matching refs Alison Winters via GitGitGadget
2022-11-21 0:26 ` [PATCH v2 2/2] completion: add case-insensitive match of pseudorefs Alison Winters via GitGitGadget
2022-11-29 2:38 ` [PATCH 0/2] add case insensitivity option to bash completion Junio C Hamano
2022-11-29 15:56 ` Alison Winters
2022-11-29 17:40 ` Ævar Arnfjörð Bjarmason
2022-11-30 0:37 ` Alison Winters
2022-11-30 3:08 ` Junio C Hamano
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=c455e855395dcc9215ea4ce3181eb3cbaff4000b.1667669315.git.gitgitgadget@gmail.com \
--to=gitgitgadget@gmail.com \
--cc=alisonatwork@outlook.com \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.