From 020005bcc8c6262a378c13c969d6a9a167e4390d Mon Sep 17 00:00:00 2001 From: Koichi Murase Date: Sat, 17 Aug 2024 05:57:11 +0900 Subject: [PATCH] feat(completions/vagrant): apply changes in the upstream version --- completions/vagrant.completion.sh | 79 ++++++++++++++++++++++++------- 1 file changed, 62 insertions(+), 17 deletions(-) diff --git a/completions/vagrant.completion.sh b/completions/vagrant.completion.sh index 78642db..07f9e0b 100644 --- a/completions/vagrant.completion.sh +++ b/completions/vagrant.completion.sh @@ -1,5 +1,8 @@ #! bash oh-my-bash.module - +# +# The current version is based on the following upstream version: +# https://github.com/hashicorp/vagrant/blob/9df95a200280219ae5899db6eaa2e0eff4ad1a8e/contrib/bash/completion.sh +#------------------------------------------------------------------------------ # (The MIT License) # # Copyright (c) 2014 Kura @@ -53,7 +56,7 @@ function __vagrantinvestigate { function _vagrant { cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" - commands="snapshot box connect destroy docker-logs docker-run global-status halt help init list-commands login package plugin provision rdp reload resume rsync rsync-auto share ssh ssh-config status suspend up version" + commands="box cloud connect destroy docker-exec docker-logs docker-run global-status halt help init list-commands login package plugin provision push rdp reload resume rsync rsync-auto share snapshot ssh ssh-config status suspend up version" if [ $COMP_CWORD == 1 ] then @@ -65,7 +68,7 @@ function _vagrant { then case "$prev" in "init") - local box_list=$(find "$HOME/.vagrant.d/boxes" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;|sed -e 's/-VAGRANTSLASH-/\//') + local box_list=$(find "${VAGRANT_HOME:-$HOME/.vagrant.d}/boxes" -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | sed -e 's/-VAGRANTSLASH-/\//') COMPREPLY=($(compgen -W "${box_list}" -- ${cur})) return 0 ;; @@ -73,28 +76,45 @@ function _vagrant { vagrant_state_file=$(__vagrantinvestigate) || return 1 if [[ -d $vagrant_state_file ]] then - vm_list=$(find $vagrant_state_file/machines -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) + local vm_list=$(find "$vagrant_state_file/machines" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) fi - local up_commands="--no-provision" + local up_commands="\ + --provision \ + --no-provision \ + --provision-with \ + --destroy-on-error \ + --no-destroy-on-error \ + --parallel \ + --no-parallel + --provider \ + --install-provider \ + --no-install-provider \ + -h \ + --help" COMPREPLY=($(compgen -W "${up_commands} ${vm_list}" -- ${cur})) return 0 ;; - "ssh"|"provision"|"reload"|"halt"|"suspend"|"resume"|"ssh-config") + "destroy"|"ssh"|"provision"|"reload"|"halt"|"suspend"|"resume"|"ssh-config") vagrant_state_file=$(__vagrantinvestigate) || return 1 if [[ -f $vagrant_state_file ]] then running_vm_list=$(grep 'active' "$vagrant_state_file" | sed -e 's/"active"://' | tr ',' '\n' | cut -d '"' -f 2 | tr '\n' ' ') else - running_vm_list=$(find "$vagrant_state_file" -type f -name "id" | awk -F"/" '{print $(NF-2)}') + running_vm_list=$(find "$vagrant_state_file/machines" -type f -name "id" | awk -F"/" '{print $(NF-2)}') fi COMPREPLY=($(compgen -W "${running_vm_list}" -- ${cur})) return 0 ;; "box") - box_commands="add help list remove repackage" + box_commands="add help list outdated prune remove repackage update" COMPREPLY=($(compgen -W "${box_commands}" -- ${cur})) return 0 ;; + "cloud") + cloud_commands="auth box search provider publish version" + COMPREPLY=($(compgen -W "$cloud_commands" -- $cur)) + return 0 + ;; "plugin") plugin_commands="install license list uninstall update" COMPREPLY=($(compgen -W "${plugin_commands}" -- ${cur})) @@ -105,7 +125,7 @@ function _vagrant { return 0 ;; "snapshot") - snapshot_commands="back delete go list take" + snapshot_commands="delete list pop push restore save" COMPREPLY=($(compgen -W "${snapshot_commands}" -- ${cur})) return 0 ;; @@ -119,27 +139,52 @@ function _vagrant { action="${COMP_WORDS[COMP_CWORD-2]}" case "$action" in "up") - if [ "$prev" == "--no-provision" ]; then - COMPREPLY=($(compgen -W "${vm_list}" -- ${cur})) + if [ "$prev" == "--no-provision" ] + then + if [[ -d "$vagrant_state_file" ]] + then + local vm_list=$(find "$vagrant_state_file/machines" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;) + fi + COMPREPLY=($(compgen -W "$vm_list" -- $cur)) return 0 fi ;; "box") case "$prev" in "remove"|"repackage") - local box_list=$(find "$HOME/.vagrant.d/boxes" -mindepth 1 -maxdepth 1 -type d -exec basename {} \;|sed -e 's/-VAGRANTSLASH-/\//') - COMPREPLY=($(compgen -W "${box_list}" -- ${cur})) + local box_list=$(find "${VAGRANT_HOME:-$HOME/.vagrant.d}/boxes" -mindepth 1 -maxdepth 1 -type d -exec basename {} \; | sed -e 's/-VAGRANTSLASH-/\//') + COMPREPLY=($(compgen -W "$box_list" -- $cur)) + return 0 + ;; + "add") + local add_commands="\ + --name \ + --checksum \ + --checksum-type \ + -c --clean \ + -f --force \ + " + if [[ $cur == -* ]]; then + COMPREPLY=($(compgen -W "$add_commands" -- $cur)) + else + COMPREPLY=($(compgen -o default -- "$cur")) + fi return 0 ;; *) + ;; esac ;; "snapshot") - if [ "$prev" == "go" ]; then - local snapshot_list=$(vagrant snapshot list | awk '/Name:/ { print $2 }') - COMPREPLY=($(compgen -W "${snapshot_list}" -- ${cur})) + case "$prev" in + "restore"|"delete") + local snapshot_list=$(vagrant snapshot list) + COMPREPLY=($(compgen -W "$snapshot_list" -- $cur)) return 0 - fi + ;; + esac + ;; + *) ;; esac fi