41 lines
1.5 KiB
Bash
41 lines
1.5 KiB
Bash
# Complétion bash pour « git deploy » et « git hotfix ».
|
|
# git deploy : 1er arg = remote, args suivants = branches (multi-branches).
|
|
# git hotfix : 1er arg = remote, 2e arg = branche.
|
|
# Tout est lu en direct depuis le dépôt courant.
|
|
#
|
|
# À sourcer dans ~/.bashrc APRÈS la complétion git, par ex. :
|
|
# source /chemin/vers/gitploy/deploy-completion.bash
|
|
|
|
# $1 = "multi" pour autoriser plusieurs branches, sinon une seule.
|
|
_deploy_complete() {
|
|
local multi="$1" i args=() cur="${COMP_WORDS[COMP_CWORD]}"
|
|
# Recense les arguments positionnels déjà saisis (hors options et valeur de -m)
|
|
for ((i = 2; i < COMP_CWORD; i++)); do
|
|
case "${COMP_WORDS[i-1]}" in -m|--message) continue ;; esac
|
|
case "${COMP_WORDS[i]}" in -*) continue ;; esac
|
|
args+=("${COMP_WORDS[i]}")
|
|
done
|
|
|
|
local n=${#args[@]}
|
|
if [ "$n" -eq 0 ]; then
|
|
COMPREPLY=($(compgen -W "$(git remote 2>/dev/null)" -- "$cur"))
|
|
return
|
|
fi
|
|
if [ "$multi" != multi ] && [ "$n" -ge 2 ]; then
|
|
COMPREPLY=(); return
|
|
fi
|
|
|
|
# Branches locales, en excluant celles déjà saisies.
|
|
local all excl=" ${args[*]:1} "
|
|
all=$(git for-each-ref --format='%(refname:short)' refs/heads/ 2>/dev/null)
|
|
local avail=""
|
|
for b in $all; do
|
|
case "$excl" in *" $b "*) ;; *) avail="$avail $b" ;; esac
|
|
done
|
|
COMPREPLY=($(compgen -W "$avail" -- "$cur"))
|
|
}
|
|
|
|
# Hooks reconnus par la complétion git pour les sous-commandes personnalisées.
|
|
_git_deploy() { _deploy_complete multi; }
|
|
_git_hotfix() { _deploy_complete single; }
|