btrfs-progs/btrfs-completion

153 lines
4.0 KiB
Plaintext

# original by Alfredo Esteban <aedelatorre at xxxxxxxxx>
# (http://www.spinics.net/lists/linux-btrfs/msg15899.html)
# edited by Joseph Wang <joequant at gmail.com>
# (http://lists.alioth.debian.org/pipermail/bash-completion-devel/2013-June/004868.html)
# edited by John C F <john.ch.fr at gmail.com> on 2015-02-02
_btrfs_devs()
{
local DEVS
DEVS=''; while read dev; do DEVS+="$dev "; done < <(lsblk -pnro name)
COMPREPLY+=( $( compgen -W "$DEVS" -- "$cur" ) )
}
_btrfs_mnts()
{
local MNTS
MNTS=''
while read mnt; do MNTS+="$mnt "
done < <(mount | awk '{print $3}')
COMPREPLY+=( $( compgen -W "$MNTS" -- "$cur" ) )
}
_btrfs()
{
local cur prev words cword
_init_completion || return
COMPREPLY=()
local cmd=${words[1]}
commands='subvolume filesystem balance device scrub check rescue restore inspect-internal property send receive quota qgroup replace help version'
commands_subvolume='create delete list snapshot find-new get-default set-default show sync'
commands_filesystem='defragment sync resize show df label'
commands_balance='start pause cancel resume status'
commands_device='scan add delete ready stats'
commands_scrub='start cancel resume status'
commands_rescue='chunk-recover super-recover'
commands_inspect_internal='inode-resolve logical-resolve subvolid-resolve rootid'
commands_property='get set list'
commands_quota='enable disable rescan'
commands_qgroup='assign remove create destroy show limit'
commands_replace='start status cancel'
if [[ "$cur" == -* && $cword -le 3 && "$cmd" != "help" ]]; then
COMPREPLY=( $( compgen -W '--help' -- "$cur" ) )
return 0
fi
if [[ $cword -eq 1 ]]; then
COMPREPLY=( $( compgen -W "$commands" -- "$cur" ) )
return 0
elif [[ $cword -eq 2 ]]; then
case $cmd in
subvolume)
opts="$commands_subvolume"
;;
filesystem)
opts="$commands_filesystem"
;;
balance)
opts="$commands_balance"
;;
device)
opts="$commands_device"
;;
scrub)
opts="$commands_scrub"
;;
check)
_btrfs_devs
return 0
;;
rescue)
opts="$commands_rescue"
;;
restore)
_btrfs_devs
return 0
;;
inspect-internal)
opts="$commands_inspect_internal"
;;
property)
opts="$commands_property"
;;
send|receive)
_filedir -d
return 0
;;
quota)
opts="$commands_quota"
;;
qgroup)
opts="$commands_qgroup"
;;
replace)
opts="$commands_replace"
;;
help)
opts="--full"
;;
version)
return 0
;;
esac
COMPREPLY=( $( compgen -W "$opts" -- "$cur" ) )
return 0
elif [[ $cword -eq 3 ]]; then
case $cmd in
filesystem)
case $prev in
defragment)
_filedir
return 0
;;
label)
_btrfs_mnts
_btrfs_devs
return 0
;;
esac
;;
device|rescue)
_btrfs_devs
return 0
;;
replace)
case $prev in
status|cancel)
_btrfs_mnts
return 0
;;
start)
_btrfs_devs
return 0
;;
esac
;;
esac
fi
if [[ "$cmd" == "receive" && "$prev" == "-f" ]]; then
_filedir
return 0
fi
_filedir -d
return 0
}
complete -F _btrfs btrfs