# 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; }