From 50717aa6c9a903d5bbe870d9104ca09868fc9416 Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Fri, 3 Mar 2017 10:17:42 +0100 Subject: [PATCH 1/9] contrib/completion: add bash and zsh completion functions --- contrib/completion/_labgrid-client.zsh | 17 +++++++++++++ contrib/completion/labgrid-client.bash | 35 ++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) create mode 100644 contrib/completion/_labgrid-client.zsh create mode 100644 contrib/completion/labgrid-client.bash diff --git a/contrib/completion/_labgrid-client.zsh b/contrib/completion/_labgrid-client.zsh new file mode 100644 index 000000000..ea83ccfa0 --- /dev/null +++ b/contrib/completion/_labgrid-client.zsh @@ -0,0 +1,17 @@ +#compdef labgrid-client +_labgrid-client () { +local curcontext="${curcontext}" +local -a options +local context state state_descr line +typeset -A opt_args +_arguments "1:Actions:((resources\:'show resources' places\:'show places' show\:'show current place' add-place\:'add place' del-place\:'delete place' add-alias\:'add alias for a place' del-alias\:'delete alias for a place' set-comment\:'set comment for a place' add-match\:'add match to a place' del-match\:'delete match from a place' acquire\:'acquire a place' release\:'release a place' env\:'print environment' power\:'power management' console\:'open console'))"\ + '-p[place or alias]:place:->places' '-h[show help]' '-x[crossbar url]' +case "$state" in + places) + local -a places + places=( $(labgrid-client complete places) ) + _values -s , 'places' music_files + ;; +esac + +} diff --git a/contrib/completion/labgrid-client.bash b/contrib/completion/labgrid-client.bash new file mode 100644 index 000000000..46e3dcdc5 --- /dev/null +++ b/contrib/completion/labgrid-client.bash @@ -0,0 +1,35 @@ +# complete labgrid-client +_labgrid-client() +{ + local cur=${COMP_WORDS[COMP_CWORD]} + local prev=${COMP_WORDS[COMP_CWORD-1]} + + case "$prev" in + -p) + COMPREPLY=( $( compgen -W "$(labgrid-client complete places)" -- $cur ) ) + return 0 + ;; + esac + + # completing an option + if [[ "$cur" == -* ]]; then + COMPREPLY=( $( compgen -W "-p -h -x" -- $cur ) ) + else + COMPREPLY=( $( compgen -W "resources\ + places\ + show\ + add-place\ + del-place\ + add-alias\ + del-alias\ + set-comment\ + add-match\ + del-match\ + acquire\ + release\ + env\ + power\ + console" -- $cur ) ) + fi +} +complete -F _labgrid-client labgrid-client From b4b2fe8b590a0cab9ca2192dab3796bec4de276a Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Fri, 3 Mar 2017 12:01:40 +0100 Subject: [PATCH 2/9] contrib/completion: add power support to bash completion Signed-off-by: Rouven Czerwinski --- contrib/completion/labgrid-client.bash | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/contrib/completion/labgrid-client.bash b/contrib/completion/labgrid-client.bash index 46e3dcdc5..96ff861bb 100644 --- a/contrib/completion/labgrid-client.bash +++ b/contrib/completion/labgrid-client.bash @@ -6,7 +6,11 @@ _labgrid-client() case "$prev" in -p) - COMPREPLY=( $( compgen -W "$(labgrid-client complete places)" -- $cur ) ) + COMPREPLY=( $( compgen -W "$(labgrid-client -x ws://dude.hi.4.pengutronix.de:20408/ws complete places)" -- $cur ) ) + return 0 + ;; + power) + COMPREPLY=( $( compgen -W "on off cycle get" -- $cur ) ) return 0 ;; esac From d146efb34f30ae71ac0e9a72ebcd346640522ecc Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Fri, 3 Mar 2017 12:35:28 +0100 Subject: [PATCH 3/9] contrib/completion: remove places seperator Signed-off-by: Rouven Czerwinski --- contrib/completion/_labgrid-client.zsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/contrib/completion/_labgrid-client.zsh b/contrib/completion/_labgrid-client.zsh index ea83ccfa0..e75524081 100644 --- a/contrib/completion/_labgrid-client.zsh +++ b/contrib/completion/_labgrid-client.zsh @@ -9,8 +9,8 @@ _arguments "1:Actions:((resources\:'show resources' places\:'show places' show\: case "$state" in places) local -a places - places=( $(labgrid-client complete places) ) - _values -s , 'places' music_files + places=( $(labgrid-client -x ws://dude.hi.4.pengutronix.de:20408/ws complete places) ) + _values 'places' $places ;; esac From a69991031c81eb43e6baaad8b4b129ff18b3f7e2 Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Fri, 3 Mar 2017 14:10:04 +0100 Subject: [PATCH 4/9] contrib/completion: fix zsh completion Signed-off-by: Rouven Czerwinski --- contrib/completion/_labgrid-client.zsh | 57 ++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 9 deletions(-) diff --git a/contrib/completion/_labgrid-client.zsh b/contrib/completion/_labgrid-client.zsh index e75524081..f7c5d66c4 100644 --- a/contrib/completion/_labgrid-client.zsh +++ b/contrib/completion/_labgrid-client.zsh @@ -1,17 +1,56 @@ #compdef labgrid-client _labgrid-client () { local curcontext="${curcontext}" -local -a options -local context state state_descr line typeset -A opt_args -_arguments "1:Actions:((resources\:'show resources' places\:'show places' show\:'show current place' add-place\:'add place' del-place\:'delete place' add-alias\:'add alias for a place' del-alias\:'delete alias for a place' set-comment\:'set comment for a place' add-match\:'add match to a place' del-match\:'delete match from a place' acquire\:'acquire a place' release\:'release a place' env\:'print environment' power\:'power management' console\:'open console'))"\ - '-p[place or alias]:place:->places' '-h[show help]' '-x[crossbar url]' +_arguments -C "1:Actions:((resources\:'show resources'\ + places\:'show places'\ + show\:'show current place'\ + add-place\:'add place'\ + del-place\:'delete place'\ + add-alias\:'add alias for a place'\ + del-alias\:'delete alias for a place'\ + set-comment\:'set comment for a place'\ + add-match\:'add match to a place'\ + del-match\:'delete match from a place'\ + acquire\:'acquire a place'\ + release\:'release a place'\ + env\:'print environment'\ + power\:'power management'\ + console\:'open console'))" \ + '*::arg:->args' case "$state" in - places) - local -a places - places=( $(labgrid-client -x ws://dude.hi.4.pengutronix.de:20408/ws complete places) ) - _values 'places' $places - ;; + (args) + case $line[1] in + (power) + _arguments -C "1:Power parameter:((on\:'power device on'\ + off\:'power device off' + get\:'get power status' + cycle\:'cycle the device'))" \ + '-p[place or alias]:place:->places' \ + '-h[show help]' \ + '-x[crossbar url]' + ;; + (add-match) + _arguments -C "1:Resource Match:->resources" \ + ;; + (*) + _arguments -C '-p[place or alias]:place:->places' \ + '-h[show help]' \ + '-x[crossbar url]' + ;; + esac + case "$state" in + (places) + local -a places + places=( $(labgrid-client -x ws://dude.hi.4.pengutronix.de:20408/ws complete places) ) + _values 'Available places and aliases' $places + ;; + (resources) + local -a resources + resources=( $(labgrid-client -x ws://dude.hi.4.pengutronix.de:20408/ws complete resources) ) + _values 'Exported Resources' $resources + ;; + esac esac } From ac6fa87c413c873dd39ae3e0b2fd8688273590bf Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Fri, 3 Mar 2017 15:59:21 +0100 Subject: [PATCH 5/9] remote/client: add filters to complete commands Add filter support to complete command: -m, --mine places/resources acquired by the local client -a, --acquired places/resources acquired by all clients --- labgrid/remote/client.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/labgrid/remote/client.py b/labgrid/remote/client.py index 26a285015..2d01fa1c6 100755 --- a/labgrid/remote/client.py +++ b/labgrid/remote/client.py @@ -131,9 +131,17 @@ def complete(self): for exporter, groups in sorted(self.resources.items()): for group_name, group in sorted(groups.items()): for resource_name, resource in sorted(group.items()): + if self.args.mine and resource.acquired != "{}/{}".format(gethostname(), getuser()): + continue + if self.args.acquired and resource.acquired is None: + continue print("{}/{}/{}".format(exporter, group_name, resource.cls)) elif self.args.type == 'places': for name, place in sorted(self.places.items()): + if self.args.mine and place.acquired != "{}/{}".format(gethostname(), getuser()): + continue + if self.args.acquired and place.acquired is None: + continue print(name) @asyncio.coroutine @@ -643,6 +651,8 @@ def main(): subparser = subparsers.add_parser('help') subparser = subparsers.add_parser('complete') + subparser.add_argument('-a', '--acquired', action='store_true') + subparser.add_argument('-m', '--mine', action='store_true') subparser.add_argument('type', choices=['resources', 'places']) subparser.set_defaults(func=ClientSession.complete) From b68e426d60866e3346633d931ee62c0783aa90cf Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Fri, 3 Mar 2017 16:30:04 +0100 Subject: [PATCH 6/9] contrib/completion: user filter support in zsh completion --- contrib/completion/_labgrid-client.zsh | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/contrib/completion/_labgrid-client.zsh b/contrib/completion/_labgrid-client.zsh index f7c5d66c4..ea7196757 100644 --- a/contrib/completion/_labgrid-client.zsh +++ b/contrib/completion/_labgrid-client.zsh @@ -41,13 +41,19 @@ case "$state" in esac case "$state" in (places) - local -a places - places=( $(labgrid-client -x ws://dude.hi.4.pengutronix.de:20408/ws complete places) ) - _values 'Available places and aliases' $places + local -a places mine_places + mine_places=('power' 'console' 'release' 'env') + if [[ ${mine_places[(i)$line[1]]} -le ${#mine_places} ]]; + then places=( $(labgrid-client complete -m places) ) + _values 'Available places and aliases' $places + else + places=( $(labgrid-client complete places) ) + _values 'Available places and aliases' $places + fi ;; (resources) local -a resources - resources=( $(labgrid-client -x ws://dude.hi.4.pengutronix.de:20408/ws complete resources) ) + resources=( $(labgrid-client complete resources) ) _values 'Exported Resources' $resources ;; esac From f8ff7586db2235f4ccf0d4b21030cd65b1af7433 Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Mon, 6 Mar 2017 08:50:05 +0100 Subject: [PATCH 7/9] contrib/completion: add help subcommand --- contrib/completion/_labgrid-client.zsh | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/completion/_labgrid-client.zsh b/contrib/completion/_labgrid-client.zsh index ea7196757..4187dc944 100644 --- a/contrib/completion/_labgrid-client.zsh +++ b/contrib/completion/_labgrid-client.zsh @@ -16,6 +16,7 @@ _arguments -C "1:Actions:((resources\:'show resources'\ release\:'release a place'\ env\:'print environment'\ power\:'power management'\ + help\:'show help'\ console\:'open console'))" \ '*::arg:->args' case "$state" in From 41bcd1f541bfa5fb0d3044dd3d5402cfb945c8a7 Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Mon, 6 Mar 2017 10:04:35 +0100 Subject: [PATCH 8/9] contrib/completion: add help to bash completion --- contrib/completion/labgrid-client.bash | 1 + 1 file changed, 1 insertion(+) diff --git a/contrib/completion/labgrid-client.bash b/contrib/completion/labgrid-client.bash index 96ff861bb..bd97b656e 100644 --- a/contrib/completion/labgrid-client.bash +++ b/contrib/completion/labgrid-client.bash @@ -22,6 +22,7 @@ _labgrid-client() COMPREPLY=( $( compgen -W "resources\ places\ show\ + help\ add-place\ del-place\ add-alias\ From bb2a8f14792cc9adc42ddb323885f6b061e54ea7 Mon Sep 17 00:00:00 2001 From: Rouven Czerwinski Date: Fri, 10 Mar 2017 09:31:38 +0100 Subject: [PATCH 9/9] Remove $cur from compgen --- contrib/completion/labgrid-client.bash | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/contrib/completion/labgrid-client.bash b/contrib/completion/labgrid-client.bash index bd97b656e..1b79953c4 100644 --- a/contrib/completion/labgrid-client.bash +++ b/contrib/completion/labgrid-client.bash @@ -6,18 +6,23 @@ _labgrid-client() case "$prev" in -p) - COMPREPLY=( $( compgen -W "$(labgrid-client -x ws://dude.hi.4.pengutronix.de:20408/ws complete places)" -- $cur ) ) + local mine_places=('power' 'console' 'release' 'env') + if [[ ! -z "${mine_places[${COMP_WORDS[1]}]+_}" ]]; then + COMPREPLY=( $( compgen -W "$(labgrid-client complete places -m)" ) ) + else + COMPREPLY=( $( compgen -W "$(labgrid-client complete places)" ) ) + fi return 0 ;; power) - COMPREPLY=( $( compgen -W "on off cycle get" -- $cur ) ) + COMPREPLY=( $( compgen -W "on off cycle get" ) ) return 0 ;; esac # completing an option if [[ "$cur" == -* ]]; then - COMPREPLY=( $( compgen -W "-p -h -x" -- $cur ) ) + COMPREPLY=( $( compgen -W "-p -h -x" ) ) else COMPREPLY=( $( compgen -W "resources\ places\ @@ -34,7 +39,7 @@ _labgrid-client() release\ env\ power\ - console" -- $cur ) ) + console" ) ) fi } complete -F _labgrid-client labgrid-client