Improved handling of Vagrantfiles with multiple providers

This commit is contained in:
Rickard von Essen 2016-08-22 21:35:20 +02:00
parent 54ef10a844
commit 525416cc19

View File

@ -238,32 +238,45 @@ end
function __bobthefish_prompt_vagrant -S -d 'Display Vagrant status' function __bobthefish_prompt_vagrant -S -d 'Display Vagrant status'
[ "$theme_display_vagrant" = 'yes' -a -f Vagrantfile ]; or return [ "$theme_display_vagrant" = 'yes' -a -f Vagrantfile ]; or return
set -l provider (__bobthefish_vagrant_provider) for machine in (__bobthefish_vagrant_machines)
set -l provider (__bobthefish_vagrant_provider $machine)
set -l id (__bobthefish_vagrant_id $machine $provider)
if [ ! -z "$id" ]
switch "$provider" switch "$provider"
case 'virtualbox' case 'virtualbox'
__bobthefish_prompt_vagrant_vbox __bobthefish_prompt_vagrant_vbox $id
case 'vmware_fusion' case 'vmware_fusion'
__bobthefish_prompt_vagrant_vmware __bobthefish_prompt_vagrant_vmware $id
case 'parallels' case 'parallels'
__bobthefish_prompt_vagrant_parallels __bobthefish_prompt_vagrant_parallels $id
end
end
end end
end end
function __bobthefish_vagrant_provider -S -d 'Get (first) Vagrant provider' function __bobthefish_vagrant_machines -S -d 'List all Vagrant machines'
set -l first_provider (ls -1d .vagrant/machines/*/* | head -1) for machine in .vagrant/machines/*
echo $first_provider | sed -e 's/.*\/\(\w*\)/\1/' echo $machine | command sed -e 's/.*\/\(\w*\)/\1/'
end
end end
function __bobthefish_vagrant_ids -S -a provider -d 'List Vagrant machine ids' function __bobthefish_vagrant_provider -S -a machine -d 'Get Vagrant provider for <machine>'
for file in .vagrant/machines/*/$provider/id for provider in .vagrant/machines/$machine/*
read id <$file if [ -e $provider/id ]
echo $provider/id | command sed -ne 's/.vagrant\/machines\/'$machine'\/\(.*\)\/id/\1/p'
end
end
end
function __bobthefish_vagrant_id -S -a machine -a provider -d 'List Vagrant machine id'
if [ -n "$provider" ]
read id < .vagrant/machines/$machine/$provider/id
echo $id echo $id
end end
end end
function __bobthefish_prompt_vagrant_vbox -S -d 'Display VirtualBox Vagrant status' function __bobthefish_prompt_vagrant_vbox -S -a id -d 'Display VirtualBox Vagrant status'
set -l vagrant_status set -l vagrant_status
for id in (__bobthefish_vagrant_ids "virtualbox")
set -l vm_status (VBoxManage showvminfo --machinereadable $id ^/dev/null | command grep 'VMState=' | tr -d '"' | cut -d '=' -f 2) set -l vm_status (VBoxManage showvminfo --machinereadable $id ^/dev/null | command grep 'VMState=' | tr -d '"' | cut -d '=' -f 2)
switch "$vm_status" switch "$vm_status"
case 'running' case 'running'
@ -279,7 +292,6 @@ function __bobthefish_prompt_vagrant_vbox -S -d 'Display VirtualBox Vagrant stat
case '' case ''
set vagrant_status "$vagrant_status$__bobthefish_vagrant_unknown_glyph" set vagrant_status "$vagrant_status$__bobthefish_vagrant_unknown_glyph"
end end
end
[ -z "$vagrant_status" ]; and return [ -z "$vagrant_status" ]; and return
__bobthefish_start_segment $__color_vagrant __bobthefish_start_segment $__color_vagrant
@ -287,15 +299,13 @@ function __bobthefish_prompt_vagrant_vbox -S -d 'Display VirtualBox Vagrant stat
set_color normal set_color normal
end end
function __bobthefish_prompt_vagrant_vmware -S -d 'Display VMWare Vagrant status' function __bobthefish_prompt_vagrant_vmware -S -a id -d 'Display VMWare Vagrant status'
set -l vagrant_status set -l vagrant_status
for id in (__bobthefish_vagrant_ids "vmware_fusion")
if [ (pgrep -f "$id") ] if [ (pgrep -f "$id") ]
set vagrant_status "$vagrant_status$__bobthefish_vagrant_running_glyph" set vagrant_status "$vagrant_status$__bobthefish_vagrant_running_glyph"
else else
set vagrant_status "$vagrant_status$__bobthefish_vagrant_poweroff_glyph" set vagrant_status "$vagrant_status$__bobthefish_vagrant_poweroff_glyph"
end end
end
[ -z "$vagrant_status" ]; and return [ -z "$vagrant_status" ]; and return
__bobthefish_start_segment $__color_vagrant __bobthefish_start_segment $__color_vagrant
@ -305,7 +315,6 @@ end
function __bobthefish_prompt_vagrant_parallels -S -d 'Display Parallels Vagrant status' function __bobthefish_prompt_vagrant_parallels -S -d 'Display Parallels Vagrant status'
set -l vagrant_status set -l vagrant_status
for id in (__bobthefish_vagrant_ids "parallels")
set -l vm_status (prlctl list $id -o status ^/dev/null | command tail -1) set -l vm_status (prlctl list $id -o status ^/dev/null | command tail -1)
switch "$vm_status" switch "$vm_status"
case 'running' case 'running'
@ -321,7 +330,6 @@ function __bobthefish_prompt_vagrant_parallels -S -d 'Display Parallels Vagrant
case '' case ''
set vagrant_status "$vagrant_status$__bobthefish_vagrant_unknown_glyph" set vagrant_status "$vagrant_status$__bobthefish_vagrant_unknown_glyph"
end end
end
[ -z "$vagrant_status" ]; and return [ -z "$vagrant_status" ]; and return
__bobthefish_start_segment $__color_vagrant __bobthefish_start_segment $__color_vagrant