* [gentoo-commits] gentoo-x86 commit in sys-fs/zfs/files: bash-completion
@ 2012-07-01 12:29 Richard Yao (ryao)
0 siblings, 0 replies; only message in thread
From: Richard Yao (ryao) @ 2012-07-01 12:29 UTC (permalink / raw
To: gentoo-commits
ryao 12/07/01 12:29:44
Added: bash-completion
Log:
Import bash-completion from zfs-fuse
(Portage version: 2.1.10.65/cvs/Linux x86_64)
Revision Changes Path
1.1 sys-fs/zfs/files/bash-completion
file : http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-fs/zfs/files/bash-completion?rev=1.1&view=markup
plain: http://sources.gentoo.org/viewvc.cgi/gentoo-x86/sys-fs/zfs/files/bash-completion?rev=1.1&content-type=text/plain
Index: bash-completion
===================================================================
# Copyright (c) 2010, Aneurin Price <aneurin.price@gmail.com>
# Permission is hereby granted, free of charge, to any person
# obtaining a copy of this software and associated documentation
# files (the "Software"), to deal in the Software without
# restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the
# Software is furnished to do so, subject to the following
# conditions:
# The above copyright notice and this permission notice shall be
# included in all copies or substantial portions of the Software.
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
__zfs_get_commands()
{
zfs 2>&1 | awk '/^\t[a-z]/ {print $1}' | uniq
}
__zfs_get_properties()
{
zfs get 2>&1 | awk '$2 == "YES" || $2 == "NO" {print $1}'; echo all
}
__zfs_get_editable_properties()
{
zfs get 2>&1 | awk '$2 == "YES" {printf("%s=\n", $1)}'
}
__zfs_get_inheritable_properties()
{
zfs get 2>&1 | awk '$3 == "YES" {print $1}'
}
__zfs_list_datasets()
{
zfs list -H -o name
}
__zfs_list_filesystems()
{
zfs list -H -o name -t filesystem
}
__zfs_list_snapshots()
{
zfs list -H -o name -t snapshot
}
__zfs_list_volumes()
{
zfs list -H -o name -t volume
}
__zfs_argument_chosen()
{
for word in $(seq $((COMP_CWORD-1)) -1 2)
do
local prev="${COMP_WORDS[$word]}"
for property in $@
do
if [ "x$prev" = "x$property" ]
then
return 0
fi
done
done
return 1
}
__zfs_complete_ordered_arguments()
{
local list1=$1
local list2=$2
local cur=$3
local extra=$4
if __zfs_argument_chosen $list1
then
COMPREPLY=($(compgen -W "$list2 $extra" -- "$cur"))
else
COMPREPLY=($(compgen -W "$list1 $extra" -- "$cur"))
fi
}
__zfs_complete()
{
local cur prev cmd cmds
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
cmd="${COMP_WORDS[1]}"
cmds=$(__zfs_get_commands)
if [ "${prev##*/}" = "zfs" ]
then
COMPREPLY=($(compgen -W "$cmds -?" -- "$cur"))
return 0
fi
case "${cmd}" in
clone)
__zfs_complete_ordered_arguments "$(__zfs_list_snapshots)" "$(__zfs_list_filesystems) $(__zfs_list_volumes)" $cur
return 0
;;
get)
__zfs_complete_ordered_arguments "$(__zfs_get_properties)" "$(__zfs_list_datasets)" "$cur" "-H -r -p"
return 0
;;
inherit)
__zfs_complete_ordered_arguments "$(__zfs_get_inheritable_properties)" "$(__zfs_list_datasets)" $cur
return 0
;;
list)
if [ "x$prev" = "x-o" ]
then
COMPREPLY=($(compgen -W "$(__zfs_get_properties)" -- "${cur##*,}"))
local existing_opts=$(expr "$cur" : '\(.*,\)')
if [ ! "x$existing_opts" = "x" ]
then
COMPREPLY=( "${COMPREPLY[@]/#/${existing_opts}}" )
fi
else
COMPREPLY=($(compgen -W "$(__zfs_list_datasets) -H -r -o" -- "$cur"))
fi
return 0
;;
promote)
COMPREPLY=($(compgen -W "$(__zfs_list_filesystems)" -- "$cur"))
return 0
;;
rollback|send)
COMPREPLY=($(compgen -W "$(__zfs_list_snapshots)" -- "$cur"))
return 0
;;
snapshot)
COMPREPLY=($(compgen -W "$(__zfs_list_filesystems) $(__zfs_list_volumes)" -- "$cur"))
return 0
;;
set)
__zfs_complete_ordered_arguments "$(__zfs_get_editable_properties)" "$(__zfs_list_filesystems) $(__zfs_list_volumes)" $cur
return 0
;;
*)
COMPREPLY=($(compgen -W "$(__zfs_list_datasets)" -- "$cur"))
return 0
;;
esac
}
__zpool_get_commands()
{
zpool 2>&1 | awk '/^\t[a-z]/ {print $1}' | uniq
}
__zpool_get_properties()
{
zpool get 2>&1 | awk '$2 == "YES" || $2 == "NO" {print $1}'; echo all
}
__zpool_get_editable_properties()
{
zpool get 2>&1 | awk '$2 == "YES" {printf("%s=\n", $1)}'
}
__zpool_list_pools()
{
zpool list -H -o name
}
__zpool_complete()
{
local cur prev cmd cmds
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
cmd="${COMP_WORDS[1]}"
cmds=$(__zpool_get_commands)
if [ "${prev##*/}" = "zpool" ]
then
COMPREPLY=($(compgen -W "$cmds" -- "$cur"))
return 0
fi
case "${cmd}" in
get)
__zfs_complete_ordered_arguments "$(__zpool_get_properties)" "$(__zpool_list_pools)" $cur
return 0
;;
import)
if [ "x$prev" = "x-d" ]
then
_filedir -d
else
COMPREPLY=($(compgen -W "$(__zpool_list_pools) -d" -- "$cur"))
fi
return 0
;;
set)
__zfs_complete_ordered_arguments "$(__zpool_get_editable_properties)" "$(__zpool_list_pools)" $cur
return 0
;;
add|attach|clear|create|detach|offline|online|remove|replace)
local pools="$(__zpool_list_pools)"
if __zfs_argument_chosen $pools
then
_filedir
else
COMPREPLY=($(compgen -W "$pools" -- "$cur"))
fi
return 0
;;
*)
COMPREPLY=($(compgen -W "$(__zpool_list_pools)" -- "$cur"))
return 0
;;
esac
}
complete -F __zfs_complete zfs
complete -o filenames -F __zpool_complete zpool
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2012-07-01 12:30 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-01 12:29 [gentoo-commits] gentoo-x86 commit in sys-fs/zfs/files: bash-completion Richard Yao (ryao)
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox