Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add completion for mfiutil(8) #1241

Merged
merged 3 commits into from
Dec 25, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions completions/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,7 @@ bashcomp_DATA = 2to3 \
_mdbook \
mdtool \
medusa \
mfiutil \
mii-diag \
mii-tool \
minicom \
Expand Down Expand Up @@ -1150,6 +1151,8 @@ symlinks: $(DATA)
mdecrypt
$(ss) _mdbook \
_deno _diesel _dprint _starship
$(ss) mfiutil \
mrsasutil
$(ss) mplayer \
gmplayer kplayer mencoder mplayer2
$(ss) mutt \
Expand Down
126 changes: 126 additions & 0 deletions completions/mfiutil
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# mfiutil completion -*- shell-script -*-

[[ $OSTYPE == *@(freebsd|dragonflybsd|darwin|linux|solaris)* ]] || return 1
akinomyoga marked this conversation as resolved.
Show resolved Hide resolved

_comp_cmd_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+=" -D -t"
;;
*dragonflybsd* | *solaris*)
options+=" -t"
;;
esac
local end_of_options=
local w
for w in "${words[@]:1:cword-1}"; do
case "$w" in
--)
end_of_options=set
break
;;
-*) ;;
*)
end_of_options=set
break
;;
esac
done
if [[ ! $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)
_comp_compgen_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)
_comp_compgen_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 _comp_cmd_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 @@ -372,6 +372,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
23 changes: 23 additions & 0 deletions test/t/test_mfiutil.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import pytest


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

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

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

@pytest.mark.complete("mfiutil -e show dri")
def test_show_drives_subcommand_with_global_option(self, completion):
assert completion == ["ves"]

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