feat: create bash-completion file

This only completes the command names - not any arguments - and also relies on a completion cache as the response from Dokku for help output can be slow.

Closes #2095
This commit is contained in:
Jose Diaz-Gonzalez
2018-04-27 04:02:08 -04:00
parent a6b047805c
commit 6ea86f2714
3 changed files with 43 additions and 0 deletions

39
contrib/bash-completion Normal file
View File

@@ -0,0 +1,39 @@
#!/usr/bin/env bash
_dokku_complete_goals_fetch() {
dokku --quiet help --all | awk '/^ /{ print $1 }' | sort > "/var/cache/dokku-completion"
}
_dokku_complete_verify() {
declare desc="shows bash completion"
declare COMMAND="$1"
local COMMANDS=""
if [[ ! -f "/var/cache/dokku-completion" ]] || [[ -s "/var/cache/dokku-completion" ]]; then
_dokku_complete_goals_fetch
fi
_dokku_complete_goals=$(cat "/var/cache/dokku-completion")
while read -r fn; do
if [[ -z "$COMMAND" ]] || [[ "$fn" == $COMMAND* ]]; then
COMMANDS="${COMMANDS};${fn}"
fi
done <<< "$_dokku_complete_goals"
echo "${COMMANDS#";"}"
}
have dokku &&
_dokku_complete() {
local cur prev
_get_comp_words_by_ref -n : cur
opts=$(_dokku_complete_verify "${cur}")
COMPREPLY=($(IFS=";" compgen -W "$opts" -- "$cur"))
__ltrim_colon_completions "$cur"
} &&
complete -F _dokku_complete dokku
if [[ ! -f "/var/cache/dokku-completion" ]] || [[ -s "/var/cache/dokku-completion" ]]; then
have dokku && export -f _dokku_complete_goals_fetch && nohup bash -c _dokku_complete_goals_fetch >/dev/null 2>&1 &
fi

2
deb.mk
View File

@@ -117,6 +117,7 @@ deb-dokku:
mkdir -p /tmp/tmp /tmp/build
cp -r debian /tmp/build/DEBIAN
mkdir -p /tmp/build/etc/bash_completion.d
mkdir -p /tmp/build/usr/bin
mkdir -p /tmp/build/usr/share/doc/dokku
mkdir -p /tmp/build/usr/share/dokku/contrib
@@ -126,6 +127,7 @@ deb-dokku:
cp dokku /tmp/build/usr/bin
cp LICENSE /tmp/build/usr/share/doc/dokku/copyright
cp contrib/bash-completion /tmp/build/etc/bash_completion.d/dokku
find . -name ".DS_Store" -depth -exec rm {} \;
$(MAKE) go-build
cp common.mk /tmp/build/var/lib/dokku/core-plugins/common.mk

2
rpm.mk
View File

@@ -51,6 +51,7 @@ rpm-dokku:
rm -rf /tmp/tmp /tmp/build dokku_*_$(RPM_ARCHITECTURE).rpm
mkdir -p /tmp/tmp /tmp/build
mkdir -p /tmp/build/etc/bash_completion.d
mkdir -p /tmp/build/usr/bin
mkdir -p /tmp/build/usr/share/doc/dokku
mkdir -p /tmp/build/usr/share/dokku/contrib
@@ -60,6 +61,7 @@ rpm-dokku:
cp dokku /tmp/build/usr/bin
cp LICENSE /tmp/build/usr/share/doc/dokku/copyright
cp contrib/bash-completion /tmp/build/etc/bash_completion.d/dokku
find . -name ".DS_Store" -depth -exec rm {} \;
$(MAKE) go-build
cp common.mk /tmp/build/var/lib/dokku/core-plugins/common.mk