Skip to content
Snippets Groups Projects
Select Git revision
  • 2d1d6ada7c03c6ea961f18d43f2889c9574ae077
  • master default
  • host01
  • ns4
  • kodi
5 results

mail.shore.co.il.conf

Blame
  • molecule 4.19 KiB
    #!/bin/bash
    
    # Credits:
    # https://blog.heckel.xyz/2015/03/24/bash-completion-with-sub-commands-and-dynamic-options/
    # https://raw.githubusercontent.com/syncany/syncany/develop/gradle/bash/syncany.bash-completion
    
    shopt -s progcomp
    
    _platforms(){
      molecule status --porcelain --platforms | cut -d' ' -f1 2>/dev/null
    }
    
    _providers(){
      molecule status --porcelain --providers | cut -d' ' -f1 2>/dev/null
    }
    
    _hosts(){
      molecule status --porcelain --hosts | cut -d' ' -f1 2>/dev/null
    }
    
    _molecule(){
      local cur prev firstword lastword complete_words complete_options
      cur=${COMP_WORDS[COMP_CWORD]}
    	prev=${COMP_WORDS[COMP_CWORD-1]}
    	firstword=$(_get_firstword)
    
      GLOBAL_COMMANDS="syntax check create converge dependency destroy idempotence init list login status test verify"
      GLOBAL_OPTIONS="-h -v"
      SYNTAX_OPTIONS=""
      CHECK_OPTIONS=""
      CREATE_OPTIONS="--debug --platform --provider --tags"
      CONVERGE_OPTIONS="--debug --platform --provider --tags"
      DEPENDENCY_OPTIONS=""
      DESTROY_OPTIONS="--debug --platform --provider --tags"
      IDEMPOTENCE_OPTIONS="--debug --platform --provider --tags"
      INIT_OPTIONS="--docker"
      LIST_OPTIONS="--debug -m"
      LOGIN_OPTIONS=""
      STATUS_OPTIONS="--debug --hosts --platforms --porcelain --providers"
      TEST_OPTIONS="--debug --platform --provider --tags --sudo"
      VERIFY_OPTIONS="--debug --platform --provider --tags --sudo"
    
      # Un-comment this for debug purposes:
      # echo -e "\nprev = $prev, cur = $cur, firstword = $firstword.\n"
    
      case "${firstword}" in
        check)
          complete_options="${CHECK_OPTIONS}"
          ;;
        create)
          case "${prev}" in
            --platform)
              complete_words=$(_platforms)
              ;;
            --provider)
              complete_words=$(_providers)
              ;;
            *)
              complete_options="${CREATE_OPTIONS}"
              ;;
          esac
          ;;
        converge)
          case "${prev}" in
            --platform)
              complete_words=$(_platforms)
              ;;
            --provider)
              complete_words=$(_providers)
              ;;
            *)
              complete_options="${CONVERGE_OPTIONS}"
              ;;
          esac
          ;;
        dependency)
          complete_options="${DEPENDENCY_OPTIONS}"
          ;;
        destroy)
          case "${prev}" in
            --platform)
              complete_words=$(_platforms)
              ;;
            --provider)
              complete_words=$(_providers)
              ;;
            *)
              complete_options="${DESTROY_OPTIONS}"
              ;;
          esac
          ;;
        idempotence)
          case "${prev}" in
            --platform)
              complete_words=$(_platforms)
              ;;
            --provider)
              complete_words=$(_providers)
              ;;
            *)
              complete_options="${IDEMPOTENCE_OPTIONS}"
              ;;
          esac
          ;;
        init)
          complete_options="${INIT_OPTIONS}"
          ;;
        list)
          complete_options="${LIST_OPTIONS}"
          ;;
        login)
          complete_options="${LOGIN_OPTIONS}"
          complete_words=$(_hosts)
          ;;
        status)
          complete_options="${STATUS_OPTIONS}"
          ;;
        syntax)
          complete_options="${SYNTAX_OPTIONS}"
          ;;
        test)
          case "${prev}" in
            --platform)
              complete_words=$(_platforms)
              ;;
            --provider)
              complete_words=$(_providers)
              ;;
            *)
              complete_options="${TEST_OPTIONS}"
              ;;
          esac
          ;;
        verify)
          case "${prev}" in
            --platform)
              complete_words=$(_platforms)
              ;;
            --provider)
              complete_words=$(_providers)
              ;;
            *)
              complete_options="${VERIFY_OPTIONS}"
              ;;
          esac
          ;;
        *)
      		complete_words="${GLOBAL_COMMANDS}"
      		complete_options="${GLOBAL_OPTIONS}"
      		;;
      esac
    
      # Either display words or options, depending on the user input
    	if [[ ${cur} == -* ]]; then
    		COMPREPLY=( $( compgen -W "${complete_options}" -- ${cur} ))
    	else
    		COMPREPLY=( $( compgen -W "${complete_words}" -- ${cur} ))
    	fi
    
    	return 0
    }
    
    # Determines the first non-option word of the command line. This is usually the command.
    _get_firstword() {
    	local firstword i
    
    	firstword=
    	for ((i = 1; i < ${#COMP_WORDS[@]}; ++i)); do
    		if [[ ${COMP_WORDS[i]} != -* ]]; then
    			firstword=${COMP_WORDS[i]}
    			break
    		fi
    	done
    
    	echo $firstword
    }
    
    complete -F _molecule molecule