github.com/nak3/source-to-image@v1.1.10-0.20180319140719-2ed55639898d/contrib/completions/bash/s2i (about)

     1  # bash completion for s2i                                  -*- shell-script -*-
     2  
     3  __debug()
     4  {
     5      if [[ -n ${BASH_COMP_DEBUG_FILE} ]]; then
     6          echo "$*" >> "${BASH_COMP_DEBUG_FILE}"
     7      fi
     8  }
     9  
    10  # Homebrew on Macs have version 1.3 of bash-completion which doesn't include
    11  # _init_completion. This is a very minimal version of that function.
    12  __my_init_completion()
    13  {
    14      COMPREPLY=()
    15      _get_comp_words_by_ref "$@" cur prev words cword
    16  }
    17  
    18  __index_of_word()
    19  {
    20      local w word=$1
    21      shift
    22      index=0
    23      for w in "$@"; do
    24          [[ $w = "$word" ]] && return
    25          index=$((index+1))
    26      done
    27      index=-1
    28  }
    29  
    30  __contains_word()
    31  {
    32      local w word=$1; shift
    33      for w in "$@"; do
    34          [[ $w = "$word" ]] && return
    35      done
    36      return 1
    37  }
    38  
    39  __handle_reply()
    40  {
    41      __debug "${FUNCNAME[0]}"
    42      case $cur in
    43          -*)
    44              if [[ $(type -t compopt) = "builtin" ]]; then
    45                  compopt -o nospace
    46              fi
    47              local allflags
    48              if [ ${#must_have_one_flag[@]} -ne 0 ]; then
    49                  allflags=("${must_have_one_flag[@]}")
    50              else
    51                  allflags=("${flags[*]} ${two_word_flags[*]}")
    52              fi
    53              COMPREPLY=( $(compgen -W "${allflags[*]}" -- "$cur") )
    54              if [[ $(type -t compopt) = "builtin" ]]; then
    55                  [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
    56              fi
    57  
    58              # complete after --flag=abc
    59              if [[ $cur == *=* ]]; then
    60                  if [[ $(type -t compopt) = "builtin" ]]; then
    61                      compopt +o nospace
    62                  fi
    63  
    64                  local index flag
    65                  flag="${cur%%=*}"
    66                  __index_of_word "${flag}" "${flags_with_completion[@]}"
    67                  if [[ ${index} -ge 0 ]]; then
    68                      COMPREPLY=()
    69                      PREFIX=""
    70                      cur="${cur#*=}"
    71                      ${flags_completion[${index}]}
    72                      if [ -n "${ZSH_VERSION}" ]; then
    73                          # zfs completion needs --flag= prefix
    74                          eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
    75                      fi
    76                  fi
    77              fi
    78              return 0;
    79              ;;
    80      esac
    81  
    82      # check if we are handling a flag with special work handling
    83      local index
    84      __index_of_word "${prev}" "${flags_with_completion[@]}"
    85      if [[ ${index} -ge 0 ]]; then
    86          ${flags_completion[${index}]}
    87          return
    88      fi
    89  
    90      # we are parsing a flag and don't have a special handler, no completion
    91      if [[ ${cur} != "${words[cword]}" ]]; then
    92          return
    93      fi
    94  
    95      local completions
    96      completions=("${commands[@]}")
    97      if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
    98          completions=("${must_have_one_noun[@]}")
    99      fi
   100      if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
   101          completions+=("${must_have_one_flag[@]}")
   102      fi
   103      COMPREPLY=( $(compgen -W "${completions[*]}" -- "$cur") )
   104  
   105      if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
   106          COMPREPLY=( $(compgen -W "${noun_aliases[*]}" -- "$cur") )
   107      fi
   108  
   109      if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
   110          declare -F __custom_func >/dev/null && __custom_func
   111      fi
   112  
   113      __ltrim_colon_completions "$cur"
   114  }
   115  
   116  # The arguments should be in the form "ext1|ext2|extn"
   117  __handle_filename_extension_flag()
   118  {
   119      local ext="$1"
   120      _filedir "@(${ext})"
   121  }
   122  
   123  __handle_subdirs_in_dir_flag()
   124  {
   125      local dir="$1"
   126      pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1
   127  }
   128  
   129  __handle_flag()
   130  {
   131      __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   132  
   133      # if a command required a flag, and we found it, unset must_have_one_flag()
   134      local flagname=${words[c]}
   135      local flagvalue
   136      # if the word contained an =
   137      if [[ ${words[c]} == *"="* ]]; then
   138          flagvalue=${flagname#*=} # take in as flagvalue after the =
   139          flagname=${flagname%%=*} # strip everything after the =
   140          flagname="${flagname}=" # but put the = back
   141      fi
   142      __debug "${FUNCNAME[0]}: looking for ${flagname}"
   143      if __contains_word "${flagname}" "${must_have_one_flag[@]}"; then
   144          must_have_one_flag=()
   145      fi
   146  
   147      # if you set a flag which only applies to this command, don't show subcommands
   148      if __contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
   149        commands=()
   150      fi
   151  
   152      # keep flag value with flagname as flaghash
   153      if [ -n "${flagvalue}" ] ; then
   154          flaghash[${flagname}]=${flagvalue}
   155      elif [ -n "${words[ $((c+1)) ]}" ] ; then
   156          flaghash[${flagname}]=${words[ $((c+1)) ]}
   157      else
   158          flaghash[${flagname}]="true" # pad "true" for bool flag
   159      fi
   160  
   161      # skip the argument to a two word flag
   162      if __contains_word "${words[c]}" "${two_word_flags[@]}"; then
   163          c=$((c+1))
   164          # if we are looking for a flags value, don't show commands
   165          if [[ $c -eq $cword ]]; then
   166              commands=()
   167          fi
   168      fi
   169  
   170      c=$((c+1))
   171  
   172  }
   173  
   174  __handle_noun()
   175  {
   176      __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   177  
   178      if __contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
   179          must_have_one_noun=()
   180      elif __contains_word "${words[c]}" "${noun_aliases[@]}"; then
   181          must_have_one_noun=()
   182      fi
   183  
   184      nouns+=("${words[c]}")
   185      c=$((c+1))
   186  }
   187  
   188  __handle_command()
   189  {
   190      __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   191  
   192      local next_command
   193      if [[ -n ${last_command} ]]; then
   194          next_command="_${last_command}_${words[c]//:/__}"
   195      else
   196          if [[ $c -eq 0 ]]; then
   197              next_command="_$(basename "${words[c]//:/__}")"
   198          else
   199              next_command="_${words[c]//:/__}"
   200          fi
   201      fi
   202      c=$((c+1))
   203      __debug "${FUNCNAME[0]}: looking for ${next_command}"
   204      declare -F $next_command >/dev/null && $next_command
   205  }
   206  
   207  __handle_word()
   208  {
   209      if [[ $c -ge $cword ]]; then
   210          __handle_reply
   211          return
   212      fi
   213      __debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   214      if [[ "${words[c]}" == -* ]]; then
   215          __handle_flag
   216      elif __contains_word "${words[c]}" "${commands[@]}"; then
   217          __handle_command
   218      elif [[ $c -eq 0 ]] && __contains_word "$(basename "${words[c]}")" "${commands[@]}"; then
   219          __handle_command
   220      else
   221          __handle_noun
   222      fi
   223      __handle_word
   224  }
   225  
   226  _s2i_build()
   227  {
   228      last_command="s2i_build"
   229      commands=()
   230  
   231      flags=()
   232      two_word_flags=()
   233      local_nonpersistent_flags=()
   234      flags_with_completion=()
   235      flags_completion=()
   236  
   237      flags+=("--allowed-uids=")
   238      two_word_flags+=("-u")
   239      local_nonpersistent_flags+=("--allowed-uids=")
   240      flags+=("--application-name=")
   241      two_word_flags+=("-n")
   242      local_nonpersistent_flags+=("--application-name=")
   243      flags+=("--assemble-user=")
   244      local_nonpersistent_flags+=("--assemble-user=")
   245      flags+=("--callback-url=")
   246      local_nonpersistent_flags+=("--callback-url=")
   247      flags+=("--cap-drop=")
   248      local_nonpersistent_flags+=("--cap-drop=")
   249      flags+=("--context-dir=")
   250      local_nonpersistent_flags+=("--context-dir=")
   251      flags+=("--copy")
   252      flags+=("-c")
   253      local_nonpersistent_flags+=("--copy")
   254      flags+=("--description=")
   255      local_nonpersistent_flags+=("--description=")
   256      flags+=("--destination=")
   257      two_word_flags+=("-d")
   258      local_nonpersistent_flags+=("--destination=")
   259      flags+=("--dockercfg-path=")
   260      local_nonpersistent_flags+=("--dockercfg-path=")
   261      flags+=("--env=")
   262      two_word_flags+=("-e")
   263      local_nonpersistent_flags+=("--env=")
   264      flags+=("--environment-file=")
   265      two_word_flags+=("-E")
   266      local_nonpersistent_flags+=("--environment-file=")
   267      flags+=("--exclude=")
   268      local_nonpersistent_flags+=("--exclude=")
   269      flags+=("--ignore-submodules")
   270      local_nonpersistent_flags+=("--ignore-submodules")
   271      flags+=("--incremental")
   272      local_nonpersistent_flags+=("--incremental")
   273      flags+=("--incremental-pull-policy=")
   274      local_nonpersistent_flags+=("--incremental-pull-policy=")
   275      flags+=("--inject=")
   276      two_word_flags+=("-i")
   277      local_nonpersistent_flags+=("--inject=")
   278      flags+=("--location=")
   279      two_word_flags+=("-l")
   280      local_nonpersistent_flags+=("--location=")
   281      flags+=("--network=")
   282      local_nonpersistent_flags+=("--network=")
   283      flags+=("--pull-policy=")
   284      two_word_flags+=("-p")
   285      local_nonpersistent_flags+=("--pull-policy=")
   286      flags+=("--quiet")
   287      flags+=("-q")
   288      local_nonpersistent_flags+=("--quiet")
   289      flags+=("--ref=")
   290      two_word_flags+=("-r")
   291      local_nonpersistent_flags+=("--ref=")
   292      flags+=("--rm")
   293      local_nonpersistent_flags+=("--rm")
   294      flags+=("--run")
   295      local_nonpersistent_flags+=("--run")
   296      flags+=("--runtime-artifact=")
   297      two_word_flags+=("-a")
   298      local_nonpersistent_flags+=("--runtime-artifact=")
   299      flags+=("--runtime-image=")
   300      local_nonpersistent_flags+=("--runtime-image=")
   301      flags+=("--runtime-pull-policy=")
   302      local_nonpersistent_flags+=("--runtime-pull-policy=")
   303      flags+=("--save-temp-dir")
   304      local_nonpersistent_flags+=("--save-temp-dir")
   305      flags+=("--scripts=")
   306      local_nonpersistent_flags+=("--scripts=")
   307      flags+=("--scripts-url=")
   308      two_word_flags+=("-s")
   309      local_nonpersistent_flags+=("--scripts-url=")
   310      flags+=("--use-config")
   311      local_nonpersistent_flags+=("--use-config")
   312      flags+=("--volume=")
   313      two_word_flags+=("-v")
   314      local_nonpersistent_flags+=("--volume=")
   315      flags+=("--ca=")
   316      flags+=("--cert=")
   317      flags+=("--key=")
   318      flags+=("--loglevel=")
   319      flags+=("--tls")
   320      flags+=("--tlsverify")
   321      flags+=("--url=")
   322      two_word_flags+=("-U")
   323  
   324      must_have_one_flag=()
   325      must_have_one_noun=()
   326      noun_aliases=()
   327  }
   328  
   329  _s2i_completion()
   330  {
   331      last_command="s2i_completion"
   332      commands=()
   333  
   334      flags=()
   335      two_word_flags=()
   336      local_nonpersistent_flags=()
   337      flags_with_completion=()
   338      flags_completion=()
   339  
   340      flags+=("--ca=")
   341      flags+=("--cert=")
   342      flags+=("--key=")
   343      flags+=("--loglevel=")
   344      flags+=("--tls")
   345      flags+=("--tlsverify")
   346      flags+=("--url=")
   347      two_word_flags+=("-U")
   348  
   349      must_have_one_flag=()
   350      must_have_one_noun=()
   351      must_have_one_noun+=("bash")
   352      must_have_one_noun+=("zsh")
   353      noun_aliases=()
   354  }
   355  
   356  _s2i_create()
   357  {
   358      last_command="s2i_create"
   359      commands=()
   360  
   361      flags=()
   362      two_word_flags=()
   363      local_nonpersistent_flags=()
   364      flags_with_completion=()
   365      flags_completion=()
   366  
   367      flags+=("--ca=")
   368      flags+=("--cert=")
   369      flags+=("--key=")
   370      flags+=("--loglevel=")
   371      flags+=("--tls")
   372      flags+=("--tlsverify")
   373      flags+=("--url=")
   374      two_word_flags+=("-U")
   375  
   376      must_have_one_flag=()
   377      must_have_one_noun=()
   378      noun_aliases=()
   379  }
   380  
   381  _s2i_rebuild()
   382  {
   383      last_command="s2i_rebuild"
   384      commands=()
   385  
   386      flags=()
   387      two_word_flags=()
   388      local_nonpersistent_flags=()
   389      flags_with_completion=()
   390      flags_completion=()
   391  
   392      flags+=("--callback-url=")
   393      local_nonpersistent_flags+=("--callback-url=")
   394      flags+=("--destination=")
   395      two_word_flags+=("-d")
   396      local_nonpersistent_flags+=("--destination=")
   397      flags+=("--dockercfg-path=")
   398      local_nonpersistent_flags+=("--dockercfg-path=")
   399      flags+=("--incremental")
   400      local_nonpersistent_flags+=("--incremental")
   401      flags+=("--incremental-pull-policy=")
   402      local_nonpersistent_flags+=("--incremental-pull-policy=")
   403      flags+=("--pull-policy=")
   404      two_word_flags+=("-p")
   405      local_nonpersistent_flags+=("--pull-policy=")
   406      flags+=("--quiet")
   407      flags+=("-q")
   408      local_nonpersistent_flags+=("--quiet")
   409      flags+=("--rm")
   410      local_nonpersistent_flags+=("--rm")
   411      flags+=("--runtime-pull-policy=")
   412      local_nonpersistent_flags+=("--runtime-pull-policy=")
   413      flags+=("--save-temp-dir")
   414      local_nonpersistent_flags+=("--save-temp-dir")
   415      flags+=("--ca=")
   416      flags+=("--cert=")
   417      flags+=("--key=")
   418      flags+=("--loglevel=")
   419      flags+=("--tls")
   420      flags+=("--tlsverify")
   421      flags+=("--url=")
   422      two_word_flags+=("-U")
   423  
   424      must_have_one_flag=()
   425      must_have_one_noun=()
   426      noun_aliases=()
   427  }
   428  
   429  _s2i_usage()
   430  {
   431      last_command="s2i_usage"
   432      commands=()
   433  
   434      flags=()
   435      two_word_flags=()
   436      local_nonpersistent_flags=()
   437      flags_with_completion=()
   438      flags_completion=()
   439  
   440      flags+=("--callback-url=")
   441      local_nonpersistent_flags+=("--callback-url=")
   442      flags+=("--destination=")
   443      two_word_flags+=("-d")
   444      local_nonpersistent_flags+=("--destination=")
   445      flags+=("--dockercfg-path=")
   446      local_nonpersistent_flags+=("--dockercfg-path=")
   447      flags+=("--incremental")
   448      local_nonpersistent_flags+=("--incremental")
   449      flags+=("--incremental-pull-policy=")
   450      local_nonpersistent_flags+=("--incremental-pull-policy=")
   451      flags+=("--location=")
   452      two_word_flags+=("-l")
   453      local_nonpersistent_flags+=("--location=")
   454      flags+=("--pull-policy=")
   455      two_word_flags+=("-p")
   456      local_nonpersistent_flags+=("--pull-policy=")
   457      flags+=("--quiet")
   458      flags+=("-q")
   459      local_nonpersistent_flags+=("--quiet")
   460      flags+=("--rm")
   461      local_nonpersistent_flags+=("--rm")
   462      flags+=("--runtime-pull-policy=")
   463      local_nonpersistent_flags+=("--runtime-pull-policy=")
   464      flags+=("--save-temp-dir")
   465      local_nonpersistent_flags+=("--save-temp-dir")
   466      flags+=("--ca=")
   467      flags+=("--cert=")
   468      flags+=("--key=")
   469      flags+=("--loglevel=")
   470      flags+=("--tls")
   471      flags+=("--tlsverify")
   472      flags+=("--url=")
   473      two_word_flags+=("-U")
   474  
   475      must_have_one_flag=()
   476      must_have_one_noun=()
   477      noun_aliases=()
   478  }
   479  
   480  _s2i_version()
   481  {
   482      last_command="s2i_version"
   483      commands=()
   484  
   485      flags=()
   486      two_word_flags=()
   487      local_nonpersistent_flags=()
   488      flags_with_completion=()
   489      flags_completion=()
   490  
   491      flags+=("--ca=")
   492      flags+=("--cert=")
   493      flags+=("--key=")
   494      flags+=("--loglevel=")
   495      flags+=("--tls")
   496      flags+=("--tlsverify")
   497      flags+=("--url=")
   498      two_word_flags+=("-U")
   499  
   500      must_have_one_flag=()
   501      must_have_one_noun=()
   502      noun_aliases=()
   503  }
   504  
   505  _s2i()
   506  {
   507      last_command="s2i"
   508      commands=()
   509      commands+=("build")
   510      commands+=("completion")
   511      commands+=("create")
   512      commands+=("rebuild")
   513      commands+=("usage")
   514      commands+=("version")
   515  
   516      flags=()
   517      two_word_flags=()
   518      local_nonpersistent_flags=()
   519      flags_with_completion=()
   520      flags_completion=()
   521  
   522      flags+=("--ca=")
   523      flags+=("--cert=")
   524      flags+=("--key=")
   525      flags+=("--loglevel=")
   526      flags+=("--tls")
   527      flags+=("--tlsverify")
   528      flags+=("--url=")
   529      two_word_flags+=("-U")
   530  
   531      must_have_one_flag=()
   532      must_have_one_noun=()
   533      noun_aliases=()
   534  }
   535  
   536  __start_s2i()
   537  {
   538      local cur prev words cword
   539      declare -A flaghash 2>/dev/null || :
   540      if declare -F _init_completion >/dev/null 2>&1; then
   541          _init_completion -s || return
   542      else
   543          __my_init_completion -n "=" || return
   544      fi
   545  
   546      local c=0
   547      local flags=()
   548      local two_word_flags=()
   549      local local_nonpersistent_flags=()
   550      local flags_with_completion=()
   551      local flags_completion=()
   552      local commands=("s2i")
   553      local must_have_one_flag=()
   554      local must_have_one_noun=()
   555      local last_command
   556      local nouns=()
   557  
   558      __handle_word
   559  }
   560  
   561  if [[ $(type -t compopt) = "builtin" ]]; then
   562      complete -o default -F __start_s2i s2i
   563  else
   564      complete -o default -o nospace -F __start_s2i s2i
   565  fi
   566  
   567  # ex: ts=4 sw=4 et filetype=sh