github.com/openshift/source-to-image@v1.4.1-0.20240516041539-bf52fc02204e/contrib/completions/bash/s2i (about)

     1  # bash completion for s2i                                  -*- shell-script -*-
     2  
     3  __s2i_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  __s2i_init_completion()
    13  {
    14      COMPREPLY=()
    15      _get_comp_words_by_ref "$@" cur prev words cword
    16  }
    17  
    18  __s2i_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  __s2i_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  __s2i_handle_go_custom_completion()
    40  {
    41      __s2i_debug "${FUNCNAME[0]}: cur is ${cur}, words[*] is ${words[*]}, #words[@] is ${#words[@]}"
    42  
    43      local shellCompDirectiveError=1
    44      local shellCompDirectiveNoSpace=2
    45      local shellCompDirectiveNoFileComp=4
    46      local shellCompDirectiveFilterFileExt=8
    47      local shellCompDirectiveFilterDirs=16
    48  
    49      local out requestComp lastParam lastChar comp directive args
    50  
    51      # Prepare the command to request completions for the program.
    52      # Calling ${words[0]} instead of directly s2i allows handling aliases
    53      args=("${words[@]:1}")
    54      # Disable ActiveHelp which is not supported for bash completion v1
    55      requestComp="S2I_ACTIVE_HELP=0 ${words[0]} __completeNoDesc ${args[*]}"
    56  
    57      lastParam=${words[$((${#words[@]}-1))]}
    58      lastChar=${lastParam:$((${#lastParam}-1)):1}
    59      __s2i_debug "${FUNCNAME[0]}: lastParam ${lastParam}, lastChar ${lastChar}"
    60  
    61      if [ -z "${cur}" ] && [ "${lastChar}" != "=" ]; then
    62          # If the last parameter is complete (there is a space following it)
    63          # We add an extra empty parameter so we can indicate this to the go method.
    64          __s2i_debug "${FUNCNAME[0]}: Adding extra empty parameter"
    65          requestComp="${requestComp} \"\""
    66      fi
    67  
    68      __s2i_debug "${FUNCNAME[0]}: calling ${requestComp}"
    69      # Use eval to handle any environment variables and such
    70      out=$(eval "${requestComp}" 2>/dev/null)
    71  
    72      # Extract the directive integer at the very end of the output following a colon (:)
    73      directive=${out##*:}
    74      # Remove the directive
    75      out=${out%:*}
    76      if [ "${directive}" = "${out}" ]; then
    77          # There is not directive specified
    78          directive=0
    79      fi
    80      __s2i_debug "${FUNCNAME[0]}: the completion directive is: ${directive}"
    81      __s2i_debug "${FUNCNAME[0]}: the completions are: ${out}"
    82  
    83      if [ $((directive & shellCompDirectiveError)) -ne 0 ]; then
    84          # Error code.  No completion.
    85          __s2i_debug "${FUNCNAME[0]}: received error from custom completion go code"
    86          return
    87      else
    88          if [ $((directive & shellCompDirectiveNoSpace)) -ne 0 ]; then
    89              if [[ $(type -t compopt) = "builtin" ]]; then
    90                  __s2i_debug "${FUNCNAME[0]}: activating no space"
    91                  compopt -o nospace
    92              fi
    93          fi
    94          if [ $((directive & shellCompDirectiveNoFileComp)) -ne 0 ]; then
    95              if [[ $(type -t compopt) = "builtin" ]]; then
    96                  __s2i_debug "${FUNCNAME[0]}: activating no file completion"
    97                  compopt +o default
    98              fi
    99          fi
   100      fi
   101  
   102      if [ $((directive & shellCompDirectiveFilterFileExt)) -ne 0 ]; then
   103          # File extension filtering
   104          local fullFilter filter filteringCmd
   105          # Do not use quotes around the $out variable or else newline
   106          # characters will be kept.
   107          for filter in ${out}; do
   108              fullFilter+="$filter|"
   109          done
   110  
   111          filteringCmd="_filedir $fullFilter"
   112          __s2i_debug "File filtering command: $filteringCmd"
   113          $filteringCmd
   114      elif [ $((directive & shellCompDirectiveFilterDirs)) -ne 0 ]; then
   115          # File completion for directories only
   116          local subdir
   117          # Use printf to strip any trailing newline
   118          subdir=$(printf "%s" "${out}")
   119          if [ -n "$subdir" ]; then
   120              __s2i_debug "Listing directories in $subdir"
   121              __s2i_handle_subdirs_in_dir_flag "$subdir"
   122          else
   123              __s2i_debug "Listing directories in ."
   124              _filedir -d
   125          fi
   126      else
   127          while IFS='' read -r comp; do
   128              COMPREPLY+=("$comp")
   129          done < <(compgen -W "${out}" -- "$cur")
   130      fi
   131  }
   132  
   133  __s2i_handle_reply()
   134  {
   135      __s2i_debug "${FUNCNAME[0]}"
   136      local comp
   137      case $cur in
   138          -*)
   139              if [[ $(type -t compopt) = "builtin" ]]; then
   140                  compopt -o nospace
   141              fi
   142              local allflags
   143              if [ ${#must_have_one_flag[@]} -ne 0 ]; then
   144                  allflags=("${must_have_one_flag[@]}")
   145              else
   146                  allflags=("${flags[*]} ${two_word_flags[*]}")
   147              fi
   148              while IFS='' read -r comp; do
   149                  COMPREPLY+=("$comp")
   150              done < <(compgen -W "${allflags[*]}" -- "$cur")
   151              if [[ $(type -t compopt) = "builtin" ]]; then
   152                  [[ "${COMPREPLY[0]}" == *= ]] || compopt +o nospace
   153              fi
   154  
   155              # complete after --flag=abc
   156              if [[ $cur == *=* ]]; then
   157                  if [[ $(type -t compopt) = "builtin" ]]; then
   158                      compopt +o nospace
   159                  fi
   160  
   161                  local index flag
   162                  flag="${cur%=*}"
   163                  __s2i_index_of_word "${flag}" "${flags_with_completion[@]}"
   164                  COMPREPLY=()
   165                  if [[ ${index} -ge 0 ]]; then
   166                      PREFIX=""
   167                      cur="${cur#*=}"
   168                      ${flags_completion[${index}]}
   169                      if [ -n "${ZSH_VERSION:-}" ]; then
   170                          # zsh completion needs --flag= prefix
   171                          eval "COMPREPLY=( \"\${COMPREPLY[@]/#/${flag}=}\" )"
   172                      fi
   173                  fi
   174              fi
   175  
   176              if [[ -z "${flag_parsing_disabled}" ]]; then
   177                  # If flag parsing is enabled, we have completed the flags and can return.
   178                  # If flag parsing is disabled, we may not know all (or any) of the flags, so we fallthrough
   179                  # to possibly call handle_go_custom_completion.
   180                  return 0;
   181              fi
   182              ;;
   183      esac
   184  
   185      # check if we are handling a flag with special work handling
   186      local index
   187      __s2i_index_of_word "${prev}" "${flags_with_completion[@]}"
   188      if [[ ${index} -ge 0 ]]; then
   189          ${flags_completion[${index}]}
   190          return
   191      fi
   192  
   193      # we are parsing a flag and don't have a special handler, no completion
   194      if [[ ${cur} != "${words[cword]}" ]]; then
   195          return
   196      fi
   197  
   198      local completions
   199      completions=("${commands[@]}")
   200      if [[ ${#must_have_one_noun[@]} -ne 0 ]]; then
   201          completions+=("${must_have_one_noun[@]}")
   202      elif [[ -n "${has_completion_function}" ]]; then
   203          # if a go completion function is provided, defer to that function
   204          __s2i_handle_go_custom_completion
   205      fi
   206      if [[ ${#must_have_one_flag[@]} -ne 0 ]]; then
   207          completions+=("${must_have_one_flag[@]}")
   208      fi
   209      while IFS='' read -r comp; do
   210          COMPREPLY+=("$comp")
   211      done < <(compgen -W "${completions[*]}" -- "$cur")
   212  
   213      if [[ ${#COMPREPLY[@]} -eq 0 && ${#noun_aliases[@]} -gt 0 && ${#must_have_one_noun[@]} -ne 0 ]]; then
   214          while IFS='' read -r comp; do
   215              COMPREPLY+=("$comp")
   216          done < <(compgen -W "${noun_aliases[*]}" -- "$cur")
   217      fi
   218  
   219      if [[ ${#COMPREPLY[@]} -eq 0 ]]; then
   220          if declare -F __s2i_custom_func >/dev/null; then
   221              # try command name qualified custom func
   222              __s2i_custom_func
   223          else
   224              # otherwise fall back to unqualified for compatibility
   225              declare -F __custom_func >/dev/null && __custom_func
   226          fi
   227      fi
   228  
   229      # available in bash-completion >= 2, not always present on macOS
   230      if declare -F __ltrim_colon_completions >/dev/null; then
   231          __ltrim_colon_completions "$cur"
   232      fi
   233  
   234      # If there is only 1 completion and it is a flag with an = it will be completed
   235      # but we don't want a space after the =
   236      if [[ "${#COMPREPLY[@]}" -eq "1" ]] && [[ $(type -t compopt) = "builtin" ]] && [[ "${COMPREPLY[0]}" == --*= ]]; then
   237         compopt -o nospace
   238      fi
   239  }
   240  
   241  # The arguments should be in the form "ext1|ext2|extn"
   242  __s2i_handle_filename_extension_flag()
   243  {
   244      local ext="$1"
   245      _filedir "@(${ext})"
   246  }
   247  
   248  __s2i_handle_subdirs_in_dir_flag()
   249  {
   250      local dir="$1"
   251      pushd "${dir}" >/dev/null 2>&1 && _filedir -d && popd >/dev/null 2>&1 || return
   252  }
   253  
   254  __s2i_handle_flag()
   255  {
   256      __s2i_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   257  
   258      # if a command required a flag, and we found it, unset must_have_one_flag()
   259      local flagname=${words[c]}
   260      local flagvalue=""
   261      # if the word contained an =
   262      if [[ ${words[c]} == *"="* ]]; then
   263          flagvalue=${flagname#*=} # take in as flagvalue after the =
   264          flagname=${flagname%=*} # strip everything after the =
   265          flagname="${flagname}=" # but put the = back
   266      fi
   267      __s2i_debug "${FUNCNAME[0]}: looking for ${flagname}"
   268      if __s2i_contains_word "${flagname}" "${must_have_one_flag[@]}"; then
   269          must_have_one_flag=()
   270      fi
   271  
   272      # if you set a flag which only applies to this command, don't show subcommands
   273      if __s2i_contains_word "${flagname}" "${local_nonpersistent_flags[@]}"; then
   274        commands=()
   275      fi
   276  
   277      # keep flag value with flagname as flaghash
   278      # flaghash variable is an associative array which is only supported in bash > 3.
   279      if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
   280          if [ -n "${flagvalue}" ] ; then
   281              flaghash[${flagname}]=${flagvalue}
   282          elif [ -n "${words[ $((c+1)) ]}" ] ; then
   283              flaghash[${flagname}]=${words[ $((c+1)) ]}
   284          else
   285              flaghash[${flagname}]="true" # pad "true" for bool flag
   286          fi
   287      fi
   288  
   289      # skip the argument to a two word flag
   290      if [[ ${words[c]} != *"="* ]] && __s2i_contains_word "${words[c]}" "${two_word_flags[@]}"; then
   291          __s2i_debug "${FUNCNAME[0]}: found a flag ${words[c]}, skip the next argument"
   292          c=$((c+1))
   293          # if we are looking for a flags value, don't show commands
   294          if [[ $c -eq $cword ]]; then
   295              commands=()
   296          fi
   297      fi
   298  
   299      c=$((c+1))
   300  
   301  }
   302  
   303  __s2i_handle_noun()
   304  {
   305      __s2i_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   306  
   307      if __s2i_contains_word "${words[c]}" "${must_have_one_noun[@]}"; then
   308          must_have_one_noun=()
   309      elif __s2i_contains_word "${words[c]}" "${noun_aliases[@]}"; then
   310          must_have_one_noun=()
   311      fi
   312  
   313      nouns+=("${words[c]}")
   314      c=$((c+1))
   315  }
   316  
   317  __s2i_handle_command()
   318  {
   319      __s2i_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   320  
   321      local next_command
   322      if [[ -n ${last_command} ]]; then
   323          next_command="_${last_command}_${words[c]//:/__}"
   324      else
   325          if [[ $c -eq 0 ]]; then
   326              next_command="_s2i_root_command"
   327          else
   328              next_command="_${words[c]//:/__}"
   329          fi
   330      fi
   331      c=$((c+1))
   332      __s2i_debug "${FUNCNAME[0]}: looking for ${next_command}"
   333      declare -F "$next_command" >/dev/null && $next_command
   334  }
   335  
   336  __s2i_handle_word()
   337  {
   338      if [[ $c -ge $cword ]]; then
   339          __s2i_handle_reply
   340          return
   341      fi
   342      __s2i_debug "${FUNCNAME[0]}: c is $c words[c] is ${words[c]}"
   343      if [[ "${words[c]}" == -* ]]; then
   344          __s2i_handle_flag
   345      elif __s2i_contains_word "${words[c]}" "${commands[@]}"; then
   346          __s2i_handle_command
   347      elif [[ $c -eq 0 ]]; then
   348          __s2i_handle_command
   349      elif __s2i_contains_word "${words[c]}" "${command_aliases[@]}"; then
   350          # aliashash variable is an associative array which is only supported in bash > 3.
   351          if [[ -z "${BASH_VERSION:-}" || "${BASH_VERSINFO[0]:-}" -gt 3 ]]; then
   352              words[c]=${aliashash[${words[c]}]}
   353              __s2i_handle_command
   354          else
   355              __s2i_handle_noun
   356          fi
   357      else
   358          __s2i_handle_noun
   359      fi
   360      __s2i_handle_word
   361  }
   362  
   363  _s2i_build()
   364  {
   365      last_command="s2i_build"
   366  
   367      command_aliases=()
   368  
   369      commands=()
   370  
   371      flags=()
   372      two_word_flags=()
   373      local_nonpersistent_flags=()
   374      flags_with_completion=()
   375      flags_completion=()
   376  
   377      flags+=("--add-host=")
   378      two_word_flags+=("--add-host")
   379      local_nonpersistent_flags+=("--add-host")
   380      local_nonpersistent_flags+=("--add-host=")
   381      flags+=("--allowed-uids=")
   382      two_word_flags+=("--allowed-uids")
   383      two_word_flags+=("-u")
   384      local_nonpersistent_flags+=("--allowed-uids")
   385      local_nonpersistent_flags+=("--allowed-uids=")
   386      local_nonpersistent_flags+=("-u")
   387      flags+=("--application-name=")
   388      two_word_flags+=("--application-name")
   389      two_word_flags+=("-n")
   390      local_nonpersistent_flags+=("--application-name")
   391      local_nonpersistent_flags+=("--application-name=")
   392      local_nonpersistent_flags+=("-n")
   393      flags+=("--as-dockerfile=")
   394      two_word_flags+=("--as-dockerfile")
   395      local_nonpersistent_flags+=("--as-dockerfile")
   396      local_nonpersistent_flags+=("--as-dockerfile=")
   397      flags+=("--assemble-runtime-user=")
   398      two_word_flags+=("--assemble-runtime-user")
   399      local_nonpersistent_flags+=("--assemble-runtime-user")
   400      local_nonpersistent_flags+=("--assemble-runtime-user=")
   401      flags+=("--assemble-user=")
   402      two_word_flags+=("--assemble-user")
   403      local_nonpersistent_flags+=("--assemble-user")
   404      local_nonpersistent_flags+=("--assemble-user=")
   405      flags+=("--callback-url=")
   406      two_word_flags+=("--callback-url")
   407      local_nonpersistent_flags+=("--callback-url")
   408      local_nonpersistent_flags+=("--callback-url=")
   409      flags+=("--cap-drop=")
   410      two_word_flags+=("--cap-drop")
   411      local_nonpersistent_flags+=("--cap-drop")
   412      local_nonpersistent_flags+=("--cap-drop=")
   413      flags+=("--context-dir=")
   414      two_word_flags+=("--context-dir")
   415      local_nonpersistent_flags+=("--context-dir")
   416      local_nonpersistent_flags+=("--context-dir=")
   417      flags+=("--copy")
   418      flags+=("-c")
   419      local_nonpersistent_flags+=("--copy")
   420      local_nonpersistent_flags+=("-c")
   421      flags+=("--description=")
   422      two_word_flags+=("--description")
   423      local_nonpersistent_flags+=("--description")
   424      local_nonpersistent_flags+=("--description=")
   425      flags+=("--destination=")
   426      two_word_flags+=("--destination")
   427      two_word_flags+=("-d")
   428      local_nonpersistent_flags+=("--destination")
   429      local_nonpersistent_flags+=("--destination=")
   430      local_nonpersistent_flags+=("-d")
   431      flags+=("--dockercfg-path=")
   432      two_word_flags+=("--dockercfg-path")
   433      local_nonpersistent_flags+=("--dockercfg-path")
   434      local_nonpersistent_flags+=("--dockercfg-path=")
   435      flags+=("--env=")
   436      two_word_flags+=("--env")
   437      two_word_flags+=("-e")
   438      local_nonpersistent_flags+=("--env")
   439      local_nonpersistent_flags+=("--env=")
   440      local_nonpersistent_flags+=("-e")
   441      flags+=("--environment-file=")
   442      two_word_flags+=("--environment-file")
   443      two_word_flags+=("-E")
   444      local_nonpersistent_flags+=("--environment-file")
   445      local_nonpersistent_flags+=("--environment-file=")
   446      local_nonpersistent_flags+=("-E")
   447      flags+=("--exclude=")
   448      two_word_flags+=("--exclude")
   449      local_nonpersistent_flags+=("--exclude")
   450      local_nonpersistent_flags+=("--exclude=")
   451      flags+=("--ignore-submodules")
   452      local_nonpersistent_flags+=("--ignore-submodules")
   453      flags+=("--image-scripts-url=")
   454      two_word_flags+=("--image-scripts-url")
   455      local_nonpersistent_flags+=("--image-scripts-url")
   456      local_nonpersistent_flags+=("--image-scripts-url=")
   457      flags+=("--incremental")
   458      local_nonpersistent_flags+=("--incremental")
   459      flags+=("--incremental-pull-policy=")
   460      two_word_flags+=("--incremental-pull-policy")
   461      local_nonpersistent_flags+=("--incremental-pull-policy")
   462      local_nonpersistent_flags+=("--incremental-pull-policy=")
   463      flags+=("--inject=")
   464      two_word_flags+=("--inject")
   465      two_word_flags+=("-i")
   466      local_nonpersistent_flags+=("--inject")
   467      local_nonpersistent_flags+=("--inject=")
   468      local_nonpersistent_flags+=("-i")
   469      flags+=("--keep-symlinks")
   470      local_nonpersistent_flags+=("--keep-symlinks")
   471      flags+=("--location=")
   472      two_word_flags+=("--location")
   473      two_word_flags+=("-l")
   474      local_nonpersistent_flags+=("--location")
   475      local_nonpersistent_flags+=("--location=")
   476      local_nonpersistent_flags+=("-l")
   477      flags+=("--network=")
   478      two_word_flags+=("--network")
   479      local_nonpersistent_flags+=("--network")
   480      local_nonpersistent_flags+=("--network=")
   481      flags+=("--pull-policy=")
   482      two_word_flags+=("--pull-policy")
   483      two_word_flags+=("-p")
   484      local_nonpersistent_flags+=("--pull-policy")
   485      local_nonpersistent_flags+=("--pull-policy=")
   486      local_nonpersistent_flags+=("-p")
   487      flags+=("--quiet")
   488      flags+=("-q")
   489      local_nonpersistent_flags+=("--quiet")
   490      local_nonpersistent_flags+=("-q")
   491      flags+=("--ref=")
   492      two_word_flags+=("--ref")
   493      two_word_flags+=("-r")
   494      local_nonpersistent_flags+=("--ref")
   495      local_nonpersistent_flags+=("--ref=")
   496      local_nonpersistent_flags+=("-r")
   497      flags+=("--rm")
   498      local_nonpersistent_flags+=("--rm")
   499      flags+=("--run")
   500      local_nonpersistent_flags+=("--run")
   501      flags+=("--runtime-artifact=")
   502      two_word_flags+=("--runtime-artifact")
   503      two_word_flags+=("-a")
   504      local_nonpersistent_flags+=("--runtime-artifact")
   505      local_nonpersistent_flags+=("--runtime-artifact=")
   506      local_nonpersistent_flags+=("-a")
   507      flags+=("--runtime-image=")
   508      two_word_flags+=("--runtime-image")
   509      local_nonpersistent_flags+=("--runtime-image")
   510      local_nonpersistent_flags+=("--runtime-image=")
   511      flags+=("--runtime-pull-policy=")
   512      two_word_flags+=("--runtime-pull-policy")
   513      local_nonpersistent_flags+=("--runtime-pull-policy")
   514      local_nonpersistent_flags+=("--runtime-pull-policy=")
   515      flags+=("--save-temp-dir")
   516      local_nonpersistent_flags+=("--save-temp-dir")
   517      flags+=("--scripts=")
   518      two_word_flags+=("--scripts")
   519      local_nonpersistent_flags+=("--scripts")
   520      local_nonpersistent_flags+=("--scripts=")
   521      flags+=("--scripts-url=")
   522      two_word_flags+=("--scripts-url")
   523      two_word_flags+=("-s")
   524      local_nonpersistent_flags+=("--scripts-url")
   525      local_nonpersistent_flags+=("--scripts-url=")
   526      local_nonpersistent_flags+=("-s")
   527      flags+=("--use-config")
   528      local_nonpersistent_flags+=("--use-config")
   529      flags+=("--volume=")
   530      two_word_flags+=("--volume")
   531      two_word_flags+=("-v")
   532      local_nonpersistent_flags+=("--volume")
   533      local_nonpersistent_flags+=("--volume=")
   534      local_nonpersistent_flags+=("-v")
   535      flags+=("--ca=")
   536      two_word_flags+=("--ca")
   537      flags+=("--cert=")
   538      two_word_flags+=("--cert")
   539      flags+=("--key=")
   540      two_word_flags+=("--key")
   541      flags+=("--loglevel=")
   542      two_word_flags+=("--loglevel")
   543      flags+=("--tls")
   544      flags+=("--tlsverify")
   545      flags+=("--url=")
   546      two_word_flags+=("--url")
   547      two_word_flags+=("-U")
   548  
   549      must_have_one_flag=()
   550      must_have_one_noun=()
   551      noun_aliases=()
   552  }
   553  
   554  _s2i_completion()
   555  {
   556      last_command="s2i_completion"
   557  
   558      command_aliases=()
   559  
   560      commands=()
   561  
   562      flags=()
   563      two_word_flags=()
   564      local_nonpersistent_flags=()
   565      flags_with_completion=()
   566      flags_completion=()
   567  
   568      flags+=("--help")
   569      flags+=("-h")
   570      local_nonpersistent_flags+=("--help")
   571      local_nonpersistent_flags+=("-h")
   572      flags+=("--ca=")
   573      two_word_flags+=("--ca")
   574      flags+=("--cert=")
   575      two_word_flags+=("--cert")
   576      flags+=("--key=")
   577      two_word_flags+=("--key")
   578      flags+=("--loglevel=")
   579      two_word_flags+=("--loglevel")
   580      flags+=("--tls")
   581      flags+=("--tlsverify")
   582      flags+=("--url=")
   583      two_word_flags+=("--url")
   584      two_word_flags+=("-U")
   585  
   586      must_have_one_flag=()
   587      must_have_one_noun=()
   588      must_have_one_noun+=("bash")
   589      must_have_one_noun+=("zsh")
   590      noun_aliases=()
   591  }
   592  
   593  _s2i_create()
   594  {
   595      last_command="s2i_create"
   596  
   597      command_aliases=()
   598  
   599      commands=()
   600  
   601      flags=()
   602      two_word_flags=()
   603      local_nonpersistent_flags=()
   604      flags_with_completion=()
   605      flags_completion=()
   606  
   607      flags+=("--ca=")
   608      two_word_flags+=("--ca")
   609      flags+=("--cert=")
   610      two_word_flags+=("--cert")
   611      flags+=("--key=")
   612      two_word_flags+=("--key")
   613      flags+=("--loglevel=")
   614      two_word_flags+=("--loglevel")
   615      flags+=("--tls")
   616      flags+=("--tlsverify")
   617      flags+=("--url=")
   618      two_word_flags+=("--url")
   619      two_word_flags+=("-U")
   620  
   621      must_have_one_flag=()
   622      must_have_one_noun=()
   623      noun_aliases=()
   624  }
   625  
   626  _s2i_generate()
   627  {
   628      last_command="s2i_generate"
   629  
   630      command_aliases=()
   631  
   632      commands=()
   633  
   634      flags=()
   635      two_word_flags=()
   636      local_nonpersistent_flags=()
   637      flags_with_completion=()
   638      flags_completion=()
   639  
   640      flags+=("--assemble-runtime-user=")
   641      two_word_flags+=("--assemble-runtime-user")
   642      local_nonpersistent_flags+=("--assemble-runtime-user")
   643      local_nonpersistent_flags+=("--assemble-runtime-user=")
   644      flags+=("--assemble-user=")
   645      two_word_flags+=("--assemble-user")
   646      local_nonpersistent_flags+=("--assemble-user")
   647      local_nonpersistent_flags+=("--assemble-user=")
   648      flags+=("--env=")
   649      two_word_flags+=("--env")
   650      two_word_flags+=("-e")
   651      local_nonpersistent_flags+=("--env")
   652      local_nonpersistent_flags+=("--env=")
   653      local_nonpersistent_flags+=("-e")
   654      flags+=("--quiet")
   655      flags+=("-q")
   656      local_nonpersistent_flags+=("--quiet")
   657      local_nonpersistent_flags+=("-q")
   658      flags+=("--ca=")
   659      two_word_flags+=("--ca")
   660      flags+=("--cert=")
   661      two_word_flags+=("--cert")
   662      flags+=("--key=")
   663      two_word_flags+=("--key")
   664      flags+=("--loglevel=")
   665      two_word_flags+=("--loglevel")
   666      flags+=("--tls")
   667      flags+=("--tlsverify")
   668      flags+=("--url=")
   669      two_word_flags+=("--url")
   670      two_word_flags+=("-U")
   671  
   672      must_have_one_flag=()
   673      must_have_one_noun=()
   674      noun_aliases=()
   675  }
   676  
   677  _s2i_help()
   678  {
   679      last_command="s2i_help"
   680  
   681      command_aliases=()
   682  
   683      commands=()
   684  
   685      flags=()
   686      two_word_flags=()
   687      local_nonpersistent_flags=()
   688      flags_with_completion=()
   689      flags_completion=()
   690  
   691      flags+=("--ca=")
   692      two_word_flags+=("--ca")
   693      flags+=("--cert=")
   694      two_word_flags+=("--cert")
   695      flags+=("--key=")
   696      two_word_flags+=("--key")
   697      flags+=("--loglevel=")
   698      two_word_flags+=("--loglevel")
   699      flags+=("--tls")
   700      flags+=("--tlsverify")
   701      flags+=("--url=")
   702      two_word_flags+=("--url")
   703      two_word_flags+=("-U")
   704  
   705      must_have_one_flag=()
   706      must_have_one_noun=()
   707      has_completion_function=1
   708      noun_aliases=()
   709  }
   710  
   711  _s2i_rebuild()
   712  {
   713      last_command="s2i_rebuild"
   714  
   715      command_aliases=()
   716  
   717      commands=()
   718  
   719      flags=()
   720      two_word_flags=()
   721      local_nonpersistent_flags=()
   722      flags_with_completion=()
   723      flags_completion=()
   724  
   725      flags+=("--callback-url=")
   726      two_word_flags+=("--callback-url")
   727      local_nonpersistent_flags+=("--callback-url")
   728      local_nonpersistent_flags+=("--callback-url=")
   729      flags+=("--destination=")
   730      two_word_flags+=("--destination")
   731      two_word_flags+=("-d")
   732      local_nonpersistent_flags+=("--destination")
   733      local_nonpersistent_flags+=("--destination=")
   734      local_nonpersistent_flags+=("-d")
   735      flags+=("--dockercfg-path=")
   736      two_word_flags+=("--dockercfg-path")
   737      local_nonpersistent_flags+=("--dockercfg-path")
   738      local_nonpersistent_flags+=("--dockercfg-path=")
   739      flags+=("--incremental")
   740      local_nonpersistent_flags+=("--incremental")
   741      flags+=("--incremental-pull-policy=")
   742      two_word_flags+=("--incremental-pull-policy")
   743      local_nonpersistent_flags+=("--incremental-pull-policy")
   744      local_nonpersistent_flags+=("--incremental-pull-policy=")
   745      flags+=("--pull-policy=")
   746      two_word_flags+=("--pull-policy")
   747      two_word_flags+=("-p")
   748      local_nonpersistent_flags+=("--pull-policy")
   749      local_nonpersistent_flags+=("--pull-policy=")
   750      local_nonpersistent_flags+=("-p")
   751      flags+=("--quiet")
   752      flags+=("-q")
   753      local_nonpersistent_flags+=("--quiet")
   754      local_nonpersistent_flags+=("-q")
   755      flags+=("--rm")
   756      local_nonpersistent_flags+=("--rm")
   757      flags+=("--runtime-pull-policy=")
   758      two_word_flags+=("--runtime-pull-policy")
   759      local_nonpersistent_flags+=("--runtime-pull-policy")
   760      local_nonpersistent_flags+=("--runtime-pull-policy=")
   761      flags+=("--save-temp-dir")
   762      local_nonpersistent_flags+=("--save-temp-dir")
   763      flags+=("--ca=")
   764      two_word_flags+=("--ca")
   765      flags+=("--cert=")
   766      two_word_flags+=("--cert")
   767      flags+=("--key=")
   768      two_word_flags+=("--key")
   769      flags+=("--loglevel=")
   770      two_word_flags+=("--loglevel")
   771      flags+=("--tls")
   772      flags+=("--tlsverify")
   773      flags+=("--url=")
   774      two_word_flags+=("--url")
   775      two_word_flags+=("-U")
   776  
   777      must_have_one_flag=()
   778      must_have_one_noun=()
   779      noun_aliases=()
   780  }
   781  
   782  _s2i_usage()
   783  {
   784      last_command="s2i_usage"
   785  
   786      command_aliases=()
   787  
   788      commands=()
   789  
   790      flags=()
   791      two_word_flags=()
   792      local_nonpersistent_flags=()
   793      flags_with_completion=()
   794      flags_completion=()
   795  
   796      flags+=("--callback-url=")
   797      two_word_flags+=("--callback-url")
   798      local_nonpersistent_flags+=("--callback-url")
   799      local_nonpersistent_flags+=("--callback-url=")
   800      flags+=("--destination=")
   801      two_word_flags+=("--destination")
   802      two_word_flags+=("-d")
   803      local_nonpersistent_flags+=("--destination")
   804      local_nonpersistent_flags+=("--destination=")
   805      local_nonpersistent_flags+=("-d")
   806      flags+=("--dockercfg-path=")
   807      two_word_flags+=("--dockercfg-path")
   808      local_nonpersistent_flags+=("--dockercfg-path")
   809      local_nonpersistent_flags+=("--dockercfg-path=")
   810      flags+=("--incremental")
   811      local_nonpersistent_flags+=("--incremental")
   812      flags+=("--incremental-pull-policy=")
   813      two_word_flags+=("--incremental-pull-policy")
   814      local_nonpersistent_flags+=("--incremental-pull-policy")
   815      local_nonpersistent_flags+=("--incremental-pull-policy=")
   816      flags+=("--location=")
   817      two_word_flags+=("--location")
   818      two_word_flags+=("-l")
   819      local_nonpersistent_flags+=("--location")
   820      local_nonpersistent_flags+=("--location=")
   821      local_nonpersistent_flags+=("-l")
   822      flags+=("--pull-policy=")
   823      two_word_flags+=("--pull-policy")
   824      two_word_flags+=("-p")
   825      local_nonpersistent_flags+=("--pull-policy")
   826      local_nonpersistent_flags+=("--pull-policy=")
   827      local_nonpersistent_flags+=("-p")
   828      flags+=("--quiet")
   829      flags+=("-q")
   830      local_nonpersistent_flags+=("--quiet")
   831      local_nonpersistent_flags+=("-q")
   832      flags+=("--rm")
   833      local_nonpersistent_flags+=("--rm")
   834      flags+=("--runtime-pull-policy=")
   835      two_word_flags+=("--runtime-pull-policy")
   836      local_nonpersistent_flags+=("--runtime-pull-policy")
   837      local_nonpersistent_flags+=("--runtime-pull-policy=")
   838      flags+=("--save-temp-dir")
   839      local_nonpersistent_flags+=("--save-temp-dir")
   840      flags+=("--ca=")
   841      two_word_flags+=("--ca")
   842      flags+=("--cert=")
   843      two_word_flags+=("--cert")
   844      flags+=("--key=")
   845      two_word_flags+=("--key")
   846      flags+=("--loglevel=")
   847      two_word_flags+=("--loglevel")
   848      flags+=("--tls")
   849      flags+=("--tlsverify")
   850      flags+=("--url=")
   851      two_word_flags+=("--url")
   852      two_word_flags+=("-U")
   853  
   854      must_have_one_flag=()
   855      must_have_one_noun=()
   856      noun_aliases=()
   857  }
   858  
   859  _s2i_version()
   860  {
   861      last_command="s2i_version"
   862  
   863      command_aliases=()
   864  
   865      commands=()
   866  
   867      flags=()
   868      two_word_flags=()
   869      local_nonpersistent_flags=()
   870      flags_with_completion=()
   871      flags_completion=()
   872  
   873      flags+=("--ca=")
   874      two_word_flags+=("--ca")
   875      flags+=("--cert=")
   876      two_word_flags+=("--cert")
   877      flags+=("--key=")
   878      two_word_flags+=("--key")
   879      flags+=("--loglevel=")
   880      two_word_flags+=("--loglevel")
   881      flags+=("--tls")
   882      flags+=("--tlsverify")
   883      flags+=("--url=")
   884      two_word_flags+=("--url")
   885      two_word_flags+=("-U")
   886  
   887      must_have_one_flag=()
   888      must_have_one_noun=()
   889      noun_aliases=()
   890  }
   891  
   892  _s2i_root_command()
   893  {
   894      last_command="s2i"
   895  
   896      command_aliases=()
   897  
   898      commands=()
   899      commands+=("build")
   900      commands+=("completion")
   901      commands+=("create")
   902      commands+=("generate")
   903      commands+=("help")
   904      commands+=("rebuild")
   905      commands+=("usage")
   906      commands+=("version")
   907  
   908      flags=()
   909      two_word_flags=()
   910      local_nonpersistent_flags=()
   911      flags_with_completion=()
   912      flags_completion=()
   913  
   914      flags+=("--ca=")
   915      two_word_flags+=("--ca")
   916      flags+=("--cert=")
   917      two_word_flags+=("--cert")
   918      flags+=("--key=")
   919      two_word_flags+=("--key")
   920      flags+=("--loglevel=")
   921      two_word_flags+=("--loglevel")
   922      flags+=("--tls")
   923      flags+=("--tlsverify")
   924      flags+=("--url=")
   925      two_word_flags+=("--url")
   926      two_word_flags+=("-U")
   927  
   928      must_have_one_flag=()
   929      must_have_one_noun=()
   930      noun_aliases=()
   931  }
   932  
   933  __start_s2i()
   934  {
   935      local cur prev words cword split
   936      declare -A flaghash 2>/dev/null || :
   937      declare -A aliashash 2>/dev/null || :
   938      if declare -F _init_completion >/dev/null 2>&1; then
   939          _init_completion -s || return
   940      else
   941          __s2i_init_completion -n "=" || return
   942      fi
   943  
   944      local c=0
   945      local flag_parsing_disabled=
   946      local flags=()
   947      local two_word_flags=()
   948      local local_nonpersistent_flags=()
   949      local flags_with_completion=()
   950      local flags_completion=()
   951      local commands=("s2i")
   952      local command_aliases=()
   953      local must_have_one_flag=()
   954      local must_have_one_noun=()
   955      local has_completion_function=""
   956      local last_command=""
   957      local nouns=()
   958      local noun_aliases=()
   959  
   960      __s2i_handle_word
   961  }
   962  
   963  if [[ $(type -t compopt) = "builtin" ]]; then
   964      complete -o default -F __start_s2i s2i
   965  else
   966      complete -o default -o nospace -F __start_s2i s2i
   967  fi
   968  
   969  # ex: ts=4 sw=4 et filetype=sh