153 lines
4.0 KiB
Plaintext
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
|