Skip to content

Commit

Permalink
Add completion for mfiutil
Browse files Browse the repository at this point in the history
  • Loading branch information
Low-power committed Aug 20, 2024
1 parent 07605cb commit ab36c96
Show file tree
Hide file tree
Showing 4 changed files with 145 additions and 0 deletions.
1 change: 1 addition & 0 deletions completions/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ bashcomp_DATA = 2to3 \
_mdbook \
mdtool \
medusa \
mfiutil \
mii-diag \
mii-tool \
minicom \
Expand Down
124 changes: 124 additions & 0 deletions completions/mfiutil
Original file line number Diff line number Diff line change
@@ -0,0 +1,124 @@
[[ $OSTYPE == *@(freebsd|dragonflybsd|darwin|linux|solaris)* ]] || return 1

_complete_mfiutil() {
local cur prev words cword comp_args
_comp_initialize -- "$@" || return

if [[ $cur == -* ]]; then
# Complete global options
local options="-u -d -e"
case "$OSTYPE" in
*freebsd*)
options="$options -D -t"
;;
*dragonflybsd*|*solaris*)
options="$options -t"
;;
esac
local end_of_options=
local w
for w in "${words[@]:1:cword-1}"; do
case "$w" in
--)
end_of_options=1
break
;;
-*)
;;
*)
end_of_options=1
break
;;
esac
done
if [ -z "$end_of_options" ]; then
_comp_compgen -- -W '$options'
return
fi
fi

local REPLY
_comp_count_args -a "-*[Dtu]"
case $REPLY in
0)
# Complete argument to global options
case "$prev" in
-D)
_filedir
;;
-t)
case "$OSTYPE" in
*freebsd*|*dragonflybsd*)
_comp_compgen -- -W 'mfi mrsas'
;;
esac
;;
esac
;;
1)
_comp_compgen -- -W '
version show fail good rebuild syspd drive start abort locate
cache name volume clear create delete add remove patrol stop
foreign flash bbu ctrlprop'
;;
2)
case "$prev" in
show)
_comp_compgen -- -W '
adapter battery config drives events firmware foreign
logstate volumes patrol progress'
;;
drive)
_comp_compgen -- -W 'progress clear'
;;
start)
_comp_compgen -- -W 'rebuild patrol learn'
;;
abort)
_comp_compgen -- -W 'rebuild'
;;
volume)
_comp_compgen -- -W 'progress'
;;
create)
_comp_compgen -- -W '
jbod raid0 raid1 raid5 raid6 raid10 raid50 raid60 concat'
;;
patrol)
_comp_compgen -- -W 'disable auto manual'
;;
stop)
_comp_compgen -- -W 'patrol'
;;
foreign)
_comp_compgen -- -W 'scan clear diag preview import'
;;
flash)
_filedir
;;
bbu)
_comp_compgen -- -W 'learn-delay autolearn-mode bbu-mode'
;;
ctrlprop)
_comp_compgen -- -W 'rebuild alarm'
;;
esac
;;
3)
case "${words[cword-2]}.$prev" in
locate.*)
_comp_compgen -- -W 'on off'
;;
cache.*)
_comp_compgen -- -W '
enable disable reads writes write-back write-through
read-ahead bad-bbu-write-cache write-cache'
;;
ctrlprop.alarm)
_comp_compgen -- -W 'on off 1 0'
;;
esac
;;
esac
}
complete -F _complete_mfiutil mfiutil mrsasutil
1 change: 1 addition & 0 deletions test/t/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,7 @@ EXTRA_DIST = \
test_mdtool.py \
test_medusa.py \
test_mencoder.py \
test_mfiutil.py \
test_mii_diag.py \
test_mii_tool.py \
test_minicom.py \
Expand Down
19 changes: 19 additions & 0 deletions test/t/test_mfiutil.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import pytest


class TestMfiUtil:
@pytest.mark.complete("mfiutil show ")
def test_basic(self, completion):
assert completion

@pytest.mark.complete("mfiutil -")
def test_global_options(self, completion):
assert completion

@pytest.mark.complete("mfiutil show -")
def test_options_after_subcommands(self, completion):
assert not completion

@pytest.mark.complete("mfiutil locate 1 ")
def test_locate_subcommand(self, completion):
assert completion == ["off", "on"]

0 comments on commit ab36c96

Please sign in to comment.