Skip to content

Commit 8aea2e1

Browse files
committed
feat: Support symlinking Bash completions from system locations
Of course, these system locations are relative to the repository location
1 parent 10387d5 commit 8aea2e1

File tree

2 files changed

+47
-3
lines changed

2 files changed

+47
-3
lines changed

pkg/lib/util/abstract-completions.sh

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,36 @@ abstract.completions_search_heuristics() {
8383
fi
8484
done
8585
done
86+
87+
if [[ $type == all || $type == bash ]]; then
88+
for completion_dir in share/bash-completion/completions etc/bash_completion.d; do
89+
for file in "$BPM_PACKAGES_PATH/$id/$completion_dir"/*; do
90+
local fileName="${file##*/}"
91+
92+
abstract.completions_do_action_bash "$action" "$file"
93+
done
94+
done
95+
fi
8696
}
8797

8898
abstract.completions_do_action_bash() {
8999
local action="$1"
90100
local file="$2"
91101

102+
local fileName="${file##*/}"
103+
if [[ $fileName != *.* ]]; then
104+
fileName="$fileName.bash"
105+
fi
106+
107+
92108
case "$action" in
93109
link)
94110
mkdir -p "$BPM_INSTALL_COMPLETIONS/bash"
95-
ln -sf "$file" "$BPM_INSTALL_COMPLETIONS/bash/${file##*/}"
111+
ln -sf "$file" "$BPM_INSTALL_COMPLETIONS/bash/$fileName"
96112
;;
97113
unlink)
98-
if [ -f "$BPM_INSTALL_COMPLETIONS/bash/${file##*/}" ]; then
99-
unlink "$BPM_INSTALL_COMPLETIONS/bash/${file##*/}"
114+
if [ -f "$BPM_INSTALL_COMPLETIONS/bash/$fileName" ]; then
115+
unlink "$BPM_INSTALL_COMPLETIONS/bash/$fileName"
100116
fi
101117
;;
102118
esac

tests/do-plumbing-link-completions.bats

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,34 @@ load 'util/init.sh'
107107
assert [ "$(readlink "$BPM_INSTALL_COMPLETIONS/bash/c4.bash")" = "$BPM_PACKAGES_PATH/$site/$pkg/contrib/completions/c4.bash" ]
108108
}
109109

110+
@test "adds bash completions determined with heuristics (share/etc)" {
111+
local site='github.com'
112+
local pkg='username/package'
113+
114+
test_util.setup_pkg "$pkg"; {
115+
mkdir -p 'share/bash-completion/completions'
116+
mkdir -p 'etc/bash_completion.d'
117+
118+
touch 'share/bash-completion/completions/c1'
119+
touch 'share/bash-completion/completions/c2.sh'
120+
touch 'share/bash-completion/completions/c3.bash'
121+
touch 'etc/bash_completion.d/c4'
122+
touch 'etc/bash_completion.d/c5.sh'
123+
touch 'etc/bash_completion.d/c6.bash'
124+
}; test_util.finish_pkg
125+
test_util.fake_add "$pkg"
126+
127+
run do-plumbing-link-completions "$site/$pkg"
128+
129+
assert_success
130+
assert [ "$(readlink "$BPM_INSTALL_COMPLETIONS/bash/c1.bash")" = "$BPM_PACKAGES_PATH/$site/$pkg/share/bash-completion/completions/c1" ]
131+
assert [ "$(readlink "$BPM_INSTALL_COMPLETIONS/bash/c2.sh")" = "$BPM_PACKAGES_PATH/$site/$pkg/share/bash-completion/completions/c2.sh" ]
132+
assert [ "$(readlink "$BPM_INSTALL_COMPLETIONS/bash/c3.bash")" = "$BPM_PACKAGES_PATH/$site/$pkg/share/bash-completion/completions/c3.bash" ]
133+
assert [ "$(readlink "$BPM_INSTALL_COMPLETIONS/bash/c4.bash")" = "$BPM_PACKAGES_PATH/$site/$pkg/etc/bash_completion.d/c4" ]
134+
assert [ "$(readlink "$BPM_INSTALL_COMPLETIONS/bash/c5.sh")" = "$BPM_PACKAGES_PATH/$site/$pkg/etc/bash_completion.d/c5.sh" ]
135+
assert [ "$(readlink "$BPM_INSTALL_COMPLETIONS/bash/c6.bash")" = "$BPM_PACKAGES_PATH/$site/$pkg/etc/bash_completion.d/c6.bash" ]
136+
}
137+
110138
@test "adds bash completions determined from heuristics when when ZSH_COMPLETIONS is specified in package.sh" {
111139
local site='github.com'
112140
local pkg="username/package"

0 commit comments

Comments
 (0)