From 067320a0aa36ba97d64ff5473d4ad0b3877774e4 Mon Sep 17 00:00:00 2001
From: Tom Grennan <tgrennan@vyatta.com>
Date: Fri, 5 Oct 2007 14:10:16 -0700
Subject: Use empty or missing "allowed:" fields in node.tag/node.def as wild
 cards rather than "echo -n --".

Also, discoverd a way to use an apparently blank line in help completion.
---
 etc/bash_completion.d/vyatta-op | 59 ++++++++++++++++++-----------------------
 1 file changed, 26 insertions(+), 33 deletions(-)

(limited to 'etc/bash_completion.d/vyatta-op')

diff --git a/etc/bash_completion.d/vyatta-op b/etc/bash_completion.d/vyatta-op
index 10d65e4..4b6bdfc 100644
--- a/etc/bash_completion.d/vyatta-op
+++ b/etc/bash_completion.d/vyatta-op
@@ -83,29 +83,24 @@ _vyatta_op_set_allowed_subdirs ()
     tag_ndef=${vyatta_op_templates}/${dir}/node.tag/node.def
     if [ -f $tag_ndef ] ; then
 	local acmd=$( _vyatta_op_get_node_def_field $tag_ndef allowed )
-	_vyatta_op_allowed+=($(	eval "$acmd" ))
+	local -a a=($( eval "$acmd" ))
+	if [ ${#a[@]} -ne 0 ] ; then
+	    _vyatta_op_allowed+=( "${a[@]}" )
+	else
+	    _vyatta_op_allowed+=( "" )
+	fi
     fi
-
     eval $restore_shopts
 }
 
-_vyatta_op_set_allowed ()
-{
-    local nullglob=$( shopt -p nullglob )
-    shopt -s nullglob
-    _vyatta_op_allowed=($( eval "$( _vyatta_op_get_node_def_field $_vyatta_op_node_def allowed )" ))
-    eval $nullglob
-}
-
 _vyatta_op_is_allowed ()
 {
-    local arg=$1 allowed
+    local arg=$1
 
     # return immediately if nothing allowed
     [ ${#_vyatta_op_allowed[@]} -ne 0 ] || return
-    for allowed in ${_vyatta_op_allowed[@]} ; do
-    # -- is wildcard that allows anything
-	[ $allowed == -- ] && return
+    for allowed in "${_vyatta_op_allowed[@]}" ; do
+	[ -z "$allowed" ] && return
 	[ "$arg" == $allowed ] && return
     done
     false
@@ -148,14 +143,6 @@ _vyatta_op_scan ()
             # no template
             break
           fi
-          _vyatta_op_node_def=$ndef
-          _vyatta_op_set_allowed
-          if ! _vyatta_op_is_allowed $arg ; then
-            # invalid tag value.
-            # XXX probably display "allowed:"-specific help string when
-            # that is supported?
-            break
-          fi
         fi
         last_tag=1
         tpath=$_tpath
@@ -249,13 +236,17 @@ _vyatta_op_help ()
         subtag=$_vyatta_op_node_path/node.tag/node.def
 	eval $restore_shopts
         if [ -f $subtag ]; then
-          allowed=($( eval "$( _vyatta_op_get_node_def_field $subtag allowed )" ))
+	  local acmd=$( _vyatta_op_get_node_def_field $subtag allowed )
+          allowed=($( eval "$acmd" ))
           help=$( _vyatta_op_get_node_def_field $subtag help )
           if [ ${#allowed[@]} -ne 0 ] ; then
             for a in "${allowed[@]}"; do
-              hcomps+=( "$a" )
+              hcomps+=( "${a:-*}" )
               hstrs+=( "$help" )
             done
+	  else
+	      hcomps=( '*' )
+              hstrs=( "$help" )
           fi
         fi
 
@@ -282,21 +273,23 @@ _vyatta_op_help ()
 _vyatta_op_expand ()
 {
     local cur=${COMP_WORDS[COMP_CWORD]}
-    local a w
 
     if _vyatta_op_scan 0 "${COMP_WORDS[@]}" ; then
-	a="${_vyatta_op_allowed[*]}"
-	if [ "$a" != '--' ] ; then
-	    w=$a
-	else
-	    w=""		# donot expand wildcard
+	COMPREPLY=( )
+	if [ -n "${_vyatta_op_allowed[*]}" ] ; then
+	    for a in "${_vyatta_op_allowed[@]}" ; do
+		if [ -n "$a" ] ; then
+		    COMPREPLY+=($( compgen -W "$a" -- $cur ))
+		else
+		    COMPREPLY+=( "" )
+		fi
+	    done
 	fi
-	COMPREPLY=($( compgen -W "$w" -- $cur ))
-	if [[ ${#COMPREPLY[@]} -ne 0 || "$a" == '--' ]] &&
+	if [[ ${#COMPREPLY[@]} -ne 0 || -z "${_vyatta_op_allowed[*]}" ]] &&
 	    [[ "${COMP_WORDS[*]}" == "${_vyatta_op_comp_words[*]}" ]]
 	then
 	    _vyatta_op_help
-	    COMPREPLY=($( compgen -o nospace -W "______________ ..." ))
+	    COMPREPLY=( "" " " )
 	    _vyatta_op_comp_words=( )
 	else
 	    _vyatta_op_comp_words=( "${COMP_WORDS[@]}" )
-- 
cgit v1.2.3