completion: add helper to count path components

A follow-up commit will use this with for-each-ref to strip the right
number of path components from refnames.

Signed-off-by: David Mandelberg <david@mandelberg.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
David Mandelberg 2025-03-23 17:05:46 -04:00 committed by Junio C Hamano
parent 6a64ac7b01
commit 5637bdc352
2 changed files with 37 additions and 0 deletions

View File

@ -234,6 +234,17 @@ __git_dequote ()
done
}
# Prints the number of slash-separated components in a path.
# 1: Path to count components of.
__git_count_path_components ()
{
local path="$1"
local relative="${path#/}"
relative="${relative%/}"
local slashes="/${relative//[^\/]}"
echo "${#slashes}"
}
# The following function is based on code from:
#
# bash_completion - programmable completion functions for bash 3.2+

View File

@ -455,6 +455,32 @@ test_expect_success '__git_dequote - open double quote' '
'
test_expect_success '__git_count_path_components - no slashes' '
echo 1 >expected &&
__git_count_path_components a >"$actual" &&
test_cmp expected "$actual"
'
test_expect_success '__git_count_path_components - relative' '
echo 3 >expected &&
__git_count_path_components a/b/c >"$actual" &&
test_cmp expected "$actual"
'
test_expect_success '__git_count_path_components - absolute' '
echo 3 >expected &&
__git_count_path_components /a/b/c >"$actual" &&
test_cmp expected "$actual"
'
test_expect_success '__git_count_path_components - trailing slash' '
echo 3 >expected &&
__git_count_path_components a/b/c/ >"$actual" &&
test_cmp expected "$actual"
'
test_expect_success '__gitcomp_direct - puts everything into COMPREPLY as-is' '
sed -e "s/Z$//g" >expected <<-EOF &&
with-trailing-space Z