# HG changeset patch # User Rok Strnisa # Date 1282921738 -3600 # Node ID ca1d85b0de077cbc65931dc0d07d667849683b6a # Parent 5ecd75cb2fd0da474efa2f48e187d0d5976c1a8f CA-28853: CLI command returns an error on pressing Tab key --- FIXED. Only the first if statement (3 lines) includes the change. The other changes to the file only make the indentation consistent. Signed-off-by: Rok Strnisa diff --git a/ocaml/xe-cli/bash-completion b/ocaml/xe-cli/bash-completion --- a/ocaml/xe-cli/bash-completion +++ b/ocaml/xe-cli/bash-completion @@ -10,15 +10,19 @@ _xe() local cur prev opts xe IFS COMPREPLY=() + # The following if statement is a fix for CA-28853. "cur=`_get_cword`" is used in newer scripts, but it somehow does not work. + if [[ $COMP_CWORD < 1 ]] ; then + COMP_CWORD=$(( ${#COMP_WORDS[@]} + 1)) + fi cur="${COMP_WORDS[COMP_CWORD]}" prev="${COMP_WORDS[COMP_CWORD-1]}" xe=xe - + if [[ $COMP_CWORD == 1 ]] ; then opts=`${xe} help --minimal --all 2>/dev/null | sed -e 's/,/\ ,/g' -e 's/$/\ /g'` && COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) ) return 0 fi - + # parameters are passed as param=value if echo ${COMP_WORDS[COMP_CWORD]} | grep "=" > /dev/null; then @@ -28,7 +32,7 @@ _xe() value=`echo ${COMP_WORDS[COMP_CWORD]} | cut -d= -f2` local vms args - + case "$param" in filename|file-name|license-file) IFS=$'\n,' @@ -44,38 +48,38 @@ _xe() return 0 ;; - uuid) + uuid) case "${COMP_WORDS[1]}" in diagnostic-vm-status) cmd=vm-list;; diagnostic-vdi-status) cmd=vdi-list;; *) cmd=`echo ${COMP_WORDS[1]} | awk -F- '/^host-cpu-/ || /^host-crashdump-/ { print $1 "-" $2 } $0 !~ /^host-cpu-/ && $0 !~ /^host-crashdump-/ { print $1 }'`-list;; esac - IFS=$'\n,' + IFS=$'\n,' COMPREPLY=( $(compgen_names "$cmd" uuid "$value") ) return 1 ;; vm) - IFS=$'\n,' - COMPREPLY=( $(compgen_names vm-list name-label "$value") ) + IFS=$'\n,' + COMPREPLY=( $(compgen_names vm-list name-label "$value") ) return 0 ;; host) - IFS=$'\n,' + IFS=$'\n,' COMPREPLY=( $(compgen_names host-list name-label "$value") ) return 0 ;; params) - val=$(final_comma_separated_param "$value") + val=$(final_comma_separated_param "$value") class=`echo ${COMP_WORDS[1]} | cut -d- -f1` params=`${xe} ${class}-list params=all 2>/dev/null| cut -d: -f1 | sed -e s/\(.*\)//g -e s/^\ *//g -e s/\ *$//g` - IFS=$'\n,' + IFS=$'\n,' COMPREPLY=( $(compgen -W "$params,all" -- "$val" ) ) return 0 ;; template) - IFS=$'\n,' - COMPREPLY=( $(compgen_names template-list name-label "$value") ) + IFS=$'\n,' + COMPREPLY=( $(compgen_names template-list name-label "$value") ) return 0 ;; @@ -90,144 +94,143 @@ _xe() ;; cd-name) if [[ "${COMP_WORDS[1]}" == "vm-cd-add" || "${COMP_WORDS[1]}" == "vm-cd-insert" ]]; then - IFS=$'\n,' - COMPREPLY=( $(compgen_names cd-list name-label "$value") ) + IFS=$'\n,' + COMPREPLY=( $(compgen_names cd-list name-label "$value") ) return 0 elif [[ "${COMP_WORDS[1]}" == "vm-cd-remove" ]]; then - vm=`for i in ${COMP_WORDS[@]:2}; do echo $i | grep "^vm="; done` + vm=`for i in ${COMP_WORDS[@]:2}; do echo $i | grep "^vm="; done` local cds=`${xe} vm-cd-list "$vm" --minimal --multiple vbd-params=vdi-name-label vdi-params=none 2>/dev/null | sed -e "s,',$MAGIC_SQUOTE,g" -e "s,\",$MAGIC_DQUOTE,g"` - IFS=$'\n,' - COMPREPLY=( $(compgen_escape "$cds" "$value") ) + IFS=$'\n,' + COMPREPLY=( $(compgen_escape "$cds" "$value") ) return 0 fi ;; - on) - IFS=$'\n,' - COMPREPLY=( $(compgen_names host-list name-label "$value") ) + on) + IFS=$'\n,' + COMPREPLY=( $(compgen_names host-list name-label "$value") ) return 0 ;; key) local keys=`${xe} log-get-keys --minimal 2>/dev/null` - IFS=$'\n,' - COMPREPLY=( $(compgen_escape "$keys" "$value") ) + IFS=$'\n,' + COMPREPLY=( $(compgen_escape "$keys" "$value") ) return 0 ;; level) - IFS=$'\n,' + IFS=$'\n,' COMPREPLY=( $(compgen -W "debug ,info ,warning ,error " -- ${value}) ) return 0 ;; sr-name-label) # for vm-install - IFS=$'\n,' + IFS=$'\n,' COMPREPLY=( $(compgen_names sr-list name-label "$value") ) return 0 ;; crash-dump-SR | suspend-image-SR | default-SR) - IFS=$'\n,' + IFS=$'\n,' COMPREPLY=( $(compgen_names sr-list uuid "$value") ) return 0 ;; type) # for vbd-create/vdi-create/sr-create/sr-probe - IFS=$'\n,' - fst=`echo ${COMP_WORDS[1]} | cut -d- -f1` + IFS=$'\n,' + fst=`echo ${COMP_WORDS[1]} | cut -d- -f1` if [[ "${fst}" == "vbd" ]]; then - COMPREPLY=( $(compgen -W "Disk ,CD " -- ${value}) ) - return 0 + COMPREPLY=( $(compgen -W "Disk ,CD " -- ${value}) ) + return 0 elif [[ "${fst}" == "vdi" ]]; then - COMPREPLY=( $(compgen -W "system ,user ,suspend ,crashdump " -- ${value}) ) - return 0 + COMPREPLY=( $(compgen -W "system ,user ,suspend ,crashdump " -- ${value}) ) + return 0 elif [[ "${fst}" == "sr" ]]; then - COMPREPLY=( $(compgen -W "$(xe sm-list params=type --minimal 2>/dev/null | sed 's/,/ ,/g') " -- ${value}) ) - return 0 + COMPREPLY=( $(compgen -W "$(xe sm-list params=type --minimal 2>/dev/null | sed 's/,/ ,/g') " -- ${value}) ) + return 0 fi ;; entries) # for host-get-system-status - val=$(final_comma_separated_param "$value") - master_uuid=$(xe pool-list params=master --minimal 2>/dev/null) - IFS=$'\n' - caps=$($xe host-get-system-status-capabilities uuid="$master_uuid" 2>/dev/null | grep '/dev/null) + IFS=$'\n' + caps=$($xe host-get-system-status-capabilities uuid="$master_uuid" 2>/dev/null | grep '/dev/null` - return 0 - ;; + case "${COMP_WORDS[1]}" in + log-set-output) + IFS=$'\n,' + COMPREPLY=( $(compgen -W "file,syslog,nil " -- ${value}) ) + ;; + host-get-system-status) + IFS=$'\n,' + COMPREPLY=( $(compgen -W "tar.bz2 ,zip " -- ${value}) ) + ;; + esac + return 0 + ;; + copy-bios-strings-from) # for vm-install + COMPREPLY=`${xe} host-list params=uuid --minimal 2>/dev/null` + return 0 + ;; backup-type) # for vmpp - IFS=$'\n,' + IFS=$'\n,' COMPREPLY=( $(compgen -W "snapshot,checkpoint" -- ${value}) ) return 0 ;; - backup-frequency) # for vmpp - IFS=$'\n,' - COMPREPLY=( $(compgen -W "hourly,daily,weekly" -- ${value}) ) - return 0 - ;; - archive-frequency) # for vmpp - IFS=$'\n,' - COMPREPLY=( $(compgen -W "never,always_after_backup,daily,weekly" -- ${value}) ) - return 0 - ;; - archive-target-type) # for vmpp - IFS=$'\n,' - COMPREPLY=( $(compgen -W "none,cifs,nfs" -- ${value}) ) - return 0 - ;; - backup-schedule:days) # for vmpp - IFS=$'\n,' - LAST_VALUE=`echo ${value}|gawk 'BEGIN{FS=" "}{print $NF}'` - COMPREPLY=( $(compgen -W "monday,tuesday,wednesday,thursday,friday,saturday,sunday" -- ${LAST_VALUE}) ) - return 0 - ;; - archive-schedule:days) # for vmpp - IFS=$'\n,' - LAST_VALUE=`echo ${value}|gawk 'BEGIN{FS=" "}{print $NF}'` - COMPREPLY=( $(compgen -W "monday,tuesday,wednesday,thursday,friday,saturday,sunday " -- ${LAST_VALUE}) ) - return 0 - ;; - edition) # for host-apply-edition (licensing) - IFS=$'\n,' - COMPREPLY=( $(compgen -W "free ,advanced ,enterprise ,platinum ,enterprise-xd " -- ${value}) ) - return 0 - ;; + backup-frequency) # for vmpp + IFS=$'\n,' + COMPREPLY=( $(compgen -W "hourly,daily,weekly" -- ${value}) ) + return 0 + ;; + archive-frequency) # for vmpp + IFS=$'\n,' + COMPREPLY=( $(compgen -W "never,always_after_backup,daily,weekly" -- ${value}) ) + return 0 + ;; + archive-target-type) # for vmpp + IFS=$'\n,' + COMPREPLY=( $(compgen -W "none,cifs,nfs" -- ${value}) ) + return 0 + ;; + backup-schedule:days) # for vmpp + IFS=$'\n,' + LAST_VALUE=`echo ${value}|gawk 'BEGIN{FS=" "}{print $NF}'` + COMPREPLY=( $(compgen -W "monday,tuesday,wednesday,thursday,friday,saturday,sunday" -- ${LAST_VALUE}) ) + return 0 + ;; + archive-schedule:days) # for vmpp + IFS=$'\n,' + LAST_VALUE=`echo ${value}|gawk 'BEGIN{FS=" "}{print $NF}'` + COMPREPLY=( $(compgen -W "monday,tuesday,wednesday,thursday,friday,saturday,sunday " -- ${LAST_VALUE}) ) + return 0 + ;; + edition) # for host-apply-edition (licensing) + IFS=$'\n,' + COMPREPLY=( $(compgen -W "free ,advanced ,enterprise ,platinum ,enterprise-xd " -- ${value}) ) + return 0 + ;; *) snd=`echo ${param} | cut -d- -f2` fst=`echo ${param} | cut -d- -f1` - + if [[ "${snd}" == "uuid" ]]; then - if [[ "${fst}" == "snapshot" ]]; then - all="" - else - all="--all" - fi - uuids=`${xe} ${fst}-list ${all} params=uuid --minimal 2>/dev/null` - IFS=$'\n,' - COMPREPLY=( $(compgen_escape "$uuids" "$value") ) - return 0 + if [[ "${fst}" == "snapshot" ]]; then + all="" + else + all="--all" + fi + uuids=`${xe} ${fst}-list ${all} params=uuid --minimal 2>/dev/null` + IFS=$'\n,' + COMPREPLY=( $(compgen_escape "$uuids" "$value") ) + return 0 else - fst=`echo ${COMP_WORDS[1]} | cut -d- -f1` - snd=`echo ${COMP_WORDS[1]} | cut -d- -f2` - if [[ "${snd}" == "list" || "${fst}" == "vm" ]]; then - IFS=$'\n,' - COMPREPLY=( $(compgen_names "${fst}-list" "$param" "$value") ) - return 0 - fi - fi + fst=`echo ${COMP_WORDS[1]} | cut -d- -f1` + snd=`echo ${COMP_WORDS[1]} | cut -d- -f2` + if [[ "${snd}" == "list" || "${fst}" == "vm" ]]; then + IFS=$'\n,' + COMPREPLY=( $(compgen_names "${fst}-list" "$param" "$value") ) + return 0 + fi + fi ;; esac else @@ -247,37 +250,37 @@ _xe() elif [ "${isvcpusparams}" ]; then extraargs=,$(for i in weight cap mask; do echo "VCPUs-params:$i="; done) elif [ "${vmselectors}" ]; then - if [ "${param}" ] ; then - extraargs=",vm=,"$(params "vm-list" | sed 's/params=//g') - else - extraargs=",vm=" - fi + if [ "${param}" ] ; then + extraargs=",vm=,"$(params "vm-list" | sed 's/params=//g') + else + extraargs=",vm=" + fi elif [ "${hostselectors}" ]; then - if [ "${param}" ] ; then - extraargs=",host=,"$(params "host-list" | sed 's/params=//g') - else - extraargs=",host=" - fi + if [ "${param}" ] ; then + extraargs=",host=,"$(params "host-list" | sed 's/params=//g') + else + extraargs=",host=" + fi elif [ "${isvmppbackupschedule}" ]; then - pfx=`echo ${isvmppbackupschedule} | cut -d ':' -f 1` - COMPREPLY=( $(compgen -W "${pfx}:min=,${pfx}:hour=,${pfx}:days=" -- ${param}) ) - return 0 - elif [ "${isvmpparchiveschedule}" ]; then - pfx=`echo ${isvmpparchiveschedule} | cut -d ':' -f 1` - COMPREPLY=( $(compgen -W "${pfx}:min=,${pfx}:hour=,${pfx}:days=" -- ${param}) ) - return 0 - elif [ "${isvmpparchivetargetconfig}" ]; then - pfx=`echo ${isvmpparchivetargetconfig} | cut -d ':' -f 1` - COMPREPLY=( $(compgen -W "${pfx}:location=,${pfx}:username=,${pfx}:password=" -- ${param}) ) - return 0 - elif [ "${isvmppalarmconfig}" ]; then - pfx=`echo ${isvmppalarmconfig} | cut -d ':' -f 1` - COMPREPLY=( $(compgen -W "${pfx}:smtp_server=,${pfx}:smtp_port=,${pfx}:email_address=" -- ${param}) ) - return 0 + pfx=`echo ${isvmppbackupschedule} | cut -d ':' -f 1` + COMPREPLY=( $(compgen -W "${pfx}:min=,${pfx}:hour=,${pfx}:days=" -- ${param}) ) + return 0 + elif [ "${isvmpparchiveschedule}" ]; then + pfx=`echo ${isvmpparchiveschedule} | cut -d ':' -f 1` + COMPREPLY=( $(compgen -W "${pfx}:min=,${pfx}:hour=,${pfx}:days=" -- ${param}) ) + return 0 + elif [ "${isvmpparchivetargetconfig}" ]; then + pfx=`echo ${isvmpparchivetargetconfig} | cut -d ':' -f 1` + COMPREPLY=( $(compgen -W "${pfx}:location=,${pfx}:username=,${pfx}:password=" -- ${param}) ) + return 0 + elif [ "${isvmppalarmconfig}" ]; then + pfx=`echo ${isvmppalarmconfig} | cut -d ':' -f 1` + COMPREPLY=( $(compgen -W "${pfx}:smtp_server=,${pfx}:smtp_port=,${pfx}:email_address=" -- ${param}) ) + return 0 else - extraargs="" + extraargs="" fi - IFS=$'\n,' + IFS=$'\n,' COMPREPLY=( $(compgen_params "${COMP_WORDS[1]}" "$extraargs" "$param") ) return 0 fi @@ -288,40 +291,40 @@ _xe() # final_comma_separated_param() { - if expr "$1" : ".*," >/dev/null - then - old_ifs="$IFS" - bits=$(echo "$1" | sed -e 's#^\(.*\),\([^,]*\)$#\1%\2#g') - IFS=% - bits=($bits) - echo "${bits[1]}" - IFS="$old_ifs" - else - echo "$1" - fi + if expr "$1" : ".*," >/dev/null + then + old_ifs="$IFS" + bits=$(echo "$1" | sed -e 's#^\(.*\),\([^,]*\)$#\1%\2#g') + IFS=% + bits=($bits) + echo "${bits[1]}" + IFS="$old_ifs" + else + echo "$1" + fi } compgen_names() { - local vals=$("$xe" "$1" --minimal params="$2" 2>/dev/null | sed -e "s,',$MAGIC_SQUOTE,g" -e "s,\",$MAGIC_DQUOTE,g") - compgen_escape "$vals" "$3" + local vals=$("$xe" "$1" --minimal params="$2" 2>/dev/null | sed -e "s,',$MAGIC_SQUOTE,g" -e "s,\",$MAGIC_DQUOTE,g") + compgen_escape "$vals" "$3" } compgen_escape() { - local v=$(echo "$2" | sed -e "s,',$MAGIC_SQUOTE,g" -e "s,\",$MAGIC_DQUOTE,g") - compgen -W "$1" -- "$v" | sed -e 's, ,\\ ,g' -e 's,(,\\(,g' -e 's,),\\),g' -e 's,$, ,g' -e 's,|,\\|,g' -e "s,$MAGIC_SQUOTE,\\\',g" -e "s,$MAGIC_DQUOTE,\\\\\",g" + local v=$(echo "$2" | sed -e "s,',$MAGIC_SQUOTE,g" -e "s,\",$MAGIC_DQUOTE,g") + compgen -W "$1" -- "$v" | sed -e 's, ,\\ ,g' -e 's,(,\\(,g' -e 's,),\\),g' -e 's,$, ,g' -e 's,|,\\|,g' -e "s,$MAGIC_SQUOTE,\\\',g" -e "s,$MAGIC_DQUOTE,\\\\\",g" } params() { - "$xe" help "$1" 2>/dev/null | grep '^[^:]*params' | cut -d: -f2- | egrep -v "^ $" | cut -c 2- | sed -e 's/,/=,/g' -e 's/$/=/g' -e 's/:=/:/g' -e 's/-=/-/g' -e 's/ //g' + "$xe" help "$1" 2>/dev/null | grep '^[^:]*params' | cut -d: -f2- | egrep -v "^ $" | cut -c 2- | sed -e 's/,/=,/g' -e 's/$/=/g' -e 's/:=/:/g' -e 's/-=/-/g' -e 's/ //g' } compgen_params() { - local v=$(params "$1" | sed -e 's/=//g' -e 's/=//g') - compgen -o nospace -W "$v$2" -- "$3" + local v=$(params "$1" | sed -e 's/=//g' -e 's/=//g') + compgen -o nospace -W "$v$2" -- "$3" } complete -F _xe -o nospace xe